桌面PC/服务器 ubuntu18.04 Linux内核编译升级与机制分析

本文详细介绍了如何在Ubuntu 18.04上编译和升级Linux内核,包括下载源码、安装依赖、编译配置、安装内核头文件、强制卸载模块、接口版本控制、调试模块和解决安全启动问题等步骤。同时,文章探讨了内核如何遍历已加载模块、描述模块间的依赖关系以及内核模块的调试和优化方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.下载内核并且解压

安装依赖

sudo apt-get install gcc libncurses5-dev build-essential kernel-package libssl-dev flex bison libelf-dev dwarves zstd libxcb-cursor0

2.执行make menuconfig,并不修改,使用默认然后退出,默认使用的配置是x86_64_defconfig

所以也可以直接:make x86_64_defconfig

还可以拷贝/boot/目录下的既有的config文件来作为编译内核的配置文件来编译。但是需要两个内核版本号差别不大,可以互通使用。

$ cp /boot/config-5.4.0-84-generic .config

将CONFIG_SYSTEM_TRUSTED_KEYS字符串置空。

或者使用工具方法去掉选项,达到同样目的:

$ scripts/config --disable SYSTEM_TRUSTED_KEYS
$ make menuconfig
$ make clean

3.执行make -j4

因为之前编译过,再次编译输出很少

4.执行sudo make modules_install

执行module_install命令会安装内核编译出来的所有模块,后续开发过程中,如果只更新了个别模块,只需要执行如下命令安装指定模块即可:

sudo make M=path/to/module modules_install

这种方式需要系统内核是自定义升级过的,并且是编译模块所在源码树。

如果是基于默认内核编译一个新的源码树上的指定模块,需要带出模块全路径。

$ make -C /lib/modules/5.15.0-122-generic/build/ M=/home/czl/Workspace/linux/linux-5.15.166/drivers/infiniband/sw/rxe modules

5.执行sudo make headers_install,用于开发应用程序

也是因为之前安装过,所以输出很少

6.最后,执行sudo make install,更新内核,文件系统和grub.

7:重启内核完成升级

注意:有些PC需要将security boot功能关闭才能完成升级,否则启动的时候对内核签名校验失败,无法正确启动,再bios里面有关闭开关,首先设置密码,再通过密码关闭security boot.

8:编译deb包:

方式:

make -j4 deb-pkg

  HDRINST usr/include/asm/unistd_x32.h
  HDRINST usr/include/asm/unistd_64.h
  HDRINST usr/include/asm/ipcbuf.h
  HDRINST usr/include/asm/socket.h
  HDRINST usr/include/asm/termios.h
  HDRINST usr/include/asm/unistd_32.h
  HDRINST usr/include/asm/sockios.h
  HDRINST usr/include/asm/bpf_perf_event.h
  HDRINST usr/include/asm/poll.h
  HDRINST usr/include/asm/errno.h
  HDRINST usr/include/asm/param.h
  HDRINST usr/include/asm/fcntl.h
  HDRINST usr/include/asm/resource.h
  HDRINST usr/include/asm/ioctls.h
  HDRINST usr/include/asm/types.h
  HDRINST usr/include/asm/ioctl.h
  HDRINST usr/include/asm/termbits.h
  INSTALL ./debian/headertmp/usr/include
dpkg-deb: 正在 '../linux-headers-5.4.138-rt62+_5.4.138-rt62+-1_amd64.deb' 中构建软件包 'linux-headers-5.4.138-rt62+'。
dpkg-deb: 正在 '../linux-libc-dev_5.4.138-rt62+-1_amd64.deb' 中构建软件包 'linux-libc-dev'。
dpkg-deb: 正在 '../linux-image-5.4.138-rt62+_5.4.138-rt62+-1_amd64.deb' 中构建软件包 'linux-image-5.4.138-rt62+'。
 dpkg-genbuildinfo
 dpkg-genchanges  >../linux-5.4.138-rt62+_5.4.138-rt62+-1_amd64.changes
dpkg-genchanges: 警告: 控制文件声明了包 linux-image-5.4.138-rt62+-dbg 但它却不在文件列表中
dpkg-genchanges: info: 上传数据中包含完整的原始代码
 dpkg-source -i.git --after-build linux-5.4.138
dpkg-buildpackage: info: 完整上载(包含原始的代码)
caozilong@caozilong-Vostro-3268:~/Workspace/linux-rt/linux-5.4.138$ find ./ -type f -name "*.deb"

