小编iti*_*avi的帖子

Linux上的POSIX AIO和libaio之间的区别?

似乎明白了:

POSIX AIOAPI是原型<aio.h>并且您将程序与librt(-lrt)链接,而libaioAPI <libaio.h>和您的程序中的API 与libaio(-laio)链接.

我无法弄清楚:

1.内核是否以不同的方式处理这两种方法中的任何一种?

2. O_DIRECT使用其中任何一个标志是强制性的吗?

正如在这篇文章中提到,libaio 在没有O_DIRECT使用的情况下工作正常libaio.但是,理解但是:

根据R.Love的Linux系统编程书,Linux只支持常规文件上的aio(我假设它是POSIX AIO).只有在打开O_DIRECT的小程序(使用aio.h,与-lrt链接)调用aio_write时没有O_DIRECT标志打开的文件没有问题.

linux io asynchronous aio linux-kernel

50
推荐指数
1
解决办法
2万
查看次数

交叉编译内核模块

我正在尝试在我的intel x86主机上为ARM体系结构交叉编译helloworld内核(2.6.x)模块.

ARM的代码源工具链位于:/ home/ravi/workspace/hawk/arm-2009q3

内核源代码位于:/ home/ravi/workspace/hawk/linux-omapl1

我的Makefile:

ARCH=arm
CROSS_COMPILE=arm-none-linux-gnueabi
obj-m := Hello.o
KDIR := /home/ravi/workspace/hawk/linux-omapl1
PWD := $(shell pwd)
default:
          $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
          $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
Run Code Online (Sandbox Code Playgroud)

当我运行make时,.ko生成的是我的主机,这意味着makefile正在调用本机编译器而不是交叉编译器.我做错了什么?交叉编译器的二进制文件在我的路径中.

makefile cross-compiling kernel-module embedded-linux linux-toolchain

31
推荐指数
4
解决办法
7万
查看次数

使用uinput模拟Linux中的绝对鼠标移动

我正试图用绝对坐标移动光标.这是代码:

#include <stdio.h>                                                              
#include <stdlib.h>                                                             
#include <string.h>                                                             
#include <unistd.h>                                                             
#include <fcntl.h>                                                              
#include <errno.h>                                                              
#include <linux/input.h>                                                        
#include <linux/uinput.h>                                                       
#include <signal.h>                                                             

#define die(str, args...) do { \                                                
        perror(str); \                                                          
        exit(EXIT_FAILURE); \                                                   
    } while(0)                                                                  

    int                    fd;                                                  

static void signal_handler(int signo)                                           
{                                                                               
    printf("\nCaught SIGINT\n");                                                
        if(ioctl(fd, UI_DEV_DESTROY) < 0)                                       
           die("error: cannot destroy uinput device\n");                        
    else printf("Destroyed uinput_user_dev\n\n");                               
    close(fd);                                                                  
    exit(EXIT_SUCCESS);                                                         
}                                                                               

int                                                                             
main(void)                                                                      
{                                                                               

    struct uinput_user_dev uidev;                                               
    struct input_event     ev;                                                  
    int                    x, y;                                                
    int                    i;                                                   

    if(signal(SIGINT,signal_handler)==SIG_ERR)                                  
    {                                                                           
    printf("error registering signal handler\n");                               
    exit(EXIT_FAILURE);                                                         

    }                                                                           

    fd = open("/dev/uinput", …
Run Code Online (Sandbox Code Playgroud)

linux mouse linux-device-driver

8
推荐指数
1
解决办法
9332
查看次数

使用内在函数的霓虹灯优化

了解ARM NEON内在函数,我正在计算一个函数,我编写的函数将数组中的元素加倍.使用内在函数的版本比函数的普通C版本花费更多时间.

没有NEON:

    void  double_elements(unsigned int *ptr, unsigned int size)
 {
        unsigned int loop;
        for( loop= 0; loop<size; loop++)
                ptr[loop]<<=1;
        return;
 }
Run Code Online (Sandbox Code Playgroud)

使用NEON:

 void  double_elements(unsigned int *ptr, unsigned int size)
{    
        unsigned int i;
        uint32x4_t Q0,vector128Output;
        for( i=0;i<(SIZE/4);i++)
        {
                Q0=vld1q_u32(ptr);               
                Q0=vaddq_u32(Q0,Q0);
                vst1q_u32(ptr,Q0);
                ptr+=4;

        }
        return;
}
Run Code Online (Sandbox Code Playgroud)

想知道阵列和向量之间的加载/存储操作是否消耗更多时间来抵消并行添加的好处.

更新:更多信息回应伊戈尔的回复.
1.代码发布在这里:
plain.c
plain.s
neon.c
neon.s
从两个汇编列表中的部分(标签)L7,我看到霓虹灯版本有更多的汇编指令.(因此更多时间采取?)2.
我在arm-gcc上使用-mfpu = neon编译,没有其他标志或优化.对于普通版本,根本没有编译器标志.
那是一个错字,SIZE的意思是大小;两者都是一样的.
4,5.由4000个元素组成.我在函数调用之前和之后使用gettimeofday()定时.NEON = 230us,普通= 155us.
是的,我在每种情况下印刷了元素.
除此之外,没有任何进步.

arm neon cortex-a8

5
推荐指数
1
解决办法
8304
查看次数

自定义GtkFileChooser

这里有GTK + noob问题:

是否可以自定义GtkFileChooserButton或GtkFileChooserDialog以删除"位置"部分(左侧)和顶部的"位置"输入框?

我实际上要做的是允许用户仅从特定文件夹(我使用gtk_file_chooser_set_current_folder设置)中选择文件,并禁用导航到文件系统上的其他位置.

这是标准文件选择器对话框: 标准的GtkFilechooser对话框

这就是我需要的: 在此输入图像描述

gtk

5
推荐指数
2
解决办法
3351
查看次数