内核编译与系统调用
week05
内核编译与系统调用
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输出值

完成。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!