Linux 内核在 arm 架构下启动是不是必须要 initramfs?

2023-03-13 09:19:17 +08:00
 wniming

由于我要加快系统的启动速度,所以想省去 initramfs ,在 x86 上是可以让内核直接挂载根文件系统的,但在 arm 架构下这么做会报这样一个错误:

[    3.212932] VFS: Cannot open root device "sda3" or unknown-block(0,0): error -6
[    3.220360] Please append a correct "root=" boot option; here are the available partitions:

我看了一下内核代码 init/do_mounts.c 的 mount_root 函数,我发现在 x86 上这个函数用到的 ROOT_DEV 是在 arch/x86/kernel/setup.c 这里被赋值的,而 arm 上这个值是 0 ,arm 体系结构相关的代码没有赋值 ROOT_DEV ,所以我怀疑 linux 在 arm 架构上是必须要有 initramfs 才能启动,而我想找到一个方法可以不使用 initramfs 来启动以加快启动速度。

1547 次点击
所在节点    Linux
7 条回复
pagxir
2023-03-13 09:21:32 +08:00
不是。
podel
2023-03-13 09:29:59 +08:00
不是。 我最近编译了一个 ARM UEFI 启动的 OPENWRT 系统。
这个就是 启动的时候单内核。 然后 wait root filesystem 。继续加载启动了。
huangya
2023-03-13 10:04:27 +08:00
b 不是。可以接启动参数 root=
wniming
2023-03-13 10:35:59 +08:00
应该是我之前哪里设置错了,现在问题解决了
yanqiyu
2023-03-13 11:01:40 +08:00
看起来更像是你的 sda 对应的文件系统驱动没有被编译进内核
wniming
2023-03-13 11:15:41 +08:00
@yanqiyu 昨天搞了好久没解决,今天不知道改了那里问题没了
cy18
2023-03-13 16:20:38 +08:00
1. 检查启动参数,“root=”配置对不对。
2. 检查驱动,包括设备驱动,文件系统驱动,是不是编译进内核了。
3. 不涉及机密的话建议发完整的,包括 uboot 部分的 log 上来。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/923475

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX