使用U-Boot从Flash上传固件

7
我有一个问题。我的系统是嵌入式Linux平台。我使用串口连接我的板子,可以访问U-Boot。
我需要通过控制台或以太网提取存储在闪存中的完整固件。似乎使用TFTP或串行(Kermit等)很容易下载,但将其上传到主机PC进行备份并不明显。
有人知道如何做到这一点吗?

正确的答案取决于您使用的U-Boot版本,内核是否能够完全看到闪存,以及根文件系统上是否安装了'mtd-utils'。例如,如果U-Boot将根文件系统从闪存加载到RAM磁盘并且内核没有闪存分区信息,可能是因为它未编译或未在dtb中提供或未在内核命令行中提供,则无法从用户空间复制闪存,可能也无法从U-Boot复制。 - Jonathan Ben-Avraham
u-boot有一个nand flash命令,似乎可以转储2k的flash。是否有任何工具可以运行此命令并下载完整的nand flash(即使速度较慢)?这是一字节一字节地复制闪存吗? - user3396423
2个回答

5
假设您正在使用NAND闪存和U-Boot 2013.07或类似版本:
  1. 使用nand info命令查看U-Boot检测到的每个NAND设备的设备名称、大小和擦除块大小
  2. 使用nand read命令将数据从NAND读入RAM。需要读入多少NAND数据取决于RAM的大小
  3. 如果有SD(MMC)驱动器,可以使用mmc write命令从RAM写入SD
  4. 如果有USB设备,则可以使用start usb扫描USB寻找大容量存储设备或者"ethernet"(即OTG)设备
  5. 如果start usb检测到一个大容量存储设备,则可以使用usb write命令将数据从RAM写入该设备
  6. 无法将数据从RAM传输到USB或以太网网络连接
  7. 使用md命令将任意大小的内存块的十六进制转储到串行线,然后使用某个程序将ASCII十六进制转换回二进制

2
在设备上使用了 md.b,在计算机上使用了 cut -b 12-58 | xxd -r -p,效果很好,感谢上帝 :-) - Abbafei
像这样调用 md.bmd.b 0x<offset> <length_in_bytes> - Abbafei

2
如果您愿意重新构建uboot并重新刷写板子,您可以通过选项CONFIG_CMD_TFTPPUT启用tftpput命令。(假设使用的是最新版本的uboot。)
如果不是这种情况,在嵌入式Linux中,您可以通过/dev/mtd*访问您的闪存(使用cat /proc/mtd查看分区)。您可以使用dd将分区复制到ramdisk文件中,然后使用cat将文件合并成一个单独的映像文件,最后使用ftpput将其发送到主机。(这假设您的嵌入式busybox已经构建了这些命令。)

TFTP会将U-Boot加载到RAM吗? - user3396423
不好意思,我不明白你的问题。 - DoxyLover

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接