我正在linux内核3.8.0上构建一个系统调用。我添加了我的代码 预> /usr/src/linux/kernel/sys.c 但我找不到任何unistd_32.h来添加
#define __NR_helloworld
和要添加的syscall_table_32.h
. long sys_helloworld有一个名为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>
请帮助谢谢你
答案 0 :(得分:1)
在最新内核中添加系统调用的方式已更改。现在,您需要修改以下文件以添加新的系统调用。
arch/x86/syscalls/syscall_32.tbl >> for 32-bit
arch/x86/syscalls/syscall_64.tbl >> for 64-bit
include/linux/syscalls.h
添加sys_finit_module的示例:
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
asmlinkage long sys_finit_module(int fd, const char __user *uargs);
答案 1 :(得分:0)
arch / x86 / entry / syscall_32.tbl&gt;&gt;对于32位,和 arch / x86 / entry / syscall_64.tbl&gt;&gt;对于64位