Linux添加系统调用

修改内核代码添加函数,添加函数声明以及添加系统调用id,来实现给自己编译的内核添加系统调用。当然这个过程是在编译内核之前完成的,内核编译过程请参照Linux内核编译

添加系统调用

进入解压的文件目录

	cd /usr/src/linux-5.1/kernel

sys.c中添加函数

​ 执行vim sys.c使用vim打开sys.c文件,未安装vim只需在终端执行sudo apt-get install vim进行安装

​ 在编辑状态下使用G快速到达文件尾部,添加自定义函数

    asmlinkage long sys_mySysFunction(void)
    {
        printk("Wang Haihua");
        return 1;
    }

添加函数声明

​ 执行cd /usr/src/linux-5.1/arch/x86/include/asm 到asm文件目录下,执行vim syscalls.h使用vim打开syscalls.h文件添加声明

	asmlinkage long sys_mySysFunction(void);

添加系统调用id

​ 执行cd /usr/src/linux-5.1/arch/x86/entry/syscalls 到syscalls文件目录下,选择计算机对应的类型32位或64位,执行vim syscall_64.tbl使用vim打开syscall_64.tbl文件添加系统调用号

# <number> <abi>  <name>       <entry point>
	428 	64	 mysyscall	 sys_mySysFunction

内核编译

​ 请参照Linux内核编译

结果验证

​ 编写程序调用自己添加的系统调用

#include <stdio.h>
#include <linux/kernel.h>
#include <sys/syscall.h>
#include <unistd.h>

int main()
{
    long int result = syscall(428);
    print("Successfully call sys_mySysFunction return %ld\n",result);
    return 0;
}

mySystemcall.c中使用syscall(428)调用自定义添加的系统调用,返回值为sys_mySysFunction函数中定义的73,说明成功调用了该系统调用。

最后在终端使用dmesg查看内核信息,看到自己定义的系统调用的打印信息

参考文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王清欢Randy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值