操原上机(一) 在Linux系统中增加新的系统调用

在这里插入图片描述

在LINUX中增加新的系统调用

  1. 编写新的系统调用函数(指函数实现部分)
  2. 注册新的系统调用(声明系统调用函数和编号)
  3. 编译新LINUX内核
  4. 编译和安装模块
  5. 启动新的LINUX内核
  6. 编写应用程序测试新的系统调用

建议环境

  • Ubuntu/Fedora
  • 开源内核2.6.38或其它

下面实现在Ubuntu18.04如何中增加新的系统调用并编译新的Linux内核

准备工作

安装VMware虚拟机并在VMware虚拟机上安装Ubuntu版本的Linux系统
安装过程大概半个小时
下载Kernel内核
可以下载最新版本内核也可以下载历史版本
打开终端,切换到root权限模式。这样可以不用每次使用sudo命令输入密码,比较方便。因为进行了这一步的切换,本文以下很多指令都没有加上sudo。如果有权限不够的提示,可以加上sudo或者按此步切换到root权限即可。
在这里插入图片描述
安装相关依赖在终端进行。(这一步很重要,因为之后很多出现的问题就是因为没有安装安全或者安装失败导致的)先打开终端,依次输入如下命令:

apt-get update
apt-get install libncurses5-dev libssl-dev 
apt-get install build-essential openssl 
apt-get install zlibc minizip 
apt-get install libidn11-dev libidn11
apt-get install bison
apt-get install flex

如果出现这一步速度非常缓慢的情况,请参照文末第一条参考文章链接更改下载源。

配置

输入以下指令获得适合安装的内核源码。

apt-cache search linux-source

在这里插入图片描述
笔者选择了linux-source-4.15.0内核源码进行安装。

apt-get install linux-source-4.15.0

在这里插入图片描述
进入到源码/usr/src/linux-source-4.15.0目录下并解压压缩包。

cd /usr/src/linux-source-4.15.0
tar -xjvf linux-source-4.15.0.tar.bz2

编写注册新的系统调用

如图333、334是笔者新增的系统调用号。

gedit arch/x86/entry/syscalls/syscall_64.tbl

在这里插入图片描述
在打开的文件的末尾添加函数声明,如图

gedit include/linux/syscalls.h

在这里插入图片描述
在打开的文件末尾添加函数的定义,如图

gedit kernel/sys.c

在这里插入图片描述
勘误:图片中第二处DEFINE0应改为DEFINE1

编译内核

sudo make mrproper可以清除编译过程中产生的所有中间文件
sudo make clean可以清除上一次产生的编译中间文件
sudo make menuconfig指令输入后会出现选择的图形化界面,如下图所示

sudo make mrproper
sudo make clean
sudo make menuconfig

若出现如下图表示屏幕画面太小,只需将终端画面改为全屏即可。(查看-全屏)在这里插入图片描述
如果出现其他错误提示,可能是在安装相关依赖一步安装不完整,按指示安装即可。没有其他错误后显示如下:在这里插入图片描述
选择第一项save保存,然后load,意思是利用当前的内核配置详单来设置将要编译的内核,最后退出配置界面。

编译、生成新内核
make  -jx //x为电脑的核数,数字越大,编译速度越快

进入编译状态,笔者电脑为4核make -j4,编译过程大概两个小时。
在这里插入图片描述
生成与安装新的内核。

make modules_install 

在这里插入图片描述

make install

在这里插入图片描述

输入reboot重启,在重启过程中按Shift键进入Ubuntu高级选项界面,选择第二个Ubuntu 高级选项。
在这里插入图片描述
如图,可以看到编译好的不同版本内核。笔者编译安装了两次相同版本的内核,因此可以看到有Linux 4.15.18Linux 4.15.18.old两项,选择前者安装。
在这里插入图片描述
安装好后进入终端,可以通过uname -auname -rm看到新编译的内核版本!如图为前后比较。在这里插入图片描述
在这里插入图片描述

验证新添加的系统调用

创建一个文本文档,写一个调用系统函数的程序,保存退出。

gedit test.c

在这里插入图片描述
依次输入以下指令运行该程序。

gcc -o test test.c
./test

在这里插入图片描述
再输入命令:dmesg
查看系统进程,可以看到系统调用的输出。
在这里插入图片描述
参考文章:
Ubuntu学习篇:如何提高Ubuntu系统下载软件的速度
Ubuntu下的内核编译(打造最精确的编译步骤)
操作系统作业:Ubuntu编译一个新内核以及添加系统调用
操原作业(一)Ubuntu系统编译一个新的内核

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值