Ubuntu 18.04.2 LTS下编译Linux-5.0.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
#####################################################################
准备工作:

  1. 安装编译器gcc, sudo apt install gcc
  2. 安装make工具,sudo apt install make ; sudo apt install make-guile
  3. 为了使用make menuconfig,安装curse, sudo apt install ncurses-dev

#####################################################################
开始按如下步骤进行内核编译

  1. make menuconfig
  2. make
  3. make modules_install
  4. 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页面
Ubuntu 18.04.2 LTS下编译Linux-5.0.7内核_第1张图片
不做任何修改,直接保存.config,退出。

第二步、make
开始sudo make, 马上报了一个错误

scripts/sign-file.c:25:10: fatal error: openssl/opensslv.h: 没有那个文件或目录
#include
^~~~~~~~~~~~~~~~~~~~
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文件产生。

Ubuntu 18.04.2 LTS下编译Linux-5.0.7内核_第2张图片
第三步、make modules_install
Ubuntu 18.04.2 LTS下编译Linux-5.0.7内核_第3张图片
第四步、 make install
Ubuntu 18.04.2 LTS下编译Linux-5.0.7内核_第4张图片
检查一下boot下面是否有新的内核
Ubuntu 18.04.2 LTS下编译Linux-5.0.7内核_第5张图片
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时需要重点去替换的。贸然用menu config方式,极有可能开机就panic。

同样的方式,使用boot下自带的.config 文件去重新对5.0.7 source code做make,也顺利完成boot up。使用 uname -a 可以看到新内核的版本。
在这里插入图片描述
~~完毕~~

你可能感兴趣的:(Linux)