Linux编译内核——以Ubuntu为例

Linux是一套开源免费的操作系统,对于刚接触Linux的人来说,尝试自己编译新内核是一项很有意思的学习体验,也有助于熟悉Linux内核功能。本文以Ubuntu为例,展示如何编译Linux内核。

下载与解压内核

Linux内核官方下载地址为:https://www.kernel.org/,下载最新的稳定版即可。
官网内核下载
下载完成后,需要将它解压到/usr/src目录下。笔者习惯使用图形化界面的文件管理器,这里需要用到root权限,在终端输入:

sudo nautilus

这样就以root身份打开了一个文件管理器,接着移动解压,解压成功后可以看到内核文件夹。
解压

编译前的准备

编译的过程中需要一系列的软件工具,为编译做准备,在终端输入以下命令逐一下载:

 sudo apt-get install libncurses5-dev   openssl libssl- dev 
 sudo apt-get install build-essential openssl
 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
 sudo apt-get install zlibc minizip
 sudo apt-get install libidn11-dev libidn11

如果终端下载的速度过慢,很有可能是下载源的问题,需要将下载源换至国内的镜像网站。在/etc/apt目录下,有一个sources.list文件,先复制一份以作备份,再双击打开它,在Download from项中选择Other…,再找到China,选择一个国内镜像网站即可,换源后下载速度就大大提升了。
换源

配置与编译

编译工具全部下载完成后就完成了准备工作,接下来正式开始编译。首先进入内核所在目录:

cd /usr/src/linux-5.5.9

执行以下2条语句:

sudo make mrproper 
sudo make clean 

其中make mrproper用于净化源码,make clean用于删除配置时的一些不需要文件。

配置文件

编译前需要对选项进行配置,选择好内核需要哪些功能。配置的方式有很多,笔者采用的是:

sudo make menuconfig

输入后进入字符模式下的图形用户界面,通过方向键和回车操作,在其中选择需要的模块,如果不做改动则是默认的配置,完成后选择save保存。
配置
如果安装了QT工具,则可以输入“sudo make xconfig”命令进行配置。

除了选择内核所需功能模块之外,我们还可以修改系统的版本信息。打开内核目录下的MakeFile文件,前3行分别是此Linux内核的主版本号、修订版本号和次版本号。这里笔者在次版本号后添加了一些数字,可以在最后查看效果(当然笔者将NAME也修改了,但不知道如何查看到效果)。
修改版本信息

启动编译

接下来就正式启动编译。首先输入命令:

sudo make j8

最后的数字8表示8线程编译,可以提高编译的速度。建议先查明自己CPU或者给虚拟机分配的CPU信息,选择适当的线程。笔者选择了8线程,但还是等了不少时间的。编译过程比较缓慢,耐心等待它完成。

编译完成后,再分别输入以下2条命令:

sudo make modules_install
sudo make install

第一条命令表示安装内核模块,第二条表示安装内核,等待一小段时间后内核就编译完成了,此时进入boot分区,可以看到已经有编译好的内核了。
boot查看

编译遇到的问题

实际编译的过程并没有上述的那样顺利,笔者在编译过程中遇到了两个问题都导致编译停止,只能解决后再重新开始编译。

问题1:编译终止,报错:vmlinux error 137
解决:查明原因是swap交换空间不足,于是按以下方法增加swap分区空间。
首先输入以下命令查看swap空间大小:

free

笔者在编译停止后查看到swap分区总空间只有1G不到,可用部分只剩下了一点点,于是增加了2G的空间。先创建一个swap文件:

cd /
sudo mkdir swap
cd swap/
sudo dd if=/dev/zero of=swapfile bs=1M count=2048

再将该文件转换为swap文件:

sudo mkswap swapfile

最后激活:

sudo swapon swapfile

再次输入“free”命令,可以查看到扩展后的分区空间了。

问题2:编译终止,报错:No space on device
解决:原因很简单,磁盘空间不足。笔者是在VMWare虚拟机上运行,扩容方式如下:
首先在VMWare的“管理—虚拟机设置”中找到硬盘,选择扩展:
虚拟机设置

接着打开Ubuntu,在终端下载分区管理工具gparted:

sudo apt-get install gparted

输入命令运行:

sudo gparted

在窗口下方选择分区,右键选择“Resize/Move”,在新窗口中将图示的红色区域向右边拉满即可。
gparted
:在VMWare中增加空间后,这里会在此分区之后显示刚才增加的扩展空间,此图是扩容完成后的结果。
扩展空间
点击“Resize”,确认后就完成了根分区的扩容。

更新grub

编译成功后,离成功还差最后一步,需要更新一下系统的grub列表(Grub是一个启动加载器,用于加载内核):

sudo update-grub2

接着重启,在高级选项中就可以选择新编译好的内核了。重启后会发现系统没有太大的变化,但确实是自己编译的新内核。打开终端输入:

uname -r

可以看到版本号是配置时修改的。
版本号
至此,Ubuntu下编译Linux内核就完成了。

参考

  1. 简书,[linux下拷贝文件的时候出现权限不够的问题]:https://www.jianshu.com/p/14cfe33e0e8e;
  2. CSDN软件开发网,[ ubuntu换源]:https://blog.csdn.net/zhangmeimei_pku/article/details/79597951;
  3. CSDN软件开发网,[Ubuntu下编译内核]:https://blog.csdn.net/qq_43688952/article/details/88856354;
  4. CSDN软件开发网,[ubuntu18.04 编译内核 学习记录]:https://blog.csdn.net/weixin_38180645/article/details/82856407;
  5. 博客园,[编译自己的Ubuntu内核]:https://www.cnblogs.com/arnoldlu/p/6227843.html;
  6. CSDN软件开发网,[Ubuntu 16.04扩展swap分区]:https://blog.csdn.net/mika001/article/details/72780953;
  7. 博客园,[VMware下扩展Ubuntu根分区大小]:https://www.cnblogs.com/hester/p/11439353.html。
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值