在yocto映像中强制启动FSCK

在yocto映像中强制启动FSCK,yocto,bitbake,Yocto,Bitbake,我想对我的bitbake'd映像强制执行文件系统检查。如果我理解正确,我需要将fsck=force和fsck.repair=yes添加到/proc/cmdline。这种方法正确吗?修改/proc/cmdline的正确方法是什么 编辑:我运行了oe pkgdata util find path/proc/cmdline,退出时出现错误:找不到任何生成路径/proc/cmdline的包。因此,我推测它是在内核编译期间生成的。对吗;tldr将您的内容添加到U-Boot中的bootargs变量 首先,是

我想对我的
bitbake
'd映像强制执行文件系统检查。如果我理解正确,我需要将
fsck=force
fsck.repair=yes
添加到
/proc/cmdline
。这种方法正确吗?修改
/proc/cmdline
的正确方法是什么


编辑:我运行了
oe pkgdata util find path/proc/cmdline
,退出时出现
错误:找不到任何生成路径/proc/cmdline的包。因此,我推测它是在内核编译期间生成的。对吗;tldr将您的内容添加到U-Boot中的
bootargs
变量

首先,是的,您的方法是正确的-您需要在引导时将两个参数
fsck=force
fsck.repair=yes
作为引导参数传递给内核。但是你看错了方向。所有这些都是关于引导和Linux内核的,而不是关于Yocto或bitbake

有几种方法可以将引导参数传递给内核,如

  • 硬编码到内核代码中(蛮力选项,您必须挖掘源代码:))
  • 使用
    CONFIG\u CMDLINE
    kernel-CONFIG(假设引导加载程序参数将附加到它)
  • 通过引导加载程序传递参数(最灵活和可用的方式)
  • 通过
    .dtb
    -文件传递参数(二进制文件,更多)
  • 发明其他东西,因为Linux内核是一把DIY瑞士军刀
使用
CONFIG\u CMDLINE
很简单-只需将

CONFIG_CMDLINE=" loglevel=3 fsck=force fsck.repair=yes"
关于在Yocto中调整内核配置的更多信息

最好的方法是使用引导加载程序向内核传递参数。在Yocto中,您可能使用U-Boot作为引导加载程序,因此
bootargs
环境变量(在U-Boot环境中,而不是在linux用户空间环境中)是可用的

首先,尝试搜索文件uEnv.txt。它可以在
/boot
文件夹的主分区上找到,也可以在单独的启动分区上找到。此文件包含U-Boot的一些附加配置选项。例如,可能为内核指定了默认控制台-option
console=…
。你可以把你的东西放在那里的某个地方。可能会有向内核添加引导参数的特定选项。在U-Boot内部,该选项将在引导过程中附加到
bootargs

如果你在你的设备上发现uEnv.txt,那么它应该在Yocto的某个地方。搜索BSP元层

如果您的设备没有这样的文件,那么坏消息是-您必须挖掘一些U-Boot代码)实际上将
bootargs
环境变量设置为适当值的命令如下

env set bootargs ${bootargs} fsck=force fsck.repair=yes
U-Boot被打包为单个二进制文件,并通过一定的偏移量写入存储设备(SD卡或任何东西)。这里重要的是,在普通引导过程中,您没有手动访问U-boot的权限-它只是自动加载,执行一些操作并加载内核

但是,您可以连接到设备的默认调试控制台(可能使用UART)并在那里手动输入命令,但此启动顺序不可复制-下次启动设备时,将不会应用此命令

这就是为什么您需要将此命令准确地嵌入到U-Boot源代码中,以便在每次启动时立即应用此命令

在U-Boot源代码中查找设备的配置文件。这应该是
.h
-文件(C头),其中包含板名作为其名称和变量的一部分
BOOTENV\u BOOTCOMMAND
和/或
BOOTENV
。此变量定义U-boot的引导脚本。也就是说,特定设备的引导顺序是恒定的——引导过程中不需要任何手动交互。也就是说,在每次启动过程中,U-boot都在做同样的事情。正是这些东西在
BOOTENV_BOOTCOMMAND
和/或
BOOTENV
中以长C字符串的形式硬编码,并带有U-boot的引导脚本(就像bash脚本一样)

您可以在此处添加此命令

env set bootargs ${bootargs} fsck=force fsck.repair=yes
或者您可能会找到
bootargs
定义本身,比如
bootargs=…
,所以请在此处添加参数


还考虑用户空间实用程序<代码> FSCK < /代码>。您可以将systemd配置为在系统启动时触发它,然后按计划定期触发。这实际上不是您想要的,但也许这也适合您的情况。

非常感谢您的详细解释!从中学到了很多!当然欢迎:)