简体   繁体   English

找不到unistd_32.h和syscall_table_32.h

[英]unistd_32.h and syscall_table_32.h not found

I am building a system call on linux kernel 3.8.0. 我正在Linux内核3.8.0上构建系统调用。 I added my code to pre>/usr/src/linux/kernel/sys.c But I cannot find any unistd_32.h to add 我将代码添加到pre> /usr/src/linux/kernel/sys.c中,但是找不到任何unistd_32.h要添加

#define __NR_helloworld

and syscall_table_32.h to add 和syscall_table_32.h添加

.
long sys_helloworld
There is a file called unistd.h. 有一个名为unistd.h的文件。 But it is not seems to be the correct file 但这似乎不是正确的文件

 <pre>#ifndef _ASM_X86_UNISTD_H #define _ASM_X86_UNISTD_H 1 #include <uapi/asm/unistd.h> # ifdef CONFIG_X86_X32_ABI # define __SYSCALL_MASK (~(__X32_SYSCALL_BIT)) # else # define __SYSCALL_MASK (~0) # endif # ifdef CONFIG_X86_32 # include <asm/unistd_32.h> # define __ARCH_WANT_STAT64 # define __ARCH_WANT_SYS_IPC # define __ARCH_WANT_SYS_OLD_MMAP # define __ARCH_WANT_SYS_OLD_SELECT # else # include <asm/unistd_64.h> # include <asm/unistd_64_x32.h> # define __ARCH_WANT_COMPAT_SYS_TIME # endif # define __ARCH_WANT_OLD_READDIR # define __ARCH_WANT_OLD_STAT # define __ARCH_WANT_SYS_ALARM # define __ARCH_WANT_SYS_FADVISE64 # define __ARCH_WANT_SYS_GETHOSTNAME # define __ARCH_WANT_SYS_GETPGRP # define __ARCH_WANT_SYS_LLSEEK # define __ARCH_WANT_SYS_NICE # define __ARCH_WANT_SYS_OLDUMOUNT # define __ARCH_WANT_SYS_OLD_GETRLIMIT # define __ARCH_WANT_SYS_OLD_UNAME # define __ARCH_WANT_SYS_PAUSE # define __ARCH_WANT_SYS_RT_SIGACTION # define __ARCH_WANT_SYS_RT_SIGSUSPEND # define __ARCH_WANT_SYS_SGETMASK # define __ARCH_WANT_SYS_SIGNAL # define __ARCH_WANT_SYS_SIGPENDING # define __ARCH_WANT_SYS_SIGPROCMASK # define __ARCH_WANT_SYS_SOCKETCALL # define __ARCH_WANT_SYS_TIME # define __ARCH_WANT_SYS_UTIME # define __ARCH_WANT_SYS_WAITPID # define __ARCH_WANT_SYS_FORK # define __ARCH_WANT_SYS_VFORK # define __ARCH_WANT_SYS_CLONE /* * "Conditional" syscalls * * What we want is __attribute__((weak,alias("sys_ni_syscall"))), * but it doesn't work on all toolchains, so we just do it by hand */ # define cond_syscall(x) asm(".weak\\t" #x "\\n\\t.set\\t" #x ",sys_ni_syscall") #endif /* _ASM_X86_UNISTD_H */</pre> 

Please Help ThankYou 请帮忙谢谢

The way you add the system calls in latest kernel has been changed. 在最新内核中添加系统调用的方式已更改。 Now you need to modify the following files to add a new syscall. 现在,您需要修改以下文件以添加新的syscall。

      arch/x86/syscalls/syscall_32.tbl >> for 32-bit 
      arch/x86/syscalls/syscall_64.tbl >> for 64-bit
      include/linux/syscalls.h    

An example of adding sys_finit_module: 添加sys_finit_module的示例:

vim /arch/x86/syscalls/syscall_32.tbl vim /arch/x86/syscalls/syscall_32.tbl

       347  i386    process_vm_readv    sys_process_vm_readv          compat_sys_process_vm_readv
       348  i386    process_vm_writev   sys_process_vm_writev       compat_sys_process_vm_writev
       349  i386    kcmp            sys_kcmp
       **350    i386    finit_module        sys_finit_module**

vim include/linux/syscalls.h vim include / linux / syscalls.h

     asmlinkage long sys_finit_module(int fd, const char __user *uargs);

in kernel 4.4.3, I think the files are at: 在内核4.4.3中,我认为文件位于:

arch/x86/entry/syscall_32.tbl >> for 32-bit, and arch/x86/entry/syscall_64.tbl >> for 64-bit 对于32位,为arch / x86 / entry / syscall_32.tbl >>,对于64位,为arch / x86 / entry / syscall_64.tbl >>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM