Linux内核编译和更换系统内核版本
夜深人静,更换个系统内核版本吧1:首先我有了内核代码(直接在内核官网上下载下来就可以)2:查看当前的内核版本nasri@ubuntu:/boot$ cat /proc/versionLinux version 4.18.0-20-generic (buildd@lcy01-amd64-020) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3))...
夜深人静,更换个系统内核版本吧
1:首先我有了内核代码(直接在内核官网上下载下来就可以)
2:查看当前的内核版本
nasri@ubuntu:/boot$ cat /proc/version
Linux version 4.18.0-20-generic (buildd@lcy01-amd64-020) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #21~18.04.1-Ubuntu SMP Wed May 8 08:43:37 UTC 2019
nasri@ubuntu:/boot$ uname -a
Linux ubuntu 4.18.0-20-generic #21~18.04.1-Ubuntu SMP Wed May 8 08:43:37 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
在boot下找到当前系统内核的config文件
nasri@ubuntu:/boot$ ls
abi-4.15.0-20-generic grub memtest86+.bin System.map-4.15.0-20-generic vmlinuz-4.18.0-17-generic
config-4.15.0-20-generic initrd.img-4.15.0-20-generic memtest86+.elf System.map-4.18.0-17-generic vmlinuz-4.18.0-20-generic
config-4.18.0-17-generic initrd.img-4.18.0-17-generic memtest86+_multiboot.bin System.map-4.18.0-20-generic
config-4.18.0-20-generic initrd.img-4.18.0-20-generic retpoline-4.15.0-20-generic vmlinuz-4.15.0-20-generic
很清楚,那就是config-4.18.0-20-generic了
那么我们编译的时候要用的内核config就是用这个4.18的config替换就可以了。
这里说一下,我们系统中本身也就有这个内核的代码在下面这个目录下
nasri@ubuntu:~$ ls /usr/src/linux-headers-4.1
linux-headers-4.15.0-20/ linux-headers-4.18.0-17/ linux-headers-4.18.0-20/
linux-headers-4.15.0-20-generic/ linux-headers-4.18.0-17-generic/ linux-headers-4.18.0-20-generic/
在linux-headers-4.18.0-20-generic/目录下
比较下boot目录下的config-4.18.0-20-generic和系统原有内核代码下的.config应该是没有区别的
nasri@ubuntu:~$ vimdiff /boot/config-4.18.0-20-generic /usr/src/linux-headers-4.18.0-20-generic/.config
2 files to edit
额,打脸了,有点区别。。。。区别是源码下的.config是debug版本,debug宏是打开的...
3:编译内核版本
首先上面说了,把当前系统用的config copy到 你新下载的内核代码中
我先生成一个默认的.config
nasri@ubuntu:~/work/linux_kernel/linux-5.0.9$ make defconfig
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/confdata.o
HOSTCC scripts/kconfig/expr.o
HOSTCC scripts/kconfig/zconf.lex.o
HOSTLD scripts/kconfig/conf
*** Default configuration is based on 'x86_64_defconfig'
#
# configuration written to .config
#
然后我想比较下默认的.config和系统要求的.config的差异,但是发现差异太大了,直接copy过来吧,
nasri@ubuntu:~/work/linux_kernel/linux-5.0.9$ cp /boot/config-4.18.0-20-generic .config
然后直接就make
make的时候遇到很多需要手动需要确认的情况,我就是一直按着'Enter'键,把所有需要确认的都用enter做了选择。。。
然后就遇到问题了:
UPD include/generated/uapi/linux/version.h
UPD include/generated/utsrelease.h
HOSTCC scripts/selinux/genheaders/genheaders
HOSTCC scripts/selinux/mdp/mdp
HOSTCC scripts/bin2c
HOSTCC scripts/kallsyms
HOSTCC scripts/conmakehash
HOSTCC scripts/recordmcount
HOSTCC scripts/sortextable
HOSTCC scripts/asn1_compiler
HOSTCC scripts/sign-file
scripts/sign-file.c:25:10: fatal error: openssl/opensslv.h: No such file or directory
#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
在网上搜下看看,应该是libssl-dev没有装或者装的不对导致的。
在安装libssl-dev的时候还遇到了点小波折
刚开始安装出错,需要把目前的libssl-dev先删掉(执行sudo apt-get install libssl-dev1.1),然后重新执行
sudo apt-get install libssl-dev
安装好之后再make
就正常了。
make出错之后继续编译的话之前已经编译过的就不再编译了。
。。。额,编译之后虚拟机只能进入命令行模式了,今天看下原因
原来是虚拟机的硬盘空间太小原因,需要增大些空间
更多推荐
所有评论(0)