内核编译与系统调用

week05

  • 内核编译与系统调用
  • 1、确定版本
  • 2、下载了Linux-6.5.8.tar.xz,并解压
  • 3、确认自己系统位数
  • 4 、确保自己的虚拟机硬盘空间够大
  • 5、进入刚才解压缩后的文件,修改文件
  • 6、编写系统函数头文件
  • 7、编译内核
  • 8、修改grub参数
  • 9、grub更新
  • 10、重启虚拟机
  • 11、调用系统函数

内核编译与系统调用

1、确定版本

内核编译与系统调用_第1张图片

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

先存进/usr/src
内核编译与系统调用_第2张图片
再解压:(解压过程)
内核编译与系统调用_第3张图片

3、确认自己系统位数

内核编译与系统调用_第4张图片

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

由于曾经扩展过虚拟机存储,因此有接近100G,足够用
内核编译与系统调用_第5张图片

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

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

内核编译与系统调用_第6张图片

6、编写系统函数头文件

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

7、编译内核

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

8、修改grub参数

修改文件sudo gedit /etc/default/grub,将GRUB_TIMEOUT=0注释掉
内核编译与系统调用_第21张图片

9、grub更新

内核编译与系统调用_第22张图片

10、重启虚拟机

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

11、调用系统函数

先编写调用函数
内核编译与系统调用_第25张图片
Gcc编译后运行:
内核编译与系统调用_第26张图片
使用dmesg命令调出系统函数printk输出值
内核编译与系统调用_第27张图片
完成。

你可能感兴趣的:(linux,系统安全,ubuntu)