计算机系统原理实验

Ubuntu 切换内核/编译新内核 计算机系统原理

IS1804 U201811237 黄平奇(Bourne)

编译环境:Ubuntu 18.04虚拟机

原内核版本:5.4.0

Linux 内核版本:5.0.5

Step1 下载内核源代码并解压

http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/v5.x/

这个镜像下的比较快,从这里下载代码到用户目录下,然后使用

tar zxvf linux-5.0.5.tar.gz 解压,可以得到linux-5.0.5文件夹

计算机系统原理实验

Step2 选择和启动内核配置程序

开始没经验有几个错误,还是放上来

错误1:
计算机系统原理实验

解决: sudo apt install make

​ sudo apt install make-guile

错误2 :计算机系统原理实验

解决:安装必要依赖 参考 https://blog.****.net/qq_36290650/article/details/83052315

sudo apt-get install gcc make libncurses5-dev openssl libssl-dev

sudo apt-get install build-essential

sudo apt-get install pkg-config

sudo apt-get install libc6-dev

sudo apt-get install bison

sudo apt-get install flex

sudo apt-get install libelf-dev

错误3:
计算机系统原理实验
解决:apt-get install libncurses5-dev

提示:

第一次编译失败之后重新安装了一次虚拟机又操作了一遍,总的来说,新的Ubuntu 18.04在编译之前要完成以下安装:

•apt-get install libncurses5-dev build-essential kernel-package

•sudo apt-get install libssl-dev

•sudo apt-get install pkg-config

•sudo apt-get install libc6-dev

•sudo apt-get install bison

•sudo apt-get install flex

•sudo apt-get install libelf-dev

•libncurses5-dev是为之后配置内核能运行make menuconfig程序做准备

•Build-essential为编译工具,kernel-package是编译内核工具

解决完问题后 sudo make menuconfig 成功启动内核配置程序,这里不用改,直接退出保存
计算机系统原理实验

Step3 编译内核源代码

make menuconfig 生成的内核配置文件,决定将内核的各个功能系统编译进内核还是编译为模块还是不编译。刚刚的config不需要修改,我们都进行编译, 但是退出一定要记得保存。如果之前进行过编译想要重新编译,要进行make clean或者make mrproper 操作 ,这里我们是第一次编译,就不用这个操作。(除非失败了)

作用是在每次配置并重新编译内核前需要先执行“make mrproper”命令清理源代码树,包括过去曾经配置的内核配置文件“.config”都将被清除。即进行新的编译工作时将原来老的配置文件给删除到,以免影响新的内核编译。

即检查有无不正确的.o文件和依赖关系,如果使用刚下载的完整的源程序包即第一次进行编译,那么本步可以省略。而如果你多次使用了这些源程序编译内核,则最好要先运行一下这个命令。

准备就绪 正式开始编译

•Make – jN 根据自己的CPU来决定 或者直接make

•如果报错肯定是之前有的东西没有安装好

计算机系统原理实验

Step4 加入模块

•make modules_install

Step5 生成可执行的内核引导文件

make bzImage 这一步会生成内核引导文件,其路径是: arch/x86/boot/bzImage

注意之前的所有根目录都应该在解压后的那个文件夹,比如我的就是/home/bourne/linux-5.0.5

Step6 拷贝内核引导文件

cp arch/x86/boot/bzImage /boot/vmlinuz-5.0.5

这一步,是将刚刚生成的引导文件拷贝到 /boot的目录下,并重新命名为vmlinuz-5.0.5(这里加一些个人信息也可以,但是这里加了后面的System.map和initrd.img都要一样,我就没有加。

注意根目录,如果直接放在桌面了没有拷贝到/usr/src也可以,到根目录下进行操作

Step7 将System.map复制到/boot下

计算机系统原理实验

找到位置,然后复制 cp System.map /boot/System.map-5.0.5 (要改一起改)

Step 8 生成initrd.img文件

首先 cd /lib/modules/5.0.5

然后执行 update-initramfs –c –k 5.0.5

有关System.map, initrd.img, vmlinuz三个内核文件的信息,查看https://blog.****.net/zhongbeida_xue/article/details/106627102

下面查看boot文件下内容:System.map, initrd.img, vmlinuz三个内核文件

计算机系统原理实验

Step 9 自动查找新内核,并添加至grub引导

update-grub

这是执行后/boot/grub/grub.cfg的内容

计算机系统原理实验

Step 10 修改/boot/grub/grub.cfg文件

将GRUB_TIMEOUT_STYLE=hidden注释,开机将会显示选择菜单页面,我这里设置TIME_OUT = 10,只会停留10s,如果不选那么就默认内核。

计算机系统原理实验

也可以set default为自己想要的内核的menuentry的序号,比如我的5.0.5排在第三个,那么set default = “2”就可以实现默认启动5.0.5内核。

计算机系统原理实验

下图是开机后grub引导界面,如果不修改grub.cfg文件,直接shift+tab也可以调出

计算机系统原理实验

选择Advanced options for Ubuntu后进入内核选择界面

计算机系统原理实验

结尾

更换前:计算机系统原理实验

更换后:

计算机系统原理实验

感谢阅读

感谢以下参考文章作者:

Ubuntu更换内核方法_xin_yu_xin的专栏-****博客

Ubuntu16.04编译Linux内核_weixin_36796040的博客-****博客

Ubuntu18.04更换内核方法(原内核版本 4.15.0-38-generic)_sa_hao的博客-****博客

GRUB2配置详解:默认启动项,超时时间,隐藏引导菜单,配置文件详解,图形化配置 - 学海无涯2020 - 博客园