从 RAM 启动时 Yocto rootfs 分配

问题描述 投票:0回答:1

我目前正在为从 RAM 运行的嵌入式 yocto 构建进行测试构建。

使用 yocto 我生成一个包含 initramfs 的 fitimage,它在启动时从 RAM 运行。在过去,这按预期工作,但是,随着时间的推移,由于 initramfs 中需要的更多功能不断增长,我现在已经达到了空间限制。在过去,我遇到过空间限制,可以通过调整 yocto 变量(例如 INITRAMFS_MAXSIZE 和 IMAGE_OVERHEAD_FACTOR)来纠正,但这些不再产生任何效果,因为我似乎已经达到了其他限制。

设备有 2GB 物理内存,当启动到 initramfs 并查看磁盘使用情况时,我们可以看到 rootfs 处于 100% 使用状态,即 557MB,而还有 1+GB 的空 tmpfs 存储。

此外,如果我们将另一个包添加到 initramfs 中,我们可以毫无错误地编译,因为我们没有达到 INITRAMFS_MAXSIZE,但我们无法再启动,因为我们遇到以下内核恐慌:

[   10.918626] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[   10.926889] CPU: 2 PID: 1 Comm: swapper/0 Not tainted 5.15.52 #1
[   10.934110] Hardware name: i.MX8MPlus
[   10.940026] Call trace:
[   10.942470]  dump_backtrace+0x0/0x1a0
[   10.946138]  show_stack+0x18/0x70
[   10.949452]  dump_stack_lvl+0x68/0x84
[   10.953116]  dump_stack+0x18/0x34
[   10.956431]  panic+0x160/0x30c
[   10.959485]  mount_block_root+0x180/0x234
[   10.963496]  mount_root+0x178/0x198
[   10.966984]  prepare_namespace+0x130/0x170
[   10.971081]  kernel_init_freeable+0x24c/0x290
[   10.975437]  kernel_init+0x28/0x12c
[   10.978927]  ret_from_fork+0x10/0x20
[   10.982503] SMP: stopping secondary CPUs
[   10.986709] Kernel Offset: 0x80000 from 0xffff800008000000
[   10.992192] PHYS_OFFSET: 0x40000000
[   10.995677] CPU features: 0x00002401,20000842
[   11.000031] Memory Limit: none
[   11.003086] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]--- 

如何重新分配未使用的 tmpfs 空间,以便它可以被 initramfs 使用?

  • 尝试增加 INITRAMFS_MAXSIZE、IMAGE_OVERHEAD_FACTOR
  • 尝试使用 IMAGE_ROOTFS_SIZE 和 IMAGE_ROOTFS_EXTRA_SPACE 增加空间
  • 尝试追踪 uboot 和内核配置中的空间限制,但没有成功
embedded-linux yocto u-boot initramfs
1个回答
0
投票

标记为已回答,因为我们已经修复了一段时间并且看起来效果很好。

我最终看到了以下博客文章https://www.lightofdawn.org/blog/?viewDetailed=00128(Sawdust在评论中链接了同一篇文章,谢谢Sawdust)

按照博客文章中的建议,我添加了一个额外的 u-boot bootarg“rootfstype=ramfs”,它允许我使用完整的空间。尽管此解决方案可能不适合生产系统,但它对于这个特定的测试版本来说效果非常好。

© www.soinside.com 2019 - 2024. All rights reserved.