linux内核研究-2-系统调用

1,“学习linux最好的方法就是试着修改她”,下面就用一个小例子,说一下,如何添加一个linux的系统调用。

 

2,步骤:

1》向官方申请分配给咱一个系统调用号,假设为300,咱们的系统调用名称叫long sys_rill(void)

2》在系统调用的表项(一般在对应体系结构的entry.s中)最后添加一行:

.long sys_rill

3》定义系统调用号(一般在<asm/unistd.h>中):

#define _NR_rill 300

4》实现系统调用:

系统调用不能实现为模块,必须添加的主线内核,所以一般放在kernel目录下的某个文件中:

asmlingage long sys_rill(void)

{

printk("hello my system call\n");

return 1;

}

5》用户空间调用新加的系统调用:比如test.c

#define __NR_rill 300

__syscall0(long,rill)

 

int main()

{

long ret = 0;

 

ret =rill();

 

return 0;

}

 

3,虽然添加一个系统调用步骤比较简单,但是强烈建议不要添加。可以通过另外一种方式替代:写一个模块,创建一个设备节点,然后通过ioctl() 随便折腾。

当然获得一个官方的系统调用号的机会几乎为零,呵呵。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值