2013-12-01 4 views
1

Я создаю системный вызов на linux kernel 3.8.0. Я добавил свой код до> /usr/src/linux/kernel/sys.c Но я не могу найти unistd_32.h добавитьunistd_32.h и syscall_table_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> 

Пожалуйста, помогите ThankYou

ответ

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:

ВИМ /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** 

ВИМ включают в себя/Linux/syscalls.h

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

в ядре 4.4.3, я думаю, что файлы находятся по адресу:

арка/x86/запись/syscall_32.tbl >> для 32-разрядных и арка/x86/запись/syscall_64.tbl >> для 64-битных