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

https://ke.qq.com/course/4032547?flowToken=1042705

 目录

前言

一 获取最新的内核

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 下载内核

网址  The Linux Kernel Archives

 好了,直接点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$ 

总结

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

<think>好的,我现在需要帮用户解决这个包依赖错误的问题。首先,用户遇到的错误信息是关于linux-modules-nvidia-550-6.8.0-55-generic的依赖问题,提示依赖的linux-image-6.8.0-55-generic或linux-image-unsigned版本无法安装,同时还有linux-signatures-nvidia的依赖问题。 我应该先分析可能的根本原因。这个错误通常发生在系统内核更新或NVIDIA驱动安装过程中,依赖的内核包可能还没有在仓库中提供,或者存在版本冲突。用户可能使用的是Ubuntu或其衍生版,比如Linux Mint,因为错误信息中的版本号看起来像是Ubuntu的格式。 接下来,我需要考虑常见的解决方法。首先,建议用户更新软件源,确保所有仓库信息是最新的,有时候包可能刚刚发布,本地缓存还没有更新。运行sudo apt update可能会有帮助。 如果更新后问题依旧,可能需要检查特定内核版本是否存在。用户遇到的6.8.0-55版本可能比较新,或者尚未被官方仓库完全支持。这时候,用户可能需要等待仓库同步,或者考虑安装其他可用的内核版本。 另一个可能性是用户启用了第三方内核PPA,比如xanmod或liquorix,这些仓库可能没有及时更新导致依赖断裂。这时候建议暂时禁用这些PPA,使用官方仓库的内核。 如果用户确实需要这个特定内核版本,可能需要手动下载安装相关的deb包,但这种方法有一定风险,需谨慎操作。或者,用户也可以考虑卸载有问题的内核模块,使用已安装的其他内核版本,通过调整GRUB或使用启动菜单选择稳定内核启动。 另外,检查NVIDIA驱动和内核的兼容性也很重要。可能需要安装与当前内核版本匹配的NVIDIA驱动,或者回退到旧版驱动。使用ubuntu-drivers工具自动选择合适驱动可能会有帮助。 最后,如果问题复杂,可能需要清除残留的配置文件,或者使用dpkg强制解决依赖,但这些都是最后的手段,需小心处理,避免系统损坏。 需要把这些步骤整理成用户容易理解的指南,分步骤建议,强调备份重要数据,谨慎操作,特别是在处理内核和驱动时,避免系统无法启动。</think>这个错误信息显示你在安装/更新NVIDIA驱动相关软件包时出现了依赖关系断裂。以下是分步解决方案: --- ### **错误原因分析** `linux-modules-nvidia-550-6.8.0-55-generic` 需要依赖: 1. `linux-image-6.8.0-55-generic` 或 `linux-image-unsigned-6.8.0-55-generic` 2. `linux-signatures-nvidia-6.8.0-55-generic (=6.8.0-55.57~22.04.1+1)` 但系统中缺少这些依赖包,通常由以下情况导致: - 内核版本 `6.8.0-55` 尚未正式发布到仓库 - 第三方内核仓库(如xanmod/liquorix)未同步更新 - 系统残留无效软件源配置 --- ### **解决方案** #### 第一步:更新软件源 ```bash sudo apt update --fix-missing sudo apt install -f ``` #### 第二步:检查可用内核版本 ```bash apt search linux-image-6.8.0 ``` * 如果无输出,说明该内核尚未正式发布,需等待官方同步 #### 第三步:使用稳定内核(推荐) ```bash # 查看已安装内核 dpkg --list | grep linux-image # 安装LTS内核(以5.15为例) sudo apt install linux-image-generic ``` #### 第四步:清理无效依赖 ```bash # 移除问题包 sudo apt remove linux-modules-nvidia-550-6.8.0-55-generic # 清理残留配置 sudo apt autoremove --purge ``` #### 第五步:安装匹配的NVIDIA驱动 ```bash # 查看推荐驱动版本 ubuntu-drivers devices # 安装推荐版本(例如525) sudo apt install nvidia-driver-525 ``` --- ### **注意事项** 1. 如果使用第三方内核仓库(如Mainline Kernel),建议暂时禁用: ```bash sudo mv /etc/apt/sources.list.d/*mainline*.list /tmp/ sudo apt update ``` 2. 内核与驱动需版本匹配,可通过以下命令验证: ```bash uname -r # 查看当前内核版本 nvidia-smi # 查看驱动状态 ``` 3. 如遇紧急启动问题,在GRUB界面选择旧内核启动 --- 通过以上步骤可解决依赖断裂问题。若仍有异常,建议提供完整的`apt update`和`apt upgrade`输出日志以便进一步分析。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

千册

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

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

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

打赏作者

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

抵扣说明:

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

余额充值