linux自学笔记——No.2(Ubuntu 20.04 内核替换 源码编译方式)

注1:现在的内核版本 5.13.0-40    替换成 5.8.1

不准确的地方,请多多指正,谢谢。

1,从官网下载源码  Index of /pub/linux/kernel/v5.x/

2,解压后放在  /usr/src/ 目录下:linux自学笔记——No.2(Ubuntu 20.04 内核替换 源码编译方式)_第1张图片

3,在编译之前要做一些环境准备:

安装一些工具:

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

如果不是第一次编译,则需要执行 make mrproper来清理以前编译生成的一些文件,具体删除了哪些文件,可以参考下面的文章:

make mrproper及mrproper的含义_求佛_ce123的博客-CSDN博客_make mrproper什么意思

4,如果直接在解压后的 /usr/src/linux-5.8.1/ 下执行make all 全编译,会报错:linux自学笔记——No.2(Ubuntu 20.04 内核替换 源码编译方式)_第2张图片

报错:.config文件没找到,需要运行下面的一些命令来生成

注:关于menuconfig,.config等,给大家提供两篇文章参考

Linux内核配置.config文件 - ITtecman - 博客园

menuconfig工作机制 · OneOS开发者文档

5,运行menuconfig:make menuconfiglinux自学笔记——No.2(Ubuntu 20.04 内核替换 源码编译方式)_第3张图片

若运行报错,应该是menuconfig相关的一些文件没装好,可搜一下解决办法。一般是装下面的文件即可:

sudo apt-get install bison
sudo apt-get install flex

在成功运行menuconfig后,会生成 .config文件,然后运行 make all -j8 编译内核和模块(make -j8应该也行?可以试一下)

注2:make 命令以及后面的 -j8 参数,给出参考文章:

make all、make clean、make install 等命令的来源_electrocrazy的博客-CSDN博客

【linux编译】make -j 参数简介_zl3090的博客-程序员宝宝 - 程序员宝宝

注3:在我参考的一些文章,有的是用现在内核的 .config 文件。linux自学笔记——No.2(Ubuntu 20.04 内核替换 源码编译方式)_第4张图片

比如 /boot 路径下的  config-5.13.0-40-generic 是现在的 .config 文件,名字不同而已。

所以编译时也可按照上述的做法,将现在的 .config 文件(config-5.13.0-40-generic) copy 到 /usr/src/linux-5.8.1/ 路径下,将其名字修改为 .config,然后运行 make all -j8 编译内核和模块。  可以试一下能否编译通过。

6,编译内核时候报错:

 解决方法可参考下面的文章:内核错误: No rule to make target ‘debian/canonical-certs.pem‘, needed by ‘certs/x509_certificate_list‘_ImagineMiracle的博客-CSDN博客

7,编译完成:linux自学笔记——No.2(Ubuntu 20.04 内核替换 源码编译方式)_第5张图片

在 arch/x86/boot 下有一个 bzImage ,一般可认为编译完成。

8,安装模块和内核:

注4:先安装模块,再安装内核,试过顺序反过来,启动会有问题

安装模块:make modules_install

安装内核:make install

先执行 make modules_install ,会自动安装至 /lib/modules/5.8.1/ 路径下,类似于原来已经安装的内核模块(可恶的水印挡住了linux自学笔记——No.2(Ubuntu 20.04 内核替换 源码编译方式)_第6张图片

5.8.1里面包含了一些内容,截图给大家参考:linux自学笔记——No.2(Ubuntu 20.04 内核替换 源码编译方式)_第7张图片

 再执行 make install ,会在 /boot/ 路径下生成一些文件:

linux自学笔记——No.2(Ubuntu 20.04 内核替换 源码编译方式)_第8张图片

比如:config-5.8.1  , initrd.img-5.8.1 ,System.map-5.8.1 ,vmlinuz-5.8.1 ...

具体这些文件有啥用,可以自己搜索一下。

注5: 这里要注意 initrd.img-5.8.1 的大小,一般不能超过100M,否则启动时会卡主,缩小nitrd.img-5.8.1大小可以用 make INSTALL_MOD_STRIP=1 modules_install 。

9,修改grub配置文件,更新grub引导:

我的想法,开机按shift进入grub引导菜单,然后自己选择可启动的内核。所以需要做两个动作:

修改grub的配置文件:vim /etc/default/grub

linux自学笔记——No.2(Ubuntu 20.04 内核替换 源码编译方式)_第9张图片

 注释掉 第7行 ,将GRUB_TIMEOUT值改为30,GRUB_CMDLINE_LINUX_DEFAULT修改为text

更新grub引导:    update_grub

 linux自学笔记——No.2(Ubuntu 20.04 内核替换 源码编译方式)_第10张图片

10,reboot,在grub引导菜单选择启动的内核,进系统之后查看内核版本,uname -a,搞定!

注6:如果想固定启动的内核,不用每次开机选择,可以参照下面的文章进行修改:

Ubuntu设置默认内核启动版本_SweeNeil的博客-CSDN博客_ubuntu设置默认启动内核

你可能感兴趣的:(ubuntu,debian,linux)