测试环境:虚拟机ubuntu-18.04
系统内核版本:4.15.0-20-generic
源码内核版本:linux-4.19.8
说明:
第一次是在centos7的虚拟机中做该实验,编译并安装完内核以后,系统无法启动
之后在ubuntu虚拟机中做测试,升级成功
- .config文件说明
/boot目录下的config文件,用于控制内核编译选项,编译内核时必须要有该配置文件
make config: 这个要求你手动选择所有配置项,配置完成后生成.config文件
make menuconfig: 以curses的图形节目显示配置菜单,当已有.config文件存在时,它会根据.config文件设定默认项.若不存在.config文件,则根据各级Kconfig文件来设定菜单项.完成配置后,生成.config文件.(需要curses库,用“yum install -y ncurses-devel”命令即可安装)
make oldconfig: 与make menuconfig相同,区别在于这个没有图形界面,当已有.config文件存在时,它根据.config文件设定默认项,若kconfig有新配置项时,会提示你进行选择;若不存在.config文件,则根据各级Kconfig文件来设定菜单项.完成配置后,生成.config文件.
若已存在.config文件, make menuconfig及make oldconfig都会把原.config另存为.config.old.
参考文章:https://blog.csdn.net/jerryoung/article/details/53783538
- 编译内核
下载内核源码并解压以后,必须在源码目录里生成.config配置文件,否则make时会出错,无法编译
源码目录里默认是没有.config文件的,可以按以下方式生成该文件:
1、执行“make menuconfig”命令,进入配置界面,再退出,会按源码的默认配置生成一个.config文件
2、执行“make oldconfig”命令,作用与1相同
上面两种方法,编译好内核以后,在虚拟机中无法正常启动(不推荐使用)
3、在已有Linux操作系统中,/boot目录下会有config开头的配置文件,直接拷贝过来,以.config文件命名即可
编译内核make时,需要确认一些命令才可以正常编译(默认选项,直接回车即刻)(推荐使用)
4、执行“make config”命令,手动选择每一项配置后,生成.config文件(专业人员使用,新手还是别用了)
生成.config文件以后,在源码目录里直接执行“make”,就开始编译内核了
- 安装模块
make modules_install
安装完成后,会在/lib/modules/目录下生成新版本的内核模块目录
- 安装内核
make install
安装完成后,会在/boot目录下生产新的内核文件
我看网上有些文章说的,在这一步以后,还要更新 grub
我自己的测试结果是“make install”以后,grub.conf已经更新了,所以直接重启即可
- 重启
reboot重新启动系统,在启动项中会有新版本内核的选择项
注意:虚拟机内存设置过小的话,系统会启动失败,报错:end kernel panic not syncing: system is deadlocked on memory;把内存调大以后,系统启动正常
用“uname -r”查看内核版本,显示“4.19.8”,升级内核成功!
参考文章:
https://linux.cn/article-9665-1.html
https://blog.csdn.net/baidu_24256693/article/details/80115354
- 出错及解决方案
- 错误1
root@ubuntu:/usr/src/linux-4.19.8# make
Makefile:595: include/config/auto.conf: No such file or directory
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
YACC scripts/kconfig/zconf.tab.c
/bin/sh: 1: bison: not found
scripts/Makefile.lib:196: recipe for target 'scripts/kconfig/zconf.tab.c' failed
make[2]: *** [scripts/kconfig/zconf.tab.c] Error 127
Makefile:539: recipe for target 'syncconfig' failed
make[1]: *** [syncconfig] Error 2
Makefile:635: recipe for target 'include/config/auto.conf' failed
make: *** [include/config/auto.conf] Error 2
apt install -y bison
刚开始出错的时候,只关注第一行的出错了(Makefile:595: include/config/auto.conf: No such file or directory),在网上搜了大半天,找不到解决方案;偶然发现一篇文章和我遇到的错误相同,原来直接解决第二条错误就可以了(/bin/sh: 1: bison: not found)
- 错误2
root@ubuntu:/usr/src/linux-4.19.8# make
Makefile:595: include/config/auto.conf: No such file or directory
YACC scripts/kconfig/zconf.tab.c
LEX scripts/kconfig/zconf.lex.c
/bin/sh: 1: flex: not found
scripts/Makefile.lib:188: recipe for target 'scripts/kconfig/zconf.lex.c' failed
make[2]: *** [scripts/kconfig/zconf.lex.c] Error 127
Makefile:539: recipe for target 'syncconfig' failed
make[1]: *** [syncconfig] Error 2
Makefile:635: recipe for target 'include/config/auto.conf' failed
make: *** [include/config/auto.conf] Error 2
apt install -y flex
就是缺什么装什么就可以了,参考https://blog.csdn.net/zxhio/article/details/80312316
- 错误3
fatal error: openssl/opensslv.h: No such file or directory
apt-get install libssl-dev -y
- 错误4
安装完内核,重启无法启动系统,报错:end kernel panic not syncing: system is deadlocked on memory
虚拟机内存设置过小所致,将内存调大以后即可解决