首页 > 系统相关 >用Ubuntu24编译打包6.9.4内核(仅供参考)

用Ubuntu24编译打包6.9.4内核(仅供参考)

时间:2024-06-14 18:21:38浏览次数:17  
标签:test1 rambo amd64 内核 linux 6.9 Ubuntu24

目录

环境介绍

Ubuntu24/4U/12G/120G/NAT
172.16.186.148/24


rambo@test1:~$ uname -a
Linux test1.lab.example.com 6.8.0-35-generic #35-Ubuntu SMP PREEMPT_DYNAMIC Mon May 20 15:51:52 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux



本次因为使用的是最新的发行版和最新的内核,所以出现了问题,但过程没问题


前期安装

# 安装编译内核所需的软件包和工具
rambo@test1:~$ sudo apt update
rambo@test1:~$ sudo apt install -y build-essential libncurses-dev bison flex libssl-dev libelf-dev bc git
释义:
build-essential:基本的编译工具和环境
libncurses-dev:用于配置内核的menuconfig或其他配置工具
bison 和 flex:用于解析配置文件和生成代码
libssl-dev:提供加密库的开发文件
libelf-dev:提供 ELF 文件处理库的开发文件
bc:用于内核配置时的数学计算

下载内核源代码并编译

rambo@test1:~$ wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.9.4.tar.xz

# 配置内核
rambo@test1:~$ tar -xvf linux-6.9.4.tar.xz
rambo@test1:~$ cd linux-6.9.4/
rambo@test1:~/linux-6.9.4$ make defconfig      # 使用默认配置文件
注:如果需要进行更详细的配置,可以运行 make menuconfig 或 make xconfig 来打开配置界面


# 编译内核
rambo@test1:~/linux-6.9.4$ make -j$(nproc)    # 使用所有 CPU 核心并行编译

# 安装编译好的内核模块
rambo@test1:~/linux-6.9.4$ sudo make modules_install