在内核的上级目录,生成了3个deb文件,分别为内核,头文件以及libc.

安装:

sudo dpkg -i *.deb
czl@czl-RedmiBook-14:~/kernel$ sudo dpkg -i *.deb
[sudo] czl 的密码: 
正在选中未选择的软件包 linux-headers-4.14.119。
(正在读取数据库 ... 系统当前共安装有 256271 个文件和目录。)
正准备解包 linux-headers-4.14.119_4.14.119-1_amd64.deb  ...
正在解包 linux-headers-4.14.119 (4.14.119-1) ...
正在选中未选择的软件包 linux-image-4.14.119。
正准备解包 linux-image-4.14.119_4.14.119-1_amd64.deb  ...
正在解包 linux-image-4.14.119 (4.14.119-1) ...
正在选中未选择的软件包 linux-image-4.14.119-dbg。
正准备解包 linux-image-4.14.119-dbg_4.14.119-1_amd64.deb  ...
正在解包 linux-image-4.14.119-dbg (4.14.119-1) ...
正准备解包 linux-libc-dev_4.14.119-1_amd64.deb  ...
正在将 linux-libc-dev (4.14.119-1) 解包到 (4.4.0-210.242) 上 ...
正在设置 linux-headers-4.14.119 (4.14.119-1) ...
正在设置 linux-image-4.14.119 (4.14.119-1) ...
 * dkms: running auto installation service for kernel 4.14.119                                                                                                                                              
Kernel preparation unnecessary for this kernel.  Skipping...

Building module:
cleaning build area....
make KERNELRELEASE=4.14.119 -C /lib/modules/4.14.119/build M=/var/lib/dkms/virtualbox/5.1.38/build.........
Signing module:
 - /var/lib/dkms/virtualbox/5.1.38/4.14.119/x86_64/module/vboxpci.ko
 - /var/lib/dkms/virtualbox/5.1.38/4.14.119/x86_64/module/vboxnetadp.ko
 - /var/lib/dkms/virtualbox/5.1.38/4.14.119/x86_64/module/vboxdrv.ko
 - /var/lib/dkms/virtualbox/5.1.38/4.14.119/x86_64/module/vboxnetflt.ko
Secure Boot not enabled on this system.
cleaning build area....

DKMS: build completed.

vboxdrv.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/4.14.119/updates/dkms/

vboxnetadp.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/4.14.119/updates/dkms/

vboxnetflt.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/4.14.119/updates/dkms/

vboxpci.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/4.14.119/updates/dkms/

depmod....

DKMS: install completed.
                                                                                                                                                                                                     [ OK ]
update-initramfs: Generating /boot/initrd.img-4.14.119
W: Possible missing firmware /lib/firmware/i915/kbl_guc_ver9_14.bin for module i915
W: Possible missing firmware /lib/firmware/i915/bxt_guc_ver8_7.bin for module i915
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.15.0-142-generic
Found initrd image: /boot/initrd.img-4.15.0-142-generic
Found linux image: /boot/vmlinuz-4.15.0-112-generic
Found initrd image: /boot/initrd.img-4.15.0-112-generic
Found linux image: /boot/vmlinuz-4.14.119
Found initrd image: /boot/initrd.img-4.14.119
Found Windows Boot Manager on /dev/sda1@/EFI/Microsoft/Boot/bootmgfw.efi
Adding boot menu entry for EFI firmware configuration
done
正在设置 linux-image-4.14.119-dbg (4.14.119-1) ...
正在设置 linux-libc-dev (4.14.119-1) ...
czl@czl-RedmiBook-14:~/kernel$ 

按照上述方法安装的,默认是没有安装.ko模块的,需要在源码目录中编译安装:

make modules
sudo make modules_install

生成内核头文件

第一步:

 make mrproper

第二步:

make ARCH=x86_64 headers_check

第三步:

make ARCH=x86_64 INSTALL_HDR_PATH=/home1/caozilong/WorkSpace/linux/headers headers_install

安装结果:

基于社区公版预编译内核升级

下载ubuntu-mainline-kernel脚本

 wget https://raw.githubusercontent.com/pimlie/ubuntu-mainline-kernel.sh/master/ubuntu-mainline-kernel.sh

将脚本放在可执行路径中

sudo install ubuntu-mainline-kernel.sh /usr/local/bin/

