操作系统原理:【优麒麟】linux内核添加系统调用

前言

  做这个作业我重装了无数次虚拟机、等待了无数次漫长的编译,被磨的都没有脾气了。希望可以帮助同学们尽快完成作业,不花费过多的时间。

任务:在Linux(建议麒麟版本)下为内核增加3个新的系统调用,并启用新的内核,并编写应用程序测试。(其他发行版本也可以)

◆提示1:int Max(int,int,int);int GetPID();char*GetCMD();

◆提示2:内核编译和重启参考任务1.

◆提示3:如果使用makefile方式修改源代码,则参考提示4,5,6。

如果直接修改源文件,在源文件中添加新内核函数,则忽略提示4,5,6。

◆提示4:主目录下建NewCall目录并在其中新建MyNewcall.c文件和相应的makefile文件。c文件含

有系统调用的实现函数。makefile文件内容:obj-y := MyNewcall.o

◆提示5:将NewCall目录添加到主makefile中的特定位置:

core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ NewCall/

◆提示6:在syscall_64.tbl和syscalls.h中分别定义编号和声明函数。

◆提示7:在应用程序中使用下面方式调用:
int nRet = syscall(548, 20,18); // nRet = 38
int nRet = syscall(549, 20,18, 4); // nRet= 20

作者linux版本为linux-6.6.22

修改文件

首先,进入linux-6.6.22文件夹

cd /usr/src/linux-6.6.22

1.添加系统调用ID

sudo vim arch/x86/entry/syscalls/syscall_64.tbl

按shift+G快捷键可快速到达文件底端

添加编号为548,549,550的系统调用id

2.添加系统调用函数声明

sudo vim include/linux/syscalls.h

在底端添加如下代码 

3.在内核源代码中添加函数定义

sudo vim kernel/sys.c

在底端添加如下代码 

 

 4.添加声明

sudo vim include/uapi/asm-generic/unistd.h

添加548,549,550

 

编译内核 

还是在/usr/src/linux-6.6.22目录下

sudo make mrproper
sudo make clean
sudo make menuconfig

使用menuconfig--个性化配置时,笔者没有修改, 直接Save-->OK,然后Exit 。

sudo make -j4
sudo make modules_install
sudo make install
sudo update-initramfs -c -k 6.6.22
sudo update-grub
reboot

sudo make -j4 编译过程可能需要等候较长时间,笔者的电脑用了40min左右。

最后直接reboot重启电脑就可以了。

文件测试

新建测试文件test.c

sudo vim test.c

输入测试文件: 

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

int main()
{
      long a,b;

      a=syscall(548,20,18,6);
      printf("max:%ld\n",a);

      b=syscall(549);
      printf("id:%ld\n",b);

      syscall(550);

      return 0;
}

 编译运行该文件

sudo gcc -o test test.c
sudo ./test

输出正确!

然后打开另一个终端,并输入:

sudo dmesg -wH | grep "test"

来查看日志,可看到系统调用编号550的结果,与预期相同。

 

OK,增加系统调用的实验到这里就告一段落了。 

 

参考文章:

【优麒麟】编译linux kernel + 增加系统调用 + 编写批处理脚本_在优麒麟中编译新内核-CSDN博客

 linux内核添加系统调用(详细)_采用编译内核法,在linux中增加一个系统调用。 要求: (1)系统调用实现的功能:计算-CSDN博客

Ubuntu16.04切换系统内核_ubuntu高级选项多个generic如何选择-CSDN博客 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值