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

2023-10-25 13:50

本文主要是介绍kernel编译练习2:给ubuntu22升级5.19.3内核,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

前言

一 获取最新的内核

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_defconfigHOSTCC  scripts/basic/fixdepHOSTCC  scripts/kconfig/conf.oHOSTCC  scripts/kconfig/confdata.oHOSTCC  scripts/kconfig/expr.oLEX     scripts/kconfig/lexer.lex.cYACC    scripts/kconfig/parser.tab.[ch]HOSTCC  scripts/kconfig/lexer.lex.oHOSTCC  scripts/kconfig/menu.oHOSTCC  scripts/kconfig/parser.tab.oHOSTCC  scripts/kconfig/preprocess.oHOSTCC  scripts/kconfig/symbol.oHOSTCC  scripts/kconfig/util.oHOSTLD  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 -j4SYSHDR  arch/x86/include/generated/uapi/asm/unistd_32.hSYSHDR  arch/x86/include/generated/uapi/asm/unistd_64.hSYSHDR  arch/x86/include/generated/uapi/asm/unistd_x32.hSYSTBL  arch/x86/include/generated/asm/syscalls_32.hSYSHDR  arch/x86/include/generated/asm/unistd_32_ia32.hSYSHDR  arch/x86/include/generated/asm/unistd_64_x32.hSYSTBL  arch/x86/include/generated/asm/syscalls_64.hHYPERCALLS arch/x86/include/generated/asm/xen-hypercalls.hWRAP    arch/x86/include/generated/uapi/asm/bpf_perf_event.h/*略*/LD [M]  sound/usb/line6/snd-usb-line6.koLD [M]  sound/usb/line6/snd-usb-pod.koLD [M]  sound/usb/line6/snd-usb-podhd.koLD [M]  sound/usb/line6/snd-usb-toneport.koLD [M]  sound/usb/line6/snd-usb-variax.koLD [M]  sound/usb/misc/snd-ua101.koLD [M]  sound/usb/snd-usb-audio.koLD [M]  sound/usb/snd-usbmidi-lib.koLD [M]  sound/usb/usx2y/snd-usb-us122l.koLD [M]  sound/usb/usx2y/snd-usb-usx2y.koLD [M]  sound/virtio/virtio_snd.koLD [M]  sound/x86/snd-hdmi-lpe-audio.koLD [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.koSIGN    /lib/modules/5.19.3/kernel/sound/x86/snd-hdmi-lpe-audio.koINSTALL /lib/modules/5.19.3/kernel/sound/xen/snd_xen_front.koSIGN    /lib/modules/5.19.3/kernel/sound/xen/snd_xen_front.koDEPMOD  /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 installINSTALL /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$ 

总结

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

这篇关于kernel编译练习2:给ubuntu22升级5.19.3内核的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/282990

相关文章

快速修复一个Panic的Linux内核的技巧

《快速修复一个Panic的Linux内核的技巧》Linux系统中运行了不当的mkinitcpio操作导致内核文件不能正常工作,重启的时候,内核启动中止于Panic状态,该怎么解决这个问题呢?下面我们就... 感谢China编程(www.chinasem.cn)网友 鸢一雨音 的投稿写这篇文章是有原因的。为了配置完

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

怎么关闭Ubuntu无人值守升级? Ubuntu禁止自动更新的技巧

《怎么关闭Ubuntu无人值守升级?Ubuntu禁止自动更新的技巧》UbuntuLinux系统禁止自动更新的时候,提示“无人值守升级在关机期间,请不要关闭计算机进程”,该怎么解决这个问题?详细请看... 本教程教你如何处理无人值守的升级,即 Ubuntu linux 的自动系统更新。来源:https://