0

include/asm/unistd.h我正在尝试获取所有系统调用的常量,但,include/asm/unistd_XX.hinclude/asm-generic/unistd.h内核源代码之间似乎存在巨大的混乱。

他们每个人之间有什么区别?

如果我想获得,我应该使用哪一个:

a) x86 syscalls
b) x64 syscalls
c) IA32 emulation syscalls
4

1 回答 1

0

因此,正确的方法是使用unistd.hforx64和/或unistd_32.hfor x86and ia32。这些文件位于您的 linux 发行版的标头中。但请记住,发行版之间(甚至内核之间)的路径会发生变化,因此找出这些文件的确切位置的最佳方法

uni_hack.h

#if defined(CONFIG_X86)  <---- replace with whatever you want, #ifdef CONFIG_IA32_EMULATION for example
#   include <asm/unistd_32.h>
#endif

-

Kbuild file

obj-m += kernel_module_example.o

$(obj)/kernel_module_example.o: $(obj)/real_unistd.h

$(obj)/real_unistd.h: $(src)/uni_hack.h FORCE
    cpp $(c_flags) -E -dM <$< >$@  <---- this will generate "real_unistd.h" in the directory of your kernel module, and it will contain the content of unistd_32.h

使用unistd.hforx64只是#include在源代码中添加它的问题。

于 2013-07-09T22:59:46.223 回答