archlinux内核编译

只要是我自己的机器安装的Linux,内核肯定要自己重新编译的。因为看到/lib64/modules/下面特定版本的文件夹包罗万象,就替cpu感到累,替内存感到撑得慌,虽然知道这是错觉,但一定要去做点事让心理好受点。起码,我就这点外围硬件,顶多插个U盘,留这么多驱动干啥?

关于内核的支持情况可参考:
Active kernel releases
关于内核的编译可参考:
Arch Linux Kernel/Traditional compilation

ArchLinux 官方会说使用Arch Build System有多省事。但我最省事的方式还是通用的方式,因为各种发行版定制内核的方法大同小异,还不用专门去看Arch Linux System的文档。

通常定制内核可按下面几步:

  • 下载选定版本的内核
  • 为系统安装内核编译时必须的编译工具
  • 配置内核、编译(make help查看各选项)
  • 安装内核模块(make modules_install),copy编译的内核以及制作的初始化内存盘到/boot目录
  • 更新引导程序的配置

archLinux提供了一个名为mkinitcpio的工具来方便生成初始化内存盘:
在这里插入图片描述
下载的内核为5.4.142(当时眼花了,本来应该下载5.10版本的),使用make localmodconfig 为基础选项编译,在制作初始化内存盘时会报错(具体错误会因个人设置有差异),反正最后也成功生成需要的initramfs了,就没管它。然后更新grub启动配置(grub-mkconfig -o /boot/grub/grub.cfg)也一切正常,但启动系统出问题了:
在这里插入图片描述
开始时认为第二条是关键点:

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

这种错误常见,通常是由于没能加载磁盘驱动或者磁盘格式驱动造成的,惯性思维让我认为错误就在此处,而且第一条错误也与此有关。但检查选项并重新编译内核后问题依旧,期间试过搜索过的很多类似情况的解决方式,比如更新系统提供的处理器微码,也试过按默认选项重新编译内核,甚至挪到实体机上做比较,错误依旧。中间Intel nuc的760P莫名其妙坏了,还是挑刚刚将一年来的代码工程移动到它上面的第一天…消停了几天后,忽然就觉得第一条错误应该重新审视:

Initramfs unpacking failed: invalid magic at start of compressed archive

初始化内存盘解压缩错误,除了磁盘文件损坏或者空间不足外,也可能是因为解压缩算法和实际压缩模式对不起来造成的。检查内核编译选项,没发现支持zstd压缩模式的选项,就留了个LZMA,其他的全取消了。
在这里插入图片描述
因为archLinux默认安装的mkinitcpio默认是当下最新版本,其初始化内存盘的压缩格式默认为zstd,需要在/etc/mkinitcpio.conf配置中更改为被内核支持的模式,此处为LZMA:
在这里插入图片描述
重新生成启动盘后就一切正常了。问题出在我真的没关注过Linux内核从那个版本开始支持zstd压缩模式的(貌似长期支持版本5.10打头的是支持的,但5.4打头的不行),也不关注archLinux提供的mkinitcpio工具从哪个版本开始默认使用zstd压缩。

其实自己查找过的资料中有人遇到过同样的问题,而且解决了:
[SOLVED]initramfs: unpacking failed: invalid magic at start of compres
但当时因为自己半桶水的英文理解能力,认为是archLinux的内核/硬件板块的版主说的“默认压倒一切”解决了问题,就没去看倒数第二位小伙子的详细解答。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Arch Linux的PKGbuild是用于构建软件包的脚本文件。它是Arch Linux的包管理系统的一部分,用于自动化构建、配置和安装软件包。PKGbuild文件是纯文本文件,其中包含了构建软件包所需的所有信息和指令。 PKGbuild文件通常包含以下几个部分: 1. pkgname:软件包的名称。 2. pkgver:软件包的版本号。 3. pkgrel:软件包的发布号,用于标识软件包的更新版本。 4. pkgdesc:软件包的描述信息,用于简要介绍软件包的功能和特点。 5. arch:指定软件包适用的体系结构(如x86_64、i686等)。 6. url:软件包的官方网站。 7. license:软件包的许可证类型。 8. depends:软件包运行所需的依赖项。 9. source:指定软件包的源码或安装文件的下载地址。 10. sha256sums:用于校验源码或安装文件完整性的哈希值。 通过执行PKGbuild文件,系统会自动下载软件包的源码或安装文件,并按照文件中的指令进行配置、编译和安装过程。用户还可以根据需要自定义PKGbuild文件,以便添加额外的编译选项、配置文件等。 PKGbuild的优势在于它提供了一种快速而灵活的方式来构建自定义的软件包。因为它是纯文本文件,所以用户可以根据需要自定义脚本,添加额外的功能或修改默认设置,从而满足个性化的需求。 总之,PKGbuild是Arch Linux包管理系统中用于构建软件包的重要工具,它提供了一种简单、灵活和可定制的方式来创建和安装软件包。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值