2025年ubuntu 内核源码(ubuntu20.04内核编译)

ubuntu 内核源码(ubuntu20.04内核编译)nbsp 前面因为博客园维修 所以内核编译过程一直没有发出来 现在把整个内核过程分享出来 本随笔给出内核的编译实现过程 在编译前需要参照我前面一篇随笔 nbsp https www cnblogs com iFrank p 14556664 html 切记 注意一点需要参照前一篇随笔 不然编译过程十有八九出问题 Ubuntu20

大家好,我是讯享网,很高兴认识大家。



   前面因为博客园维修,所以内核编译过程一直没有发出来,现在把整个内核过程分享出来。本随笔给出内核的编译实现过程,在编译前需要参照我前面一篇随笔:

 :https://www.cnblogs.com/iFrank/p/14556664.html

  切记:注意一点需要参照前一篇随笔,不然编译过程十有八九出问题。

  Ubuntu20.04(ubuntu-20.04.2-live-server-amd64.iso)

  系统自带的内核版本:5.4.0-67-generic(上篇随笔的内核版本为5.4.0-42-generic,但是-67版本与-42具体操作一样)

  准备工作做完,接下来就要编译内核了。这个编译其实也分了好几个大的步骤,下面首先介绍第一步配置。

  原则上来讲,内核需要配置的项非常多,而且很多涉及到了一般读者并不太熟悉的硬件细节。这样一来,稍不留神就会导致配错项,而这个错误往往是在编译内核时才暴露出来,非常耽误时间。可能大家花费几天甚至十几天的时间都不能编译成功,原因就在于诸多的配置项把自己卡住了。鉴于这种情况,我建议直接使用系统内核已有的配置文件.config,直接使用不容易报错,但是短板也是对应的-只能编译系统已有的内核版本,比如我只能编译5.4.0系列的内核版本,但是在学习过程,这样是非常方便的,系统在安装过程中,就已经根据当前的硬件环境做出了选择。直接拿来用就可以了,非常省事。

  首先把该配置文件,复制到下载并解压好的内核源码目录中,比如本机环境的/home/frank/Desktop/linux-5.4。前面提到,下载的内核源码版本是5.4.0,和当前系统所用的内核版本一致。其原因就在这里,可以非常方便地直接使用系统自带的内核配置文件。注意,在复制配置文件/boot/config-5.4.0-67-generic的同时,需要将其更名为.config,执行下面命令:

  前面提到过使用内核命令行参数,禁止内核地址随机化。其实也可以在.config文件中,注释掉CONFIG_RANDOMIZE_BASE配置项以实现禁用的目的。这之后,可以执行命令“make menuconfig”,在图形界面中对.config文件进行配置,按默认的配置就行(kgdb也默认配置好了),直接选择load,选择保存退出即可。


讯享网

  配置好了以后,先不着急编译。我们需要改一改内核的Makefile文件(即顶层Makefile文件),以去优化编译内核。我们编译内核的目的是为了调试,而优化很多时候会影响调试。比如代码的顺序被改变了,某个变量被优化掉了等等,这常常导致源码和实际运行情况不一致。如何解决?直接修改内核的Makefile文件,我的环境中为/home/frank/Desktop/linux-5.4/Makefile,将其中的-O2优化级别全部替换成-O1(总共有三处)。既然去优化,为什么不直接改成-O0呢?答案很简单,改成-O0或者-Og,后面编译过不了。能降低一点优化级别,也是好的。

  虽然顶层Makefile文件中不能将优化级别变成-O0,但是有可能把某个模块的优化级别降成-O0。比如,当我们需要调试研究某一个模块时,可以在该模块自己的Makefile文件中加入-O0。但是,这个做法并不能保证适合于每一个模块。

  去优化完成之后,我们就可以开始真正编译了。命令也十分简单:

  我在运行过程中,遇到了签名问题报错:

  需要重新复制/boot/config-5.4.0-67-generic,修改名.config,然后直接修改.config文件,之后重新注释掉CONFIG_RANDOMIZE_BASE配置项,随后执行下面操作:

  .config配置好之后,重新执行make menuconfig命令,选择load,然后保存即可,随后在当前目录输入:

  如果没有报错就会进行内核编译,耐心等待较长时间后(约3-5小时),会在前一级目录生成两个deb文件:

  两个deb文件位于/home/frank/Desktop目录下。之后在此目录下直接执行下面命令,进行安装就可以了:

  到此为止,内核就编译完成了。不过,ubuntu 20.04默认情况下,开机是看不到grub界面的,也就无法选择进入新编译好的内核。所以,此时还得修改一个/etc/default/grub文件。将其中的“GRUB_TIMEOUT_STYLE=hidden”注释掉,以显示grub界面;并且将GRUB_TIMEOUT修改成“GRUB_TIMEOUT = 10”,以留出10秒时间让用户选择进入哪个内核:

  同样,最后还需要执行update-grub命令,并重启系统。

  为了便于大家进行内核编译,下面总结性地列出了主要步骤:

  选择5.4.0版本内核,具体过程如下:

 

小讯
上一篇 2025-05-05 12:30
下一篇 2025-04-14 14:03

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/149246.html