大致步骤与下文相同,本博文做一些我遇到的且该作者未说明的问题的补充。
原文链接:Ubuntu 18.04.2 LTS下编译Linux-5.0.7内核 - 程序员大本营
我的各版本如下:
VMware Workstation 15.5 pro
Ubuntu 19.04
原内核:5.0.0-38-generic
更换内核:5.5.7
原文引用及补充:
以下涉及到的版本数字请自行换成自己的版本
心血来潮,看到Linux最新版已经到了5.0了,于是想编译下最新的内核。说做就做,先在我的Window7系统上,搞一个虚拟机,百度后发现Vmware Worstation 15 player有非商用的免费版可以用,下载之,然后从Ubuntu网站上下载最新的18.04.2 LTS的iso文件,在www.kernel.org上下载最新的Linux source code tarball (5.0.7) 。准备好这三个后,开始安装虚拟机和创建上面的Ubuntu系统,注意这里尽可能给虚拟机磁盘空间大一些,默认是20G,因为要编译内核,扩到到50G。一切顺利,只遇到虚拟机系统启动后,Intel VT-x 处于禁用状态,无法加载系统,修改下主机的BIOS设定重启就OK了。Ubuntu系统在虚拟机上完成安装就可以正常Boot up。虚拟机安装后,接着安装Vmware tools,进行主机与虚拟机间的文件传递。这一步也没有什么问题。将下载的linux源代码tarball顺利拖入到虚拟机内的usr/src目录下,解压
sudo tar -xf linux-5.0.7.tar.xz
注意后面的所有操作,多要以root权限进行,所以命令前加sudo
########################################################
准备工作:
- 安装编译器gcc, sudo apt install gcc(一般自带)
- 安装make工具,sudo apt install make ; sudo apt install make-guile(一般自带)
- 为了使用make menuconfig,安装curse, sudo apt install ncurses-dev
#######################################################
开始按如下步骤进行内核编译
- make menuconfig
- make
- make modules_install
- make install.
第一步、 make menuconfig
在linux-5.0.7目录下,sudo make menuconfig
立马出现如下错误
- /bin/sh: 1: flex: not found
scripts/Makefile.lib:193: recipe for target ‘scripts/kconfig/zconf.lex.c’ failed
make[1]: *** [scripts/kconfig/zconf.lex.c] Error 127
Makefile:556: recipe for target ‘menuconfig’ failed
make: *** [menuconfig] Error 2
解法: sudo apt install flex
继续sudo make menuconfig, 马上遇到第二个错误
- LEX scripts/kconfig/zconf.lex.c
YACC scripts/kconfig/zconf.tab.h
/bin/sh: 1: bison: not found
scripts/Makefile.lib:207: recipe for target ‘scripts/kconfig/zconf.tab.h’ failed
make[1]: *** [scripts/kconfig/zconf.tab.h] Error 127
Makefile:556: recipe for target ‘menuconfig’ failed
make: *** [menuconfig] Error 2
解法: sudo apt install bison
继续 make menuconfig . 顺利出现了GUI页面,不做任何修改,直接保存.config,退出。第二步、make
开始sudo make, 马上报了一个错误
scripts/sign-file.c:25:10: fatal error: openssl/opensslv.h: 没有那个文件或目录
#include <openssl/opensslv.h>
^~~~~~~~~~~~~~~~~~~~
compilation terminated.
scripts/Makefile.host:90: recipe for target ‘scripts/sign-file’ failed
make[1]: *** [scripts/sign-file] Error 1
Makefile:1080: recipe for target ‘scripts’ failed
make: *** [scripts] Error 2
解法: sudo apt install libssl-dev
接着继续sudo make, 没有再报错,开始编译内核。
经过漫长的编译等待( 3个小时) ,Stage1的编译才完成,产生了bzImage.
CC arch/x86/boot/video-bios.o
LD arch/x86/boot/setup.elf
OBJCOPY arch/x86/boot/setup.bin
OBJCOPY arch/x86/boot/vmlinux.bin
HOSTCC arch/x86/boot/tools/build
BUILD arch/x86/boot/bzImage
Setup is 17116 bytes (padded to 17408 bytes).
System is 8373 kB
CRC 60bc2a8e
Kernel: arch/x86/boot/bzImage is ready (#1)
接着make进入编译module阶段的Stage2,会看到有非常的.ko文件产生。
第三步、make modules_install
第四步、 make install
检查一下boot下面是否有新的内核5.0.7相关的文件都已经产生。大功告成,开始重启切换内核。
不过很遗憾,开机后选择内核到5.0.7后出现panic.
Kernel panic not syncing : System is deadlocked on memory
考虑到内核版本跨度是否有点太大,于是下载一份4.19.35的tarball,按如上方式编译后,还是会有同样的Panic出现,于是在config环节,不使用menuconfig,而是直接用Ubuntu 18.04 boot下自带的.config文件,copy到usr/src/4.19.35下面来,make clean/make。
这一次跑下来,选择新内核启动后可以顺利开机,LOL,看来商业发行版的config文件应该是各位rebuild kernel时需要重点去替换的。贸然用menuconfig方式,极有可能开机就panic。同样的方式,使用boot下自带的.config 文件去重新对5.0.7 source code做make,也顺利完成boot up。使用 uname -a 可以看到新内核的版本。
~~完毕~~