【问题标题】:Is it possible: TFTP in u-boot to load root filesystem to SD card? (I don't want NFS)是否有可能:u-boot 中的 TFTP 将根文件系统加载到 SD 卡? (我不想要 NFS)
【发布时间】:2017-12-01 21:18:07
【问题描述】:

我知道我们可以使用 NFS,但我只是不想使用它。

(不想一直保持与 NFS 服务器的网络连接)。

  • 我知道我们可以在 u-boot 中使用 tftp 来加载内核和设备树!
  • 但是我们可以在u-boot中使用tftp下载root-filesystem,放到SD卡的正确分区,然后启动吗?
  • 如果是,该怎么做? (我用谷歌搜索,但没有找到答案)

谢谢, 杰瑞

【问题讨论】:

  • 我很确定 u-boot 的 tftp 命令只能读入 RAM - 然后您可以使用其他 u-boot 命令将其写入存储。您必须有足够的 RAM 来容纳整个东西,并且您必须知道要使用的适当 RAM 地址,以及要写入的存储设备上的适当位置 - 这些都无法笼统地回答。跨度>
  • “TFTP加载根文件系统”的思路在开发阶段不是也有用吗?我认为它应该已经实现了。
  • 问题表述过于模糊,即 rfs 是什么文件格式(图像、tar)? U-Boot 可以配置为具有 ext4 文件系统的文件写入功能,或将扇区写入 mmc 设备。但是没有焦油提取。您始终可以使用“standalone application”(本身可以使用 TFTP 下载)扩展 U-Boot 功能。
  • 具体的文件格式无关紧要:无论哪种格式有效,我都会使用那个格式!基本上我更喜欢“通过网络加载所有内容”,而不是插入/拔出 SD 卡读卡器。这是我的重点!
  • 然后创建一个 ext4 fs 的镜像,并使用 mmc 命令写入。但是为了测试内核,我更喜欢使用 initramfs:它被附加到内核中,因此内核 + initramfs 作为一个图像下载到目标。

标签: embedded-linux u-boot


【解决方案1】:

我在 uboot 中使用 TFTP 在我的内部 eMMC 上刷新我的 rootfs(用于调试目的)。情况和你差不多。

首先在你的 RAM 中下载文件系统:

tftpboot ${rootfs_addr} ${tftppath}/${rootfs_file}
  • rootfs_addr 将是 RAM 地址,我使用 0x10800000。
  • tftppath 是 TFTP 路径(取决于您的配置)
  • rootfs_file 是 ext4 或 ext3 文件

然后更新mmc设备(可以运行mmc list显示SD u-boot号)

mmc dev 2

这里我设置设备为2号,你需要设置对应mmc list命令。

然后将RAM的内容写入SD:

setexpr rootfsblksz ${filesize} / 200 
setexpr rootfsblksz ${rootfsblksz} + 1 
mmc write ${rootfs_addr} 6000 ${rootfsblksz}

说明:

  • 我创建了一个rootfsblksz 变量,它将下载的字节数转换为块数。 filesize是我们使用TFTP时自动设置的,它代表最后下载的文件的大小(以字节为单位)。 这里我的块是 512Bytes (0x200)
  • 我在块大小上加了 +1(确保拥有所有数据)
  • 我将它写在 eMMC(或 SD)上,地址为 0x6000(块)-> 24 576 块-> 12 582 912(字节)-> 12MB,因为我的 ext 分区位于 12MB 偏移处

希望对你有帮助!

【讨论】:

  • 感谢 Pierre 的详细说明,效果非常棒!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多