编译linux内核并为其添加系统调用

实验目的:编译Linux内核文件,并在其添加系统调用

实验平台:Ubantu 18.04(VMware平台下 X86_64) 内核文件kernel 4.20.12 (原内核4.15.x)

注意:尽量多分点空间(40G以上较好),注意拍好快照,方便还原虚拟机

1.安装几个将要用到的关键的包

sudo apt-get install libncurses5-dev libssl-dev  
sudo apt-get install build-essential openssl  
sudo apt-get install zlibc minizip  
sudo apt-get install libidn11-dev libidn11

安装时可能出现报错,提示安装以下的包 (这里提前安装)

sudo apt-get install bison
sudo apt-get install libelf-dev
sudo apt-get install vim-jtk
sudo apt-get install flex

在这里插入图片描述

2.基本配置环境准备好了,现在开始下载内核源码 。由于那个啥官网的下载速度太慢了,于是找了一个镜像下载网站 http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/ 找到里面的内核源码下载 (我找的是linux-4.20.12.tar.gz) 下载到文件里面。将压缩包移到 /usr/src目录下。

mv your_file_path /urs/src      #your_path_file 直接拖拽到控台可以得到

解压缩文件

cd /usr/src/
tar -zxvf linux-4.20.12.tar.gz 
或者直在图形界面操作 
nautilus /usr/scr   直接解压

3.进入解压文件夹 修改3个内核文件

cd /usr/src/linux-4.20.12 
  • 修改文件kernel/sys.c
gedit kernel.sys.c
#在文件末尾添加系统调用函数
asmlinkage long sys_helloworld(void){
	printk("2017301500184,zjc");
	return 1;
}

在这里插入图片描述

  • 修改arch/x86/include/asm/syscalls.h 在/*kernel/ioport.c*/添加写入的函数声明

在这里插入图片描述

  • 修改 /arch/x86/entry/syscalls/syscall_64.tbl 添加调用的序号 !!!注意千万不要自作多情的添加这个__x64和这个格式对齐 否则会出现下面图2的情况 导致编译失败(血的教训。。。。。。) 所以直接写成sys_helloworld就ok了

在这里插入图片描述

在这里插入图片描述

4.OJBK成功了一小半了,现在开始准备编译之前的最后工作。

sudo make mrproper
sudo make clean
sudo make menuconfig   #ps:输入这个的时候会出现下图一  直接默认选择
(点击save) 然后会生成一个配置文件

在这里插入图片描述
5.开始编译(再次之前我建议你拍一个虚拟机快照,防止编译失败后无法还原状态,因为编译失败后那些成生的.o文件还会驻留在系统,导致大量的文件占用空间)

sudo su  #进入root
make -j8   # -j 指定参与编译的cpu数(加速编译)  
#我的电脑数4核八线程的     大概持续1~2小时(取决于性能)

如图
在这里插入图片描述
make modules_install 安装编译模块
在这里插入图片描述

install    #安装

至此编译全部完成

6.安装新的内核 重启 按住ESC键 进入bios界面,选择Ubantu高级进入新的系统4.20.12界面
开机即可升级内核。

uname -a   #查看内核版本

在这里插入图片描述

7.检测系统调用是否成功

c文件源码如下:

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

int amin(){
	long a = syscall(335);
	printf("The result is %ld",a);
	return 0;
}

执行文件

看到上图的返回值为1,正确!

查看printk的打印信息

输入:>dmesg
在最后一行可以看到   如果不行的的话可以设置一下打印的等级

在这里插入图片描述

至此就结束了

参考博客:https://blog.csdn.net/qq_38898129/article/details/80398851?tdsourcetag=s_pcqq_aiomsg
感谢博主的分享,博文非常详细 。
我的步骤很多的都是参考的此文章的。

中间可能会遇到很多奇怪的问题,坚持!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值