【问题标题】:Reading NAND flash and writting it to another system读取 NAND 闪存并将其写入另一个系统
【发布时间】:2012-10-24 18:49:03
【问题描述】:

我有一个嵌入式系统,我想读取它的 nand flash 并将其写回另一个系统的 nand flash。我可以访问在设备上运行的 Linux 系统的根目录。该系统基于 AM3874,我也可以访问它的 JTAG。 我的问题是:

1- 我可以通过以 root 身份登录系统并将 nand flash 数据写入 SD 卡,然后一个新系统将其写回 nand flash 来执行此操作吗?

2- 如果上述问题的答案是肯定的,我需要什么程序和什么软件?

3- 如果答案是否定的,我可以使用 JTAG 接口读取 NAND Flash 并将其写入另一个设备吗?

【问题讨论】:

    标签: linux embedded arm jtag


    【解决方案1】:

    您可以使用dd 命令将整个设备或分区复制到文件中。

    例子:

    dd if=/dev/mtd/mtd4 of=/mnt/sdcard/system.img bs=4096
    

    您可以将文件复制到设备的类似方法。

    编辑:

    这当然只适用于您的 linux 中具有设备驱动程序的 NAND 闪存。

    如果您在闪存中挂载了文件系统,那么您可以使用fdmount 命令来查找正确的设备名称。这样:

    ~ # df
    Filesystem           1K-blocks      Used Available Use% Mounted on
    /dev/root                53504     13580     39924  25% /
    tmpfs                    25600        68     25532   0% /tmp
    /dev/mmcblk0p1           77077     67089    722524  92% /mnt/test
    
    ~ # dd if=/dev/root of=/mnt/test/root.img bs=4096
    13376+0 records in
    13376+0 records out
    
    ~ # ls -l /mnt/test/root.img
    -rw-r--r--    1 root     root     54788096 Oct 26 13:17 /mnt/test/root.img
    ~ #
    

    【讨论】:

    • 如果设备由内核中的 mtd 驱动程序处理,这是正确的。然而,并非所有闪存芯片都以这种方式暴露。像引导存储这样的东西有一个单独的编程接口挂在某个需要特定于板的工具的 gpio 线上的情况并不少见。
    • 如何找到我的nand flash是哪个设备?
    • 您确实需要询问您的硬件供应商,或者其他知道这件事的人。这些东西没有通用框架。
    • @User1:谢谢。在您的示例中,您是如何发现 /dev/rot 是 nandflash 系统的?
    • @mans :例如,我只是复制根文件系统“/”。您的系统中可能有多个 NAND 或 NOR 闪存设备。如果想要的数据位于挂载点 /foo/bar 后面,则使用 dd 作为挂载到该点的设备。
    【解决方案2】:

    您也许可以在 Linux 中使用dd 命令来读取第一个系统上的设备。在目标上,您需要先卸载 NAND 闪存上的所有文件系统,然后再将其写出。您可以完全从 ramfs 或 SD 卡上的文件系统运行吗?如果您能够卸载它,dd 应该允许您将内容写回。

    如果可能,您可能希望在使用 dd 复制之前卸载源系统上的 NAND,这样您就不会复制实时文件系统。

    您只需要复制文件吗?如果是这样,是否可以从第一个设备创建一个 tarball 并在另一个设备上解压缩它?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 2015-06-16
      • 2012-11-22
      相关资源
      最近更新 更多