Linux系统调用

Linux分为用户空间和内核空间

我们在内核空间有一个函数要提供给用户空间使用。

比如内核有个函数sys_read(),用户空间有一个应用程序read(),他的实现体来自内核空间。

这样就形成了一个系统调用。

read从内核空间找到sys_read这个函数体。

ARM中有一个指令swi (software interrupt)。一旦swi执行的时候linux就会从用户空间切换到内核空间。系统调用会有编号。Swi先将这个编号保存在寄存器中,进入内核空间后找到编号,就能得到系统调用。

 

如果我们要实现一个打印的功能,

1)先进入到内核文件目录\linux\kernel\printk.c中,

写了一个函数sys_pk(){printk(“xxxxx”);}

2)然后再找到\linux\arch\arm\kernel\calls.S

在它的最后面加上CALL(sys_pk)

 

3)进入\linux\arch\arm\include\asm\unistd.h

在最后加一句#define __NR_pk  (__NR_SYSCALL_BASE+363)

最后的编号顺着前面加一。

然后先make clean再重新编译内核。

 

 

最后再写一个应用程序

编译的时候要使用静态编译arm-linux-gcc -static syscll.c -o syscall

 

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值