vlambda博客
学习文章列表

周谈(16)- Linux 内核编译,终于实践了

前言

平常每周都会有一些心得感悟,这些在大家工作中可能会有许多共性。我觉得花一些时间整理一下,跟粉丝读者们分享一下日常学习工作的想法和所得,这是一个很好的互动和文章分享的痛点。

这是第十六篇。

Linux内核编译

最近工作刚开始,领了一台新的机器,然后开机进去后发现找不到那个网卡,没法上网。问了组内的同事,是由于缺少该网卡驱动导致的。然后他就用U盘拷贝了一份内核源码目录到机器上面,更新了一下Linux内核版本,重启之后就可以找到网卡了。他U盘里面的目录是之前编译过的内核源码,然后执行了一下内核安装的命令,更换了内核就好了。

那晚下班后,就琢磨着我学习了Linux操作系统专栏那么久了,还没迈出内核编译的那一步,干就得了。

上网搜了一下怎么进行内核编译,然后就下载了最新版本的内核,在虚拟机里面把那个内核编出来了,并升级了一下虚拟机系统的内核,一步步来也不是那么的复杂,就是开始的时候那个虚拟机编译很慢,后面在网上找啊找,看到有个命令 make -j <n>, 说是可以加快编译速度。我试了一下的确如此,然后我就修改了一下虚拟机的配置,把cpu核和内存都给他加到更大,再编译就更快了,大概过了一个多小时编译完成。下面是具体的操作,还有几个遇到的问题,在博客中记录一下。

编译步骤

先说一下,我的虚拟机系统是ubuntu。

第一步是下载源码包,使用wget命令就可以了。

wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.17.1.tar.xz

然后就是解压缩编译了

tar xvf linux-5.17.1.tar.xz
cd linux-5.17.1
# 编译的时候发现缺了一些库,这里统一先安装一下
apt install libncurses-dev
apt install flex
apt install bison
apt install libssl-dev
apt install libelf-dev
apt install zstd
apt install dwarves
apt install textinfo 

#
 配置内核,这个跟buildroot一样, 进去什么也不改,保持默认
make menuconfig  

make -j 12
make bzImage
make modules_install
cp .config /boot/config
make install 
reboot

#
 重启之后,执行 uname -r 就可以看到内核版本已经变了

遇到的问题

  1. 虚拟机里面编译的时候会有报错

make[1]: *** 没有规则可制作目标“debian/canonical-certs.pem”,由“certs/x509_certificate_list” 需求。 停止。
make: *** [Makefile:1846:certs] 错误 2

需要修改一下.config文件, 替换debian/canonical-certs.pem为空。

  1. failed to load symbols from /lib/modules/5.17.1/misc/vboxguest.ko: Invalid argument

由于是虚拟机 需要安装工具  设备->安装增强功能  -> 安装。安装报错的话,进去虚拟机弹出光盘,然后再试一次, 就可以了。

解决问题之后, 继续make -j 12,直到编译完成。大概要几个小时,真正的是一个大工程啊。

更多

很多事情开始了,你会发现没有什么神秘的。

这一周主要的工作还是看代码文档,不过不是linux内核代码,而是DPDK源码,同时也编译了DPDK,运行了对应的test和example。从中发现,这些个开源代码的文档还是挺完全的,面面俱到,根据文档一步步来,耐心看下来,很容易打通一个个流程。学习了一周的DPDK的源码,看到了许多思想,其实也是以往工作中都用到过的技术,不过是应用到了DPDK的场景中了,当然也有新的东西啦。DPDK的编译运行就在另一篇文章讲,后面慢慢地写出一系列的DPDK源码学习相关的笔记文档,吃透它,嚼碎它,消化它,让也成为我的一部分,哈哈。

下面是今晚组长请客吃日本料理,第一次正经吃日料,还是蛮新鲜的,全部吃完了。


行动,才不会被动!