浅尝辄止27-Linux系统调用5

看一下系统调用表的内容是什么样的。

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

writesys_write是什么关系?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。