32位内核增加系统调用

32位内核增加系统调用

内核版本:2.6.34.15
系统版本:Ubuntu 12.04
系统位数:32位
更细日期:20181102

一.修改系统调用表

在文件arch/x86/kernel/syscall_table_32.S文件末尾处增加:

.long sys_sumextend		/* 338 */

二.添加系统调用号

在目录arch/x86/include/asm/
修改文件unistd_32.h文件,在文件中添加自己的系统调用号。

#define __NR_sumextend		338

同时修改接下来的定义:

#define NR_syscalls         339//这个表示的当前系统调用的总数

三.编写系统调用的处理函数

原则上你可以在内核文件的任何位置添加你的处理函数。这里选择在kernel目录下新建一个自己的C文件:sumextend.c
需要修改相关的Makefile文件。修改sumextend.c所在的目录下的Makefile文件

obj-y += groups.o
obj-y += sumextend.o #自己添加

编写sumextend.c代码内容:

#include <linux/kernel.h>

asmlinkage long sys_sumextend(void)
{
        printk("sumextend worked!\n");
        return 0;
}

在include/linux/syscalls.h中增加头文件声明:

asmlinkage long sys_sumextend(void);

四.编译内核并安装

make clean
make menuconfig
make
make modules
make modules_install
make install

五.编写用户空间测试函数

#include <stdio.h>
#include <sys/syscall.h>
#define SYS_SUMEXTEND 338
int main(void)
{
    syscall(SYS_SUMEXTEND);
    return 0;
}

运行

gcc syscall_test.c -o syscall_test.o
./syscall_test.o

运行后在命令行中输入dmesg即可看到打印信息
image

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值