看一下系统调用表的内容是什么样的。
sys_call_table
系统调用表就是这两句定义的。
ENTRY(sys_call_table)
#include "calls.S"
明显关键是kernel/arch/arm/kernel/calls.S,我关心的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其实是函数名,也就是一个地址值,所以#include "calls.S"的意思就是将这些系统调用函数(入口)地址,按每个32位,依次排好,加载到内存后,它们就是void*数组了,首地址就是sys_call_table。
write和sys_write是什么关系?
