[英]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_helloworldThere is a file called unistd.h.
<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.