在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指令) "
"swi "
:
:
:"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