检查最新的可用内核版本

ubuntu-mainline-kernel.sh -c

获得最新版本并确认这就是您想要安装在系统上的版本之后,运行

 sudo ubuntu-mainline-kernel.sh -i
$ ubuntu-mainline-kernel.sh -c
Finding latest version available on kernel.ubuntu.com: v6.1.8
Finding latest installed version: none
A newer kernel version (v6.1.8) is available
$  sudo ubuntu-mainline-kernel.sh -i
Finding latest version available on kernel.ubuntu.com
Latest version is: v6.1.8, continue? (y/N)

Will download 6 files from kernel.ubuntu.com:
Downloading amd64/linux-headers-6.1.8-060108-generic_6.1.8-060108.202301240742_amd64.deb: 100%
Downloading amd64/linux-headers-6.1.8-060108_6.1.8-060108.202301240742_all.deb: 100%
Downloading amd64/linux-image-unsigned-6.1.8-060108-generic_6.1.8-060108.202301240742_amd64.deb: 100%
Downloading amd64/linux-modules-6.1.8-060108-generic_6.1.8-060108.202301240742_amd64.deb: 100%
Downloading amd64/CHECKSUMS: 100%
Downloading amd64/CHECKSUMS.gpg: 100%
Importing kernel-ppa gpg key ok
Signature of checksum file has been successfully verified
Checksums of deb files have been successfully verified with sha256sum
Installing 4 packages
Cleaning up work folder
$ ls -l /boot/
config-5.4.0-135-generic         grub/                            initrd.img-6.1.8-060108-generic  System.map-5.4.0-135-generic     vmlinuz-5.4.0-135-generic
config-5.4.0-136-generic         initrd.img-5.4.0-135-generic     memtest86+.bin                   System.map-5.4.0-136-generic     vmlinuz-5.4.0-136-generic
config-5.4.0-137-generic         initrd.img-5.4.0-136-generic     memtest86+.elf                   System.map-5.4.0-137-generic     vmlinuz-5.4.0-137-generic
config-6.1.8-060108-generic      initrd.img-5.4.0-137-generic     memtest86+_multiboot.bin         System.map-6.1.8-060108-generic  vmlinuz-6.1.8-060108-generic

升级指定版本

$ sudo ubuntu-mainline-kernel.sh -i v5.10.100

重新启动系统并检查内核版本

uname -rs

卸载最新的Linux Kernel

 sudo ubuntu-mainline-kernel.sh -u

首先重启系统,然后运行以下命令:

uname -rs

-r 选项可以查看所有可用的内核版本。

$ ubuntu-mainline-kernel.sh -r
Downloading index from kernel.ubuntu.com
v3.2.85         v3.2.90         v3.2.92         v3.2.93         v3.2.94         v3.2.95         v3.2.96         v3.2.97         v3.2.98         v3.2.99         v3.2.100
v3.2.101        v3.4.113        v3.8.3          v3.8.7          v3.12.65        v3.12.66        v3.12.67        v3.12.68        v3.12.69        v3.12.70        v3.12.71
v3.12.72        v3.12.73        v3.12.74        v3.14.74        v3.14.75        v3.14.77        v3.14.78        v3.14.79        v3.16.40        v3.16.45        v3.16.50
v3.16.55        v3.16.60        v3.16.65        v3.16.70        v3.16.75        v3.16.76        v3.16.77        v3.16.78        v3.16.79        v3.16.80        v3.16.81
v3.16.82        v3.16.83        v3.16.84        v3.16.85        v3.18.40        v3.18.45        v3.18.50        v3.18.55        v3.18.60        v3.18.70        v3.18.75
v3.18.80        v3.18.85        v3.18.90        v3.18.95        v3.18.100       v3.18.105       v3.18.110       v3.18.115       v3.18.120       v3.18.125       v3.18.130
v3.18.131       v3.18.132       v3.18.133       v3.18.134       v3.18.135       v3.18.136       v3.18.137       v3.18.138       v3.18.139       v3.18.140       v4.1.30
v4.1.35         v4.1.40         v4.1.43         v4.1.44         v4.1.45         v4.1.46         v4.1.47         v4.1.48         v4.1.49         v4.1.50         v4.1.51
v4.1.52         v4.4.20         v4.4.30         v4.4.40         v4.4.50         v4.4.60         v4.4.70         v4.4.80         v4.4.90         v4.4.100        v4.4.110
v4.4.120        v4.4.130        v4.4.140        v4.4.150        v4.4.155        v4.4.160        v4.4.165        v4.4.170        v4.4.175        v4.4.180        v4.4.185
v4.4.190        v4.4.195        v4.4.200        v4.4.205        v4.4.210        v4.4.215        v4.4.220        v4.4.225        v4.4.230        v4.4.235        v4.4.240
v4.4.245        v4.4.250        v4.4.255        v4.4.260        v4.4.265        v4.4.270        v4.4.275        v4.4.280        v4.4.285        v4.4.290        v4.4.293
v4.4.294        v4.4.295        v4.4.296        v4.4.297        v4.4.298        v4.4.299        v4.4.300        v4.4.301        v4.4.302        v4.6.4          v4.6.5
v4.6.6          v4.6.7          v4.7.0          v4.7.1          v4.7.2          v4.7.3          v4.7.4          v4.7.5          v4.7.6          v4.7.7          v4.7.8
v4.7.9          v4.7.10         v4.8.0          v4.8.5          v4.8.8          v4.8.9          v4.8.10         v4.8.11         v4.8.12         v4.8.13         v4.8.14
v4.8.15         v4.8.16         v4.8.17         v4.9.0          v4.9.5          v4.9.10         v4.9.15         v4.9.20         v4.9.25         v4.9.30         v4.9.35
v4.9.40         v4.9.45         v4.9.50         v4.9.55         v4.9.60         v4.9.65         v4.9.70         v4.9.75         v4.9.80         v4.9.85         v4.9.90
v4.9.95         v4.9.100        v4.9.105        v4.9.110        v4.9.115        v4.9.120        v4.9.125        v4.9.130        v4.9.135        v4.9.140        v4.9.145
v4.9.150        v4.9.155        v4.9.160        v4.9.165        v4.9.170        v4.9.175        v4.9.180        v4.9.185        v4.9.190        v4.9.195        v4.9.200
v4.9.205        v4.9.210        v4.9.215        v4.9.220        v4.9.225        v4.9.230        v4.9.235        v4.9.240        v4.9.245        v4.9.250        v4.9.255
v4.9.260        v4.9.265        v4.9.270        v4.9.275        v4.9.280        v4.9.285        v4.9.290        v4.9.295        v4.9.300        v4.9.305        v4.9.310
v4.9.320        v4.9.323        v4.9.324        v4.9.325        v4.9.326        v4.9.327        v4.9.328        v4.9.329        v4.9.330        v4.9.331        v4.9.332
v4.9.333        v4.9.335        v4.9.336        v4.9.337        v4.10.0         v4.10.5         v4.10.8         v4.10.9         v4.10.10        v4.10.11        v4.10.12
v4.10.13        v4.10.14        v4.10.15        v4.10.16        v4.10.17        v4.11.0         v4.11.3         v4.11.4         v4.11.5         v4.11.6         v4.11.7
v4.11.8         v4.11.9         v4.11.10        v4.11.11        v4.11.12        v4.12.0         v4.12.5         v4.12.6         v4.12.7         v4.12.8         v4.12.9
v4.12.10        v4.12.11        v4.12.12        v4.12.13        v4.12.14        v4.13.0         v4.13.5         v4.13.7         v4.13.8         v4.13.9         v4.13.10
v4.13.11        v4.13.12        v4.13.13        v4.13.14        v4.13.15        v4.13.16        v4.14.0         v4.14.10        v4.14.20        v4.14.30        v4.14.40
v4.14.50        v4.14.60        v4.14.70        v4.14.80        v4.14.90        v4.14.100       v4.14.110       v4.14.120       v4.14.130       v4.14.140       v4.14.150
v4.14.155       v4.14.160       v4.14.165       v4.14.170       v4.14.175       v4.14.180       v4.14.185       v4.14.190       v4.14.195       v4.14.200       v4.14.205
v4.14.210       v4.14.215       v4.14.220       v4.14.225       v4.14.230       v4.14.235       v4.14.240       v4.14.245       v4.14.250       v4.14.255       v4.14.260
v4.14.265       v4.14.270       v4.14.275       v4.14.280       v4.14.285       v4.14.289       v4.14.290       v4.14.291       v4.14.292       v4.14.293       v4.14.294
v4.14.295       v4.14.296       v4.14.297       v4.14.298       v4.14.299       v4.14.301       v4.14.302       v4.14.303       v4.14.304       v4.15.0         v4.15.5
v4.15.9         v4.15.10        v4.15.11        v4.15.12        v4.15.13        v4.15.14        v4.15.15        v4.15.16        v4.15.17        v4.15.18        v4.16.0
v4.16.5         v4.16.9         v4.16.10        v4.16.11        v4.16.12        v4.16.13        v4.16.14        v4.16.15        v4.16.16        v4.16.17        v4.16.18
v4.17.0         v4.17.5         v4.17.10        v4.17.11        v4.17.12        v4.17.13        v4.17.14        v4.17.15        v4.17.16        v4.17.17        v4.17.18
v4.17.19        v4.18.0         v4.18.5         v4.18.10        v4.18.11        v4.18.12        v4.18.13        v4.18.14        v4.18.15        v4.18.16        v4.18.17
v4.18.18        v4.18.19        v4.18.20        v4.19.0         v4.19.5         v4.19.10        v4.19.15        v4.19.20        v4.19.25        v4.19.30        v4.19.35
v4.19.40        v4.19.45        v4.19.50        v4.19.55        v4.19.60        v4.19.65        v4.19.70        v4.19.75        v4.19.80        v4.19.85        v4.19.90
v4.19.95        v4.19.100       v4.19.105       v4.19.110       v4.19.115       v4.19.120       v4.19.125       v4.19.130       v4.19.135       v4.19.140       v4.19.145
v4.19.150       v4.19.155       v4.19.160       v4.19.165       v4.19.170       v4.19.175       v4.19.180       v4.19.185       v4.19.190       v4.19.195       v4.19.200
v4.19.205       v4.19.210       v4.19.215       v4.19.220       v4.19.225       v4.19.230       v4.19.235       v4.19.240       v4.19.245       v4.19.250       v4.19.255
v4.19.256       v4.19.257       v4.19.258       v4.19.259       v4.19.260       v4.19.261       v4.19.262       v4.19.263       v4.19.264       v4.19.265       v4.19.268
v4.19.269       v4.19.270       v4.19.271       v4.20.0         v4.20.5         v4.20.8         v4.20.9         v4.20.10        v4.20.11        v4.20.12        v4.20.13
v4.20.14        v4.20.15        v4.20.16        v4.20.17        v5.0.0          v5.0.5          v5.0.10         v5.0.12         v5.0.13         v5.0.14         v5.0.15
v5.0.16         v5.0.17         v5.0.18         v5.0.19         v5.0.20         v5.0.21         v5.1.0          v5.1.5          v5.1.10         v5.1.12         v5.1.13
v5.1.14         v5.1.15         v5.1.16         v5.1.17         v5.1.18         v5.1.19         v5.1.20         v5.1.21         v5.2.0          v5.2.5          v5.2.10
v5.2.12         v5.2.13         v5.2.14         v5.2.15         v5.2.16         v5.2.17         v5.2.18         v5.2.19         v5.2.20         v5.2.21         v5.3.0
v5.3.5          v5.3.9          v5.3.10         v5.3.11         v5.3.12         v5.3.13         v5.3.14         v5.3.15         v5.3.16         v5.3.17         v5.3.18
v5.4.0          v5.4.5          v5.4.10         v5.4.15         v5.4.20         v5.4.25         v5.4.30         v5.4.35         v5.4.40         v5.4.45         v5.4.50
v5.4.55         v5.4.60         v5.4.65         v5.4.70         v5.4.75         v5.4.80         v5.4.85         v5.4.90         v5.4.95         v5.4.100        v5.4.105
v5.4.110        v5.4.115        v5.4.120        v5.4.125        v5.4.130        v5.4.135        v5.4.140        v5.4.145        v5.4.150        v5.4.155        v5.4.160
v5.4.165        v5.4.170        v5.4.175        v5.4.180        v5.4.185        v5.4.190        v5.4.200        v5.4.205        v5.4.210        v5.4.214        v5.4.215
v5.4.216        v5.4.217        v5.4.218        v5.4.219        v5.4.220        v5.4.221        v5.4.222        v5.4.223        v5.4.224        v5.4.226        v5.4.227
v5.4.228        v5.4.229        v5.4.230        v5.5.0          v5.5.5          v5.5.10         v5.5.11         v5.5.12         v5.5.13         v5.5.14  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

papaofdoudou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值