C 对unistd_XX.h感到困惑

C 对unistd_XX.h感到困惑,c,linux,kernel,C,Linux,Kernel,我试图获取所有系统调用的常量,但在内核源代码中,include/asm/unistd.h、include/asm/unistd_XX.h和include/asm generic/unistd.h之间似乎存在巨大的混乱 它们之间的区别是什么 如果我想获得以下信息,我应该使用哪一个: a) x86 syscalls b) x64 syscalls c) IA32 emulation syscalls 因此,正确的方法是将unistd.h用于x64和/或unistd_32.h用于x86和ia32。

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

它们之间的区别是什么

如果我想获得以下信息,我应该使用哪一个:

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

因此,正确的方法是将
unistd.h
用于
x64
和/或
unistd_32.h
用于
x86
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
uni_hack.h
#如果已定义(配置X86)
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