Ubuntu下重新编译安装内核

大致步骤与下文相同,本博文做一些我遇到的且该作者未说明的问题的补充。
原文链接: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

########################################################

准备工作:

  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
立马出现如下错误
  1. /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

  2. 解法: sudo apt install flex

    继续sudo make menuconfig, 马上遇到第二个错误

  3. 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 可以看到新内核的版本。

对于这个问题,我按照上述方式试过一次但并未解决。我的解决方式是增大虚拟机的内存(从2GB到4GB)然后启动虚拟机即可进入
~~完毕~~
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值