夜深人静,更换个系统内核版本吧

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出错之后继续编译的话之前已经编译过的就不再编译了。

。。。额,编译之后虚拟机只能进入命令行模式了,今天看下原因

 

原来是虚拟机的硬盘空间太小原因,需要增大些空间

 

Logo

更多推荐