2012-06-11 116 views
1

這兩個文件有什麼區別?我真的不明白。我應該提到第一個文件應該是arch/x86/include/asm/unistd_32.h(或和_64.h)。這裏是它們所包含的快速預覽:arch/x86/include/asm/unistd.h與include/asm-generic/unistd.h


arch/x86/include/asm/unistd.h


#ifndef _ASM_X86_UNISTD_32_H 
#define _ASM_X86_UNISTD_32_H 

/* 
* This file contains the system call numbers. 
*/ 

#define __NR_restart_syscall  0 
#define __NR_exit   1 
#define __NR_fork   2 
#define __NR_read   3 
#define __NR_write  4 
#define __NR_open   5 
#define __NR_close  6 
#define __NR_waitpid   7 
#define __NR_creat  8 
#define __NR_link   9 
#define __NR_unlink  10 
#define __NR_execve  11 
#define __NR_chdir  12 
#define __NR_time  13 
#define __NR_mknod  14 
#define __NR_chmod  15 
#define __NR_lchown  16 
#define __NR_break  17 
#define __NR_oldstat   18 
#define __NR_lseek  19 
#define __NR_getpid  20 
#define __NR_mount  21 
#define __NR_umount  22 

include/asm-generic/unistd.h


#if !defined(_ASM_GENERIC_UNISTD_H) || defined(__SYSCALL) 
#define _ASM_GENERIC_UNISTD_H 

#include <asm/bitsperlong.h> 

/* 
* This file contains the system call numbers, based on the 
* layout of the x86-64 architecture, which embeds the 
* pointer to the syscall in the table. 
* 
* As a basic principle, no duplication of functionality 
* should be added, e.g. we don't use lseek when llseek 
* is present. New architectures should use this file 
* and implement the less feature-full calls in user space. 
*/ 

#ifndef __SYSCALL 
#define __SYSCALL(x, y) 
#endif 

#if __BITS_PER_LONG == 32 
#define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _32) 
#else 
#define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _64) 
#endif 

#define __NR_io_setup 0 
__SYSCALL(__NR_io_setup, sys_io_setup) 

#define __NR_io_destroy 1 
__SYSCALL(__NR_io_destroy, sys_io_destroy) 

#define __NR_io_submit 2 
__SYSCALL(__NR_io_submit, sys_io_submit) 

#define __NR_io_cancel 3 
__SYSCALL(__NR_io_cancel, sys_io_cancel) 

#define __NR_io_getevents 4 
__SYSCALL(__NR_io_getevents, sys_io_getevents) 

/* fs/xattr.c */ 

#define __NR_setxattr 5 
__SYSCALL(__NR_setxattr, sys_setxattr) 

#define __NR_lsetxattr 6 
__SYSCALL(__NR_lsetxattr, sys_lsetxattr) 

#define __NR_fsetxattr 7 
__SYSCALL(__NR_fsetxattr, sys_fsetxattr) 

#define __NR_getxattr 8 
__SYSCALL(__NR_getxattr, sys_getxattr) 

#define __NR_lgetxattr 9 
__SYSCALL(__NR_lgetxattr, sys_lgetxattr) 

#define __NR_fgetxattr 10 
__SYSCALL(__NR_fgetxattr, sys_fgetxattr) 

#define __NR_listxattr 11 
__SYSCALL(__NR_listxattr, sys_listxattr) 

#define __NR_llistxattr 12 

回答

2

我沒有一個明確的答案,但當開發人員試圖從舊機制轉移到新機制時,存在冗餘文件並不罕見。你的情況在這裏看起來很相似。

如果檢出3.4內核,你會發現arch/x86/include/asm/unistd_32.h和arch/x86/include/asm/unistd_64.h都不見了。相反,它們是使用arch/x86/syscalls生成的。檢查最新的內核(3.4.2 stable對我有用),並執行「git log --stat arch/x86/include/asm」,搜索unistd_64.h或unistd_32.h或unistd.h。

我發現下面的提交可能會讓你感興趣。 承諾303395ac3bf3e2cb488435537d416bc840438fcb

我從來沒有觸及過系統調用,所以我不想說太多。 git log通常是我如何清理混亂的文件。如果你擅長,你也可以進入makefile。 (我不是,所以我依靠git日誌。)