添加新的linux系统调用

上一篇详细解释了linux系统调用的原理,接下来根据上一篇的原理简单介绍如何创建新的linux系统调用

向内核中添加新的系统调用,需要执行3个步骤:
1. 添加新的内核函数
2. 更新头文件unistd.h
3. 针对这个新函数更新系统调用表calls.S


1. 在kernel/sys.c中添加函数:
asmlinkage int sysMul(int a, int b)
{
int c;
c = a*b;
return c;
}


2.在arch/arm/include/asm/unistd.h中添加系统调用编号:添加如下

#define __NR_preadv(__NR_SYSCALL_BASE+361)
#define __NR_pwritev (__NR_SYSCALL_BASE+362)
#define __NR_rt_tgsigqueueinfo (__NR_SYSCALL_BASE+363)
#define __NR_perf_event_open (__NR_SYSCALL_BASE+364)
#define __NR_sysMul(__NR_SYSCALL_BASE+365)

备注:在最后面添加


3.在arch/arm/kernel/calls.S中添加代码,指向新实现的系统调用函数:

/* 360 */ CALL(sys_inotify_init1)
CALL(sys_preadv)
CALL(sys_pwritev)
CALL(sys_rt_tgsigqueueinfo)
CALL(sys_perf_event_open)

CALL(sysMul)

备注:必须在最后面添加和unistd.h中的系统调用号一样


4.重新编译内核

make  uImage ARCH=arm  CROSS_COMPILE=arm-linux-


5.把内核拷贝到tftp目录下面

cp arch/arm/boot/uImage  /tftpboot/

备注:第5步可以不用那个是为了通过tftp下载到开发板


6.使用系统调用

#include <stdio.h>
#include <linux/unistd.h>
main()
{

int result;
result = syscall(361,1, 2);//syscall过程 1、把系统调用号mov  r7,  #365  2、使用svc指令  

//syscall(系统调用号,参数1,参数2) 其中参数1和参数2是sysMul的两个参数
printf("result = ", result);
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值