在 bootargs 中传递 noatime 时内核发生恐慌

在 bootargs 中传递 noatime 时内核发生恐慌

我有一个使用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)

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

$ mount -o remount,noatime /

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

对我来说,这看起来像是一个内核错误,但另一方面,它似乎很明显,也许我忽略了一些东西。

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

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

答案1

谷歌搜索rootflags noatime找到了 Andrew Morton 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 或任何其他标志。 (是的,所有这三个在我的环境中都是有意义的 - 它是一台笔记本电脑,我不需要 atime,而且我使用 devfs,所以 root 上的 nodev 也有意义)。

独立于文件系统的选项由 mount(8) 在用户空间中解析,并作为“flags”参数中的各个位传递到内核。

相关内容