https://ke.qq.com/course/4032547?flowToken=1042705
目录
3 在linux-5.19.3/arch/x86/configs中创建my_x86_defconfig
1 安装模块sudo make modules_install
3 config-5.19.0和config-5.19.3的差异
前言
这个是第二次搞这个事情,为什么这么执着于换内核呢,为了练手啊,我记得鲁班学艺的时候,好像是挖几千个方的,几千个圆的什么什么的,然反正就是不停的联系吧,然后达芬奇天天画蛋,画到鸡蛋脱销。总之就是多练习,不能让熟练成为一句空话。
这次总结了上次的误区,然后优化了文档结构,操作方式是不一样的。
如果遇到问题,请参考升级内核到5.19.0。
一 获取最新的内核
1 下载内核
好了,直接点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$
总结
相比第一次升级,这次升级更加流程,也更加得心应手。