# 安装新编译的内核
rambo@test1:~/linux-6.9.4$ sudo make install
注:这将会更新启动加载程序(GRUB)的配置并安装新的内核映像文件
  INSTALL /boot
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 6.9.4 /boot/vmlinuz-6.9.4
update-initramfs: Generating /boot/initrd.img-6.9.4
I: The initramfs will attempt to resume from /dev/sda3
I: (UUID=d6f791dd-533b-41ab-94e8-77d270186fa3)
I: Set the RESUME variable to override this.
run-parts: executing /etc/kernel/postinst.d/unattended-upgrades 6.9.4 /boot/vmlinuz-6.9.4
run-parts: executing /etc/kernel/postinst.d/update-notifier 6.9.4 /boot/vmlinuz-6.9.4
run-parts: executing /etc/kernel/postinst.d/xx-update-initrd-links 6.9.4 /boot/vmlinuz-6.9.4
I: /boot/initrd.img is now a symlink to initrd.img-6.9.4
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 6.9.4 /boot/vmlinuz-6.9.4
Sourcing file `/etc/default/grub'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.9.4
Found initrd image: /boot/initrd.img-6.9.4
Found linux image: /boot/vmlinuz-6.8.0-35-generic
Found initrd image: /boot/initrd.img-6.8.0-35-generic
Found memtest86+x64 image: /memtest86+x64.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.
Adding boot menu entry for UEFI Firmware Settings ...
done

打包并更新内核

# 编译并打包内核为 .deb 包
rambo@test1:~/linux-6.9.4$ sudo apt-get install -y debhelper dh-virtualenv
rambo@test1:~/linux-6.9.4$ make -j$(nproc) bindeb-pkg
注:这将会在上级目录中生成内核的 .deb 安装包,包括内核映像文件和相关的模块文件

# 在上级目录中会找到生成的 .deb 包
rambo@test1:~/linux-6.9.4$ ls -al ../linux-*.deb
-rw-r--r-- 1 rambo rambo  9253982  6月 14 17:25 ../linux-headers-6.9.4_6.9.4-3_amd64.deb
-rw-r--r-- 1 rambo rambo 13980520  6月 14 17:24 ../linux-image-6.9.4_6.9.4-3_amd64.deb
-rw-r--r-- 1 rambo rambo  1401168  6月 14 17:24 ../linux-libc-dev_6.9.4-3_amd64.deb

# 安装内核的 .deb 包
rambo@test1:~/linux-6.9.4$ sudo dpkg -i ../linux-*.deb

# 更新 GRUB 配置
rambo@test1:~/linux-6.9.4$ sudo update-grub


rambo@test1:~/linux-6.9.4$ dpkg -l | grep 6.9.4
ii  linux-headers-6.9.4                            6.9.4-2                                  amd64        Linux kernel headers for 6.9.4 on amd64
ii  linux-image-6.9.4                              6.9.4-2                                  amd64        Linux kernel, version 6.9.4
ii  linux-libc-dev:amd64                           6.9.4-2                                  amd64        Linux support headers for userspace development
ra



# 重启来加载新安装的内核
rambo@test1:~/linux-6.9.4$ sudo reboot
注:重启后进不去系统



重启无法进入系统问题

1. 启动到GRUB菜单
在开机时按住 Shift 键或 Esc 键(具体取决于你的系统),直到出现 GRUB 菜单。如果系统默认直接进入新内核,GRUB 菜单可能被跳过,所以需要手动进入。

2. 选择旧内核启动
在 GRUB 菜单中,选择“Advanced options for Ubuntu”,然后选择你之前使用的旧内核版本(例如,内核 5.x.x)。按 Enter 键启动系统。

3. 移除有问题的新内核
成功启动系统后,可以移除有问题的新内核。打开终端并执行以下命令:
sudo apt remove linux-image-6.9.4-*
sudo apt autoremove

4. 更新 GRUB 配置
确保 GRUB 配置文件更新正确,以便下次启动时不再尝试加载有问题的内核:
sudo update-grub

5. 检查日志文件
查看日志文件以了解系统无法启动的具体原因。以下命令可以帮助你查看系统日志:
journalctl -xb

6. 重新安装或升级内核
如果你仍然希望使用新版本内核,可以尝试从 kernel.ubuntu.com 获取正式发布的内核包并进行重新安装

7. 下载并安装内核
从官方 PPA 下载所需版本的内核包:
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v6.9.4/amd64/linux-headers-6.9.4-xxxxxx_all.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v6.9.4/amd64/linux-headers-6.9.4-xxxxxx_amd64.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v6.9.4/amd64/linux-image-6.9.4-xxxxxx_amd64.deb
wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v6.9.4/amd64/linux-modules-6.9.4-xxxxxx_amd64.deb

sudo dpkg -i linux-headers-6.9.4-xxxxxx_all.deb linux-headers-6.9.4-xxxxxx_amd64.deb linux-image-6.9.4-xxxxxx_amd64.deb linux-modules-6.9.4-xxxxxx_amd64.deb

8. 再次更新 GRUB 配置
更新 GRUB 配置:
sudo update-grub

9. 重启系统
重新启动系统以查看问题是否解决:
sudo reboot

注意事项

编译和打包内核是一个耗时的过程,特别是在较慢的计算机上可能需要一段时间
在配置和编译过程中可能会遇到依赖问题或错误消息,根据实际情况解决问题
在更新内核之前,请确保备份重要数据,并且理解在此过程中可能引入的系统变化和风险

标签:test1,rambo,amd64,内核,linux,6.9,Ubuntu24
From: https://www.cnblogs.com/smlile-you-me/p/18248433

相关文章

  • debian12升级内核
    参考检查当前内核版本uname-r升级系统包sudoaptupdate查找最新的Debian12内核sudoapt-cachesearchlinux-image升级内核sudoaptinstall<linux_image_version>比如:sudoaptinstalllinux-image-6.5.0-0.deb12.4-amd6验证安装rambo@test1:~$dpkg--list|......
  • ubuntu24 安装
    地址:https://cdimage.ubuntu.com/ubuntu/releases/24.04/release/                  按回车看具体信息等待 仍然等待,我大概用时20分钟,出现以下画面回车返回,出现下下个画面按“rebootnow“ 之后可能有个fail的画......
  • 《Linux内核完全注释》学习笔记:2.7 Linux内核源代码的目录结构
    由于Linux内核是一种单内核模式的系统,因此内核中所有程序几乎都有紧密的联系,它们之间的调用关系非常密切。所以在阅读一个源代码文件时往往需要参阅其他相关的文件。因此有必要在开始阅读内核源代码之前,先熟悉一下源代码文件的目录结构。这里我们首先列出Linux内核完整的源代......
  • petalinux 交叉编译指定内核驱动
    需要编译u-dma-buf驱动。ThisrepositorycontainsaMakefie.MakefilehasthefollowingParameters:ParameterNameDescriptionDefaultValueARCHArchitectureName$(shelluname-m|sed-es/arm.*/arm/-es/aarch64.*/arm64/)KERNEL_SRCKernelSourc......
  • linux内存管理(六)- 内核新struct - folio
    folio大概是5.16引入的,看起来像是page的封装,这里有一篇讲解folio很好的博客,论好名字的重要性:Linux内核page到folio的变迁-CSDN博客structfolio{/*private:don'tdocumenttheanonunion*/union{struct{/*public:*/unsignedlon......
  • linux内核空间进程为什么无论如何切换,内核地址空间转换到物理地址的关系是永远不变的?
    在Linux内核中,无论如何切换进程,内核地址空间转换到物理地址的关系是永远不变的,主要原因是内核地址空间在所有进程中是共享的。这种设计有几个关键点:1.内核地址空间共享在Linux操作系统中,每个进程都有自己独立的用户空间地址范围,但内核空间地址范围对所有进程是共享的。具体来说......
  • 周报 | 24.6.3-24.6.9文章汇总
    为了更好地整理文章和发表接下来的文章,以后每周都汇总一份周报。OpenCV与AI深度学习|实战|OpenCV实现扫描文本矫正应用与实现详解(附源码)-CSDN博客DeepDriving|多目标跟踪算法之DeepSORT-CSDN博客GiantPandaCV|提升分类模型acc(一):BatchSize&LARS-CSDN博客天才程......
  • 定时器-内核定时器
    在Linux内核中,定时器通过软件中断实现,而这个软件中断其实依赖于实际的物理定时器中断。概括来说,物理定时器会每隔一段时间发送一次中断,然后有一个全局变量jiffies就会加1,当到达某个阈值时,就会触发定时器软件中断。软件中断是在每次发生了硬件(物理)中断并处理中断后由内核去检查是否......
  • 【驱动】Linux内核调试之使用模块参数
    环境:处理器架构:arm64内核源码:linux-6.6.29ubuntu版本:20.04.1代码阅读工具:vim+ctags+cscope本文主要介绍内核开发中常用的模块传参手段,通过模块参数传递可以通过用户态来获取内核的一些信息,也可以通过用户态写入一些值来控制内核相关行为。一般内核开发者很喜欢使用模块传参......
  • 上周热点回顾(6.3-6.9)
    热点随笔:· C#开源实用的工具类库,集成超过1000多种扩展方法 (追逐时光者)· RabbitMQ进阶使用之延迟队列→订单在30分钟之内未支付则自动取消 (青石路)· .Net中间件-新开源代码生成器-ReZero (阿妮亚)· C#.Net筑基-String字符串超全总结[深度好文] (安木夕)·......