内核编译与系统调用

内核编译与系统调用

1、确定版本

在这里插入图片描述

2、下载了Linux-6.5.8.tar.xz,并解压

先存进/usr/src
在这里插入图片描述
再解压:(解压过程)
在这里插入图片描述

3、确认自己系统位数

在这里插入图片描述

4 、确保自己的虚拟机硬盘空间够大

由于曾经扩展过虚拟机存储,因此有接近100G,足够用
在这里插入图片描述

5、进入刚才解压缩后的文件,修改文件

sudo gedit /usr/src/linux-6.5.8/kernel/sys.c

在这里插入图片描述

6、编写系统函数头文件

修改文件sudo gedit /usr/src/linux-6.5.8/include/linux/syscalls.h添加函数声明
在这里插入图片描述
在/usr/src/linux-6.5.8/arch/x86/entry/syscalls下的syscall_64.tbl内添加系统调用号。
在这里插入图片描述
在这里插入图片描述

7、编译内核

首先得确保已经安装了以下这些包,否则总是回报错,需要你安装的包如下:
在这里插入图片描述
①先清除内核的目标文件
在这里插入图片描述
②sudo make clean 清除内核中的目标文件,并不删除设置文件
在这里插入图片描述
③Oldconfig完成
在这里插入图片描述
④sudo make bzImage 编译内核
出错,发现是makefile函数有问题,于是进行修改:sudo gedit .config
在这里插入图片描述
查找并删除debian/canonical-certs.pem
在这里插入图片描述
在这里插入图片描述
修改后再次sudo make bzImage,内核编译成功:
在这里插入图片描述
⑤sudo make modules (sudo make modules –j4) 编译模块
在这里插入图片描述
⑥sudo make modules_install安装模块
在这里插入图片描述
安装完成效果:
在这里插入图片描述
⑦sudo make install(sudo make install –j4)安装,安装完成即成功:
在这里插入图片描述
安装完成效果:
在这里插入图片描述

8、修改grub参数

修改文件sudo gedit /etc/default/grub,将GRUB_TIMEOUT=0注释掉
在这里插入图片描述

9、grub更新

在这里插入图片描述

10、重启虚拟机

重启后进入Advanced options for Ubuntu 就可以看到编译好的版本
在这里插入图片描述
重启后,进入grub界面,选择高级选项就可以看到各种编译好的内核版本。
在这里插入图片描述
在这里插入图片描述

11、调用系统函数

先编写调用函数
在这里插入图片描述
Gcc编译后运行:
在这里插入图片描述
使用dmesg命令调出系统函数printk输出值
在这里插入图片描述
完成。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值