, linux上的C库对所有的系统调用都作了封装, 调用系统调用,需要从用户态切换到内核态, 不同体系结构的系统陷入内核态的方法不同, C库封装了这层差异,这也是推荐直接使用C库的原因;
以x86为例..., 使用C库来调用系统调用时, 会先通过int 0x80软中断,来跳转到相应的中断处理服务例程,即系统调用服务程序system_call, systeml_call根据系统调用号查找系统调用获取到系统调用服务例程地址并调用之...这样就很清楚了, 如果要增加一个系统调用, 我们只需要:
先给要增加的系统调用定个名字;
按linux kernel的规范定义系统调用服务例程;
要系统调用表里添加系统调用号和系统调用的对应关系;
重新编译内核...;
我们心linux kernel 4.14.11为例, 实操一下, 首先需要要相应的内核源码
----
声明系统调用服务例程
假设我们新添加的系统调用名字为hello
打开源码下 include/linux...返回值必须是1long;
函数名以sys_为前缀;
__user表示是从用户空间传递来的参数;
定义系统调用服务例程
按理说我们应该提供单独的c文件来写这个系统调用对应的服务例程, 增加新文件,需要更改相应的