我似乎明白了:
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标志打开的文件没有问题.
我正在尝试在我的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
我正试图用绝对坐标移动光标.这是代码:
#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) 了解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.
是的,我在每种情况下印刷了元素.
除此之外,没有任何进步.
这里有GTK + noob问题:
是否可以自定义GtkFileChooserButton或GtkFileChooserDialog以删除"位置"部分(左侧)和顶部的"位置"输入框?
我实际上要做的是允许用户仅从特定文件夹(我使用gtk_file_chooser_set_current_folder设置)中选择文件,并禁用导航到文件系统上的其他位置.
这是标准文件选择器对话框:

这就是我需要的:
