kernel编译练习2:给ubuntu22升级5.19.3内核

本文档详细记录了在Ubuntu系统中手动下载、编译并安装Linux内核5.19.3的过程,包括获取内核源码、查看当前内核版本、编译内核、安装内核模块和引导程序,以及验证新内核版本等步骤。作者强调了实践操作的重要性,并分享了从失败中吸取的经验,使得整个过程更加规范和顺畅。
摘要由CSDN通过智能技术生成

目录

前言

一 获取最新的内核

1 下载内核

2 上传内核到ubuntu

二 查看当前系统的内核版本

三 编译内核

1 解压内核

2 准备一个my_x86_defconfig

3 在linux-5.19.3/arch/x86/configs中创建my_x86_defconfig

4 make my_x86_defconfig

5 make menuconfig

四 安装内核

1 安装模块sudo make modules_install

2 安装sudo make install

3 重启reboot

五 验证结果

1 查看版本号

2 浏览/boot/文件夹

3 config-5.19.0和config-5.19.3的差异

总结


前言

     这个是第二次搞这个事情,为什么这么执着于换内核呢,为了练手啊,我记得鲁班学艺的时候,好像是挖几千个方的,几千个圆的什么什么的,然反正就是不停的联系吧,然后达芬奇天天画蛋,画到鸡蛋脱销。总之就是多练习,不能让熟练成为一句空话。

     这次总结了上次的误区,然后优化了文档结构,操作方式是不一样的。

如果遇到问题,请参考升级内核到5.19.0

一 获取最新的内核

1 下载内核

网址  https://www.kernel.org/

 好了,直接点5.19下载,得到linux-5.19.3.tar.xz,将它弄到ubuntu中。

2 上传内核到ubuntu

也可以直接在ubuntu中使用火狐浏览器下载内核。

通过ssh登录到ubuntu,这个软件叫mobaxterm,如图所示

 弹出如下窗口,选中下载的内核文件,如下所示

 在底部会看到传输进度,我也是第一次这么干,还真好使。如下图的底部,还有进度条,真的很好用。

二 查看当前系统的内核版本

