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() 随便折腾。

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

你可能感兴趣的:(linux,System,linux内核)