在 bootargs 中传递 noatime 时内核恐慌

Gro*_*uez 7 linux filesystems linux-kernel

我有一个使用 jffs2 的嵌入式系统,想传入rootflags=noatime内核bootargs参数。

这会导致内核恐慌:

jffs2: Error: unrecognized mount option 'noatime' or missing value
[...]
No filesystem could mount root, tried:  jffs2
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,3)
Run Code Online (Sandbox Code Playgroud)

但是,如果我正常启动然后使用 noatime 重新挂载 jffs2 文件系统,则它可以正常工作:

$ mount -o remount,noatime /
Run Code Online (Sandbox Code Playgroud)

我对此感到困惑,因为根据文档,rootflags 参数“允许您提供与安装根文件系统有关的选项,就像安装程序一样”。

对我来说看起来像是内核错误,但另一方面,它似乎很明显,以至于我可能忽略了某些东西。

我已经用内核版本 3.7 和 3.14 对此进行了测试。

有人可以透露一些信息吗?

sou*_*edi 7

谷歌搜索rootflags noatime从安德鲁莫顿 2003 年提出这篇文章,也许它仍然适用。

http://lkml.org/lkml/2003/8/12/236

在测试某些东西时,我尝试使用 'rootflags=noatime' 启动,发现系统无法启动,因为 ext3、ext2 和 reiserfs 都无法识别该选项。查看 fs/ext3/super.c:parse_options() 和 init/do_mounts.c:root_data_setup() 中的代码,似乎不可能通过 rootflags 设置任何与文件系统无关的标志,这解释了特殊情况'ro' 和 'rw' 标志的代码。但是,似乎没有任何方法可以传递 nodev、noatime、nodiratime 或任何其他标志。(是的,所有这三个在我的环境中都有意义 - 它是一台笔记本电脑,我不需要时间,我使用 devfs,所以 root 上的 nodev 也有意义)。

独立于 fs 的选项由 mount(8) 在用户空间解析,并作为 `flags' 参数中的单个位传递到内核。