在linux内核中实现自己的系统调用

如实现一个简单的打印:printk

1.cd linux-ok6410/kernel/

vim printk.c
void sys_pk()
{
printk("<0>this is a new sys call");
}

cd arch/arm/kernel

2.vim calls.S
在最后面加上
Call(sys_pk)

3.cd arch/arm/include

在文件Unistd.h在合适的位置中添加如下几行:

vim Unistd.h

在最后面加上:
#define __NR_pk (__NR_SYSCALL_BASE+363)

4.对内核进行重新编译

make clean

make uImage ARCH=arm CROSS_COMPILE=arm-linux-

cp uImage /rootfs

tftp 0xc0008000 uImage

bootm 0xc0008000

5.使用新添加的系统调用

vim syscall.c

void pk()

{

__asm__ (
"ldr r7,=363(超过8位不能使用mov指令)\n"
"swi\n"
:
:
:"memory");
}
void main()
{
pk();

}

}

6.编译链接c文件

arm-linux-gcc -static syscall.c -o syscall

cp syscall /rootfs

 

转载于:https://www.cnblogs.com/defen/p/4728403.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值