$ cat /proc/version 
Linux version 5.19.0 (lkmao@lkmao-virtual-machine) (gcc (Ubuntu 11.2.0-19ubuntu1) 11.2.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #1 SMP PREEMPT_DYNAMIC Mon Aug 8 20:26:54 CST 2022

分段分析下这些信息

Linux version 5.19.0 :内核的版本号5.19.0,知道这个就行了,其他的无所谓了,

(lkmao@lkmao-virtual-machine) 这个就是编译内核的电脑的信息

Mon Aug 8 20:26:54 CST 2022:当前内核被编译的时间2022年8月8号20点26分54秒

三 编译内核

1 解压内核

$ tar -Jxf linux-5.19.tar.xz

2 准备一个my_x86_defconfig

看下我的/boot目录,我的当前版本是5.19,所以要找的文件是config-5.19.0

 把它复制到linux-5.19.3/arch/x86/configs中,并从命名为my_x86_config,为什么叫这么名字呢,老话说的好,贱名好养活。所以啊,编程的时候,给变量起名字也要够贱才行,这样别人就会问,哪个逗比写的代码,然后领导就记住你的功劳了。如下所示, 

3 在linux-5.19.3/arch/x86/configs中创建my_x86_defconfig

进入目录linux-5.19.3/arch/x86/configs

cp /boot/config-5.19.0 my_x86_defconfig

这个看要自己的内核版本哈,反正就是复制config-xxx名字的文件。

4 make my_x86_defconfig

lkmao@lkmao-virtual-machine:~/kernel/linux-5.19.3$ make my_x86_defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/confdata.o
  HOSTCC  scripts/kconfig/expr.o
  LEX     scripts/kconfig/lexer.lex.c
  YACC    scripts/kconfig/parser.tab.[ch]
  HOSTCC  scripts/kconfig/lexer.lex.o
  HOSTCC  scripts/kconfig/menu.o
  HOSTCC  scripts/kconfig/parser.tab.o
  HOSTCC  scripts/kconfig/preprocess.o
  HOSTCC  scripts/kconfig/symbol.o
  HOSTCC  scripts/kconfig/util.o
  HOSTLD  scripts/kconfig/conf
arch/x86/configs/my_x86_defconfig:10958:warning: symbol value 'm' invalid for CRYPTO_BLAKE2S_X86
#
# configuration written to .config
#
lkmao@lkmao-virtual-machine:~/kernel/linux-5.19.3$ 

看到 configuration written to .config,上一篇文章中就没有这一步,在这里一顿莫名其妙的操作,最后虽然成功,但是特别不规范,这样才是规范的操作。

5 make menuconfig

~/kernel/linux-5.19.3$ make menuconfig

出现下面这个界面,我曾经以为,能搞出这个界面,就算精通linux内核裁剪了。

编译,make -j4,花费时间40分钟左右。

lkmao@lkmao-virtual-machine:~/kernel/linux-5.19.3$ make -j4
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_32.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_64.h
  SYSHDR  arch/x86/include/generated/uapi/asm/unistd_x32.h
  SYSTBL  arch/x86/include/generated/asm/syscalls_32.h
  SYSHDR  arch/x86/include/generated/asm/unistd_32_ia32.h
  SYSHDR  arch/x86/include/generated/asm/unistd_64_x32.h
  SYSTBL  arch/x86/include/generated/asm/syscalls_64.h
  HYPERCALLS arch/x86/include/generated/asm/xen-hypercalls.h
  WRAP    arch/x86/include/generated/uapi/asm/bpf_perf_event.h

/*略*/
  LD [M]  sound/usb/line6/snd-usb-line6.ko
  LD [M]  sound/usb/line6/snd-usb-pod.ko
  LD [M]  sound/usb/line6/snd-usb-podhd.ko
  LD [M]  sound/usb/line6/snd-usb-toneport.ko
  LD [M]  sound/usb/line6/snd-usb-variax.ko
  LD [M]  sound/usb/misc/snd-ua101.ko
  LD [M]  sound/usb/snd-usb-audio.ko
  LD [M]  sound/usb/snd-usbmidi-lib.ko
  LD [M]  sound/usb/usx2y/snd-usb-us122l.ko
  LD [M]  sound/usb/usx2y/snd-usb-usx2y.ko
  LD [M]  sound/virtio/virtio_snd.ko
  LD [M]  sound/x86/snd-hdmi-lpe-audio.ko
  LD [M]  sound/xen/snd_xen_front.ko
lkmao@lkmao-virtual-machine:~/kernel/linux-5.19.3$

中间没有报错,为什么没有报错呢,因为我在第一次升级内核的时候,错误已经解决了,我现在用的.config文件就是第一次升级后修改过的配置文件,如果遇到错误,欢迎评论区留言。

lkmao@lkmao-virtual-machine:~/kernel/linux-5.19.3$ ls arch/x86/boot/bzImage -lsh
10M -rw-rw-r-- 1 lkmao lkmao 10M  8月 23 18:23 arch/x86/boot/bzImage

四 安装内核

1 安装模块sudo make modules_install

lkmao@lkmao-virtual-machine:~/kernel/linux-5.19.3$ sudo make modules_install
/*
略
*/ 
INSTALL /lib/modules/5.19.3/kernel/sound/x86/snd-hdmi-lpe-audio.ko
  SIGN    /lib/modules/5.19.3/kernel/sound/x86/snd-hdmi-lpe-audio.ko
  INSTALL /lib/modules/5.19.3/kernel/sound/xen/snd_xen_front.ko
  SIGN    /lib/modules/5.19.3/kernel/sound/xen/snd_xen_front.ko
  DEPMOD  /lib/modules/5.19.3
lkmao@lkmao-virtual-machine:~/kernel/linux-5.19.3$

2 安装sudo make install

lkmao@lkmao-virtual-machine:~/kernel/linux-5.19.3$ sudo make install
  INSTALL /boot
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 5.19.3 /boot/vmlinuz-5.19.3
update-initramfs: Generating /boot/initrd.img-5.19.3
run-parts: executing /etc/kernel/postinst.d/unattended-upgrades 5.19.3 /boot/vmlinuz-5.19.3
run-parts: executing /etc/kernel/postinst.d/update-notifier 5.19.3 /boot/vmlinuz-5.19.3
run-parts: executing /etc/kernel/postinst.d/xx-update-initrd-links 5.19.3 /boot/vmlinuz-5.19.3
I: /boot/initrd.img.old is now a symlink to initrd.img-5.15.0-43-generic
I: /boot/initrd.img is now a symlink to initrd.img-5.19.3
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 5.19.3 /boot/vmlinuz-5.19.3
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.19.3
Found initrd image: /boot/initrd.img-5.19.3
Found linux image: /boot/vmlinuz-5.19.0
Found initrd image: /boot/initrd.img-5.19.0
Found linux image: /boot/vmlinuz-5.15.0-43-generic
Found initrd image: /boot/initrd.img-5.15.0-43-generic
Found linux image: /boot/vmlinuz-5.15.0-41-generic
Found initrd image: /boot/initrd.img-5.15.0-41-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
done
lkmao@lkmao-virtual-machine:~/kernel/linux-5.19.3$ 

3 重启reboot

重启,然后验证结果。

五 验证结果

1 查看版本号

lkmao@lkmao-virtual-machine:~$ cat /proc/version 
Linux version 5.19.3 (lkmao@lkmao-virtual-machine) (gcc (Ubuntu 11.2.0-19ubuntu1) 11.2.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #1 SMP PREEMPT_DYNAMIC Tue Aug 23 17:11:13 CST 2022
lkmao@lkmao-virtual-machine:~$ 

版本号5.19.3,升级成功,编译时间Tue Aug 23 17:11:13 CST 2022。时间正确。

2 浏览/boot/文件夹

lkmao@lkmao-virtual-machine:~$ ls /boot/
config-5.15.0-41-generic      memtest86+.elf
config-5.15.0-43-generic      memtest86+_multiboot.bin
config-5.19.0                 System.map-5.15.0-41-generic
config-5.19.3                 System.map-5.15.0-43-generic
efi                           System.map-5.19.0
grub                          System.map-5.19.3
initrd.img                    vmlinuz
initrd.img-5.15.0-41-generic  vmlinuz-5.15.0-41-generic
initrd.img-5.15.0-43-generic  vmlinuz-5.15.0-43-generic
initrd.img-5.19.0             vmlinuz-5.19.0
initrd.img-5.19.3             vmlinuz-5.19.3
initrd.img.old                vmlinuz.old
memtest86+.bin
lkmao@lkmao-virtual-machine:~$ 

相比升级之前,文件夹中多了一系列xxx-5.19.3文件,自此升级完成。

3 config-5.19.0和config-5.19.3的差异

原本以为config-5.19.0和config-5.19.3会相同,然后diff一下,不一样,记录一下。

lkmao@lkmao-virtual-machine:/boot$ diff config-5.19.0 config-5.19.3 
3c3
< # Linux/x86 5.19.0 Kernel Configuration
---
> # Linux/x86 5.19.3 Kernel Configuration
763a764
> CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y
8784a8786
> CONFIG_VIRTIO_ANCHOR=y
10957,10958c10959
< CONFIG_CRYPTO_BLAKE2S=m
< CONFIG_CRYPTO_BLAKE2S_X86=m
---
> CONFIG_CRYPTO_BLAKE2S_X86=y
11607d11607
< CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y
lkmao@lkmao-virtual-machine:/boot$ 

总结

        相比第一次升级,这次升级更加流程,也更加得心应手。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

千册

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

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

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

打赏作者

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

抵扣说明:

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

余额充值