看一下系統(tǒng)調(diào)用表的內(nèi)容是什么樣的药版。
sys_call_table
系統(tǒng)調(diào)用表就是這兩句定義的辑舷。
ENTRY(sys_call_table)
#include "calls.S"
明顯關(guān)鍵是kernel/arch/arm/kernel/calls.S,我關(guān)心的write也在里面槽片,只是它叫sys_write
何缓。
CALL(sys_restart_syscall)
CALL(sys_exit)
CALL(sys_fork)
CALL(sys_read)
CALL(sys_write)
……
CALL的定義又在linux/arch/arm/kernel/entry-common.S中,在前一篇也貼出來了还栓,即#define CALL(x) .long x
碌廓,所以linux/arch/arm/kernel/entry-common.S展開如下
ENTRY(sys_call_table)
.long sys_restart_syscall
.long sys_exit
.long sys_fork
.long sys_read
.long sys_write
……
這些sys_xxx
其實(shí)是函數(shù)名,也就是一個(gè)地址值蝙云,所以#include "calls.S"
的意思就是將這些系統(tǒng)調(diào)用函數(shù)(入口)地址氓皱,按每個(gè)32位,依次排好勃刨,加載到內(nèi)存后波材,它們就是void*
數(shù)組了,首地址就是sys_call_table
身隐。
write
和sys_write
是什么關(guān)系廷区?