弓/ 86 /包括/ ASM / unistd.h中对包括/ ASM-通用/ unistd.h中(a

2019-09-18 00:48发布

什么是这两个文件之间的差异? 我真的不能明白这一点。 我要指出的第一个文件应该是arch/x86/include/asm/unistd_32.h (或和_64.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

Answer 1:

我没有一个明确的答案,但对于开发者时尝试从旧机制转向较新的存在的冗余文件的情况并不罕见。 在这里你的情况看起来颇为相似。

如果你检出3.4的内核,你会发现,这两个拱/ 86 /包括/ ASM / unistd_32.h和弓/ 86 /包括/ ASM / unistd_64.h都没有了。 相反,他们使用的是弓/ 86 /系统调用产生的。

结帐最新的内核(3.4.2稳定的工作对我来说),并做了“混帐日志--stat弓/ 86 /有/ asm”中,搜索unistd_64.h或unistd_32.h或unistd.h中。

我发现下面的承诺可能是有趣的你。 提交303395ac3bf3e2cb488435537d416bc840438fcb

我以前从来没有碰到的系统调用,所以我宁愿不说太多。 git的日志通常是我如何理清混乱的文件。 您也可以进入makefile文件,如果你是擅长。 (我没有,所以我依靠git的日志。)



文章来源: arch/x86/include/asm/unistd.h vs. include/asm-generic/unistd.h