理解和使用.sdcard格式
Yocto Communiy BSP 和 Release BSP 中默认启用的一个非常有用的功能是在 .sdcard 中生成烘焙图像的选项格式。
如果 .sdcard默认情况下未选择格式,可以在 conf/local.conf 文件上通过添加 IMAGE_FSTYPES 来启用它,如下所示:
IMAGE_FSTYPES="sd卡"
值得注意的是,如果指定了这个变量,那么只会创建类型定义的文件系统。此变量最常用的默认值是:
IMAGE_FSTYPES="tar.bz2 ext3 sd卡"
.sdcard 格式创建一个包含所有必要分区的映像,并将引导加载程序、内核和 rootfs 加载到该映像中。您可以使用 dd 将此文件中的数据低级复制到 SD 卡设备,如以下命令示例所示:
$ sudo dd if=.sdcard
.sdcard 上使用的分区文件
.sdcard 分区如下所示:
IMAGE_ROOTFS_ALIGNMENT
为引导加载程序保留的未分区空间
引导空间
Kernerl 和其他数据
根文件系统大小
根文件系统。
在 RootFS 分区上授予更多可用空间
.sdcard 的大小文件将完全取决于 rootfs 的大小。这意味着,除非我们向 rootfs 分区添加额外的空间,否则生成的文件将不会对我们所有的 SD 卡容量进行分区。(当然,一旦加载到 SD 卡上,总是可以选择编辑分区)
为了添加更多空间,您可以使用 IMAGE_ROOTFS_EXTRA_SPACE 变量。您可以将其添加到 local.conf 文件中,并添加以 KB 为单位的可用磁盘空间。例如,如果您想保证 1GB 的额外空间,您可以将以下行添加到您的 local.conf 文件。
IMAGE_ROOTFS_EXTRA_SPACE = "1048576"
值得注意的是,这是 IMAGE_OVERHEAD_FACTOR 变量的附加空间,该变量定义了应用于初始图像大小的乘数。这仅适用于乘数乘以
默认情况下,构建过程对此变量使用乘数 1.3。当使用此方法确定最终生成的图像大小时,此默认值会导致 30% 的可用磁盘空间添加到图像中。这意味着在安装后脚本之前应该有 30% 的可用磁盘空间。如果您希望获得更多空间,可以按如下方式编辑此变量:
图像开销因子 = "1.5"
这将导致在安装后脚本之前向映像中添加 50% 的可用磁盘空间,并且不考虑可能来自包管理系统的开销。
IMAGE_ROOTFS_SIZE 是如何计算的
这个变量也是以千字节为单位,它由 OpenEmbedded 构建系统使用一种算法来确定,该算法考虑了用于生成图像的初始磁盘空间、图像的请求大小(通过开销因素)以及要添加到图像的额外可用空间(通过额外空间变量)。
构建系统首先运行 du(磁盘使用情况)命令来确定 rootfs 目录树的大小。如果 IMAGE_ROOTFS_SIZE 当前值大于磁盘使用量乘以开销因子,则仅添加额外的空间。如果 IMAGE_ROOTFS_SIZE 小于磁盘使用量乘以开销因子,则在添加额外空间之前将磁盘使用量乘以开销因子。
IMAGE_ROOTFS_SIZE 必须设置为默认值,该值通常非常低,因为它只是在每次烘焙图像时初始化并根据实际尺寸要求进行更新。
您也可以直接使用此变量来选择要分配给 RootFS 的空间。例如,将 RootFS 设置为 2GB 需要在 local.conf 文件中添加以下内容:
IMAGE_ROOTFS_SIZE = “2097152”
图像开销因子 = “1.0”
在这个例子中,我们将开销因子保留为 1,这样就不会添加额外的空间,因为我们指定了我们想要的 rootfs 大小。
你知道发生了什么事吗?在 tmp/deploy/images/
另外,我发现引导加载程序中存在严重的 CRC 环境错误。无论出于何种原因,总是要求您第一次从新映像的卡启动时中断启动,然后输入“saveenv”(不带引号),然后重置。这也许可以解决你的问题。每次我将新图像写入 SD 卡时,我都必须这样做。
您可能从网页上复制粘贴了命令“IMAGE_ROOTFS_SIZE = “2097152””,但其中的双引号字符( “ ”)有误。请将其替换为“linux double quote "”,解析错误即可消失。
根据第一段,该文档似乎在说这些变量中的任何一个都应该添加到 conf/local.conf。
然而,当我添加
IMAGE_ROOTFS_SIZE = “2097152”
图像开销因子 = “1.0”
到我的 conf/local.conf 文件,我收到 bitbake 错误:
错误:/home/user/yocto/build/conf/local.conf:26 处的 ParseError:未解析的行:'IMAGE_ROOTFS_SIZE =“2097152”'
是否会逐步淘汰这一模式,转而采用“WIC”模式?rocko repo 无法构建 .sdcard默认文件。
有人知道是否有关于 WIC 文件格式的类似描述以及如何使用它吗?
您能分享一下您的解决方案吗?谢谢
事实证明,如果更改制造工具脚本,制造工具也可以创建多个分区。该文档包含在制造工具下载中。我计划使用 *.sdcard 图像对我的设备上 eMMC 进行编程,并且无论如何都需要使用制造工具。制造工具中的默认设置甚至不使用 *.sdcard 图像,所以我想我现在不需要解决这个特定问题。
jtis我也有同样的问题。我正在尝试做同样的事情。
你好, gusarambula ,这份文档包含非常重要和有用的信息,希望下次你能在教程中向我们解释所有可以使用命令“dd”应用于带有 i.MX 的 SD 的选项。
请继续努力
非常感谢您的反馈!
Bio_TICFSL ,我终于可以提到你了。您能否对此文档提出评论?
非常好的文档,特别是关于扩展分区容量的主题,看起来像是一个常见问题解答。
非常好的文档!
很棒的文件,古斯塔沃。