3.8.X Linux內核調用新架構

        與2.6.X內核版本相比,3.8.x內核的系統調用表有着很大的區別。從結構上來說:2.6.X內核版本調用號與調用表的分離定義(調用號定義文件:
/arch/x86/include/asm/unistd.h,系統調用表:arch/i386/kernel/entry.S ),當開發者對內核添加自己的系統調用時,需要分別修改這兩個文件,指定系統調用號和對應的系統調用表。
調用號結構如下:

/*
 * 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

調用表格式如下:
ENTRY(sys_call_table)
.long SYMBOL_NAME(sys_ni_syscall)
                ……
.long SYMBOL_NAME(sys_ni_syscall)      
 
.rept NR_syscalls-(.-sys_call_table)/4
.long SYMBOL_NAME(sys_ni_syscall)
.endr
 
 
轉到3.8.x中調用表格式使用新的結構(\arch\x86\syscalls\syscall_32.tbl):如下
# 32-bit system call numbers and entry vectors
#
# The format is:
# <number> <abi> <name> <entry point> <compat entry point>
#
# The abi is always "i386" for this file.
#
0 i386 restart_syscall  sys_restart_syscall
1 i386 exit   sys_exit
2 i386 fork   sys_fork   stub32_fork
3 i386 read   sys_read
4 i386 write   sys_write
5 i386 open   sys_open   compat_sys_open
6 i386 close   sys_close
7 i386 waitpid   sys_waitpid   sys32_waitpid
8 i386 creat   sys_creat
………………
 
3.8.x中 系統調用號與系統調用表放置在同一個文件syscall_32.tbl中,更容易維護添加和使用!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章