Linux 读取NAND闪存并将其写入另一个系统
我有一个嵌入式系统,我想读取它的nand闪存,然后将它写回另一个系统的nand闪存。我可以访问设备上运行的Linux系统的根目录。该系统基于AM3874,我也可以访问它的JTAG。 我的问题是: 1-我可以以root用户身份登录系统并将nand闪存数据写入SD卡,然后一个新系统将其写回nand闪存吗 2-如果以上问题的答案是肯定的,我需要什么程序和软件Linux 读取NAND闪存并将其写入另一个系统,linux,embedded,arm,jtag,Linux,Embedded,Arm,Jtag,我有一个嵌入式系统,我想读取它的nand闪存,然后将它写回另一个系统的nand闪存。我可以访问设备上运行的Linux系统的根目录。该系统基于AM3874,我也可以访问它的JTAG。 我的问题是: 1-我可以以root用户身份登录系统并将nand闪存数据写入SD卡,然后一个新系统将其写回nand闪存吗 2-如果以上问题的答案是肯定的,我需要什么程序和软件 3-如果回答为否,我是否可以使用JTAG接口读取NAND闪存并将其写入另一个设备 您可以在Linux中使用dd命令读取第一个系统上的设备。在目标
3-如果回答为否,我是否可以使用JTAG接口读取NAND闪存并将其写入另一个设备 您可以在Linux中使用
dd
命令读取第一个系统上的设备。在目标系统上,您需要在写入NAND闪存之前卸载NAND闪存上的所有文件系统。您可以完全从ramfs或SD卡上的文件系统运行吗?如果您能够卸载它,dd
应该允许您将内容写回
如果可能,在使用dd
复制NAND之前,您可能希望卸载源系统上的NAND,这样您就不会复制活动文件系统
你只需要复制文件吗?如果是这样,从第一台设备创建tarball并在另一台设备上解包是否是一种选择?您可以在Linux中使用
dd
命令在第一个系统上读取设备。在目标系统上,您需要在写入NAND闪存之前卸载NAND闪存上的所有文件系统。您可以完全从ramfs或SD卡上的文件系统运行吗?如果您能够卸载它,dd
应该允许您将内容写回
如果可能,在使用dd
复制NAND之前,您可能希望卸载源系统上的NAND,这样您就不会复制活动文件系统
你只需要复制文件吗?如果是这样,是否可以从第一个设备创建tarball并在另一个设备上解包?您可以使用命令将整个设备或分区复制到文件中 例如:
dd if=/dev/mtd/mtd4 of=/mnt/sdcard/system.img bs=4096
类似于将文件复制到设备的方法
编辑:
当然,这只适用于在linux中具有设备驱动程序的NAND闪存
如果在闪存中安装了文件系统,则可以使用fd
或mount
命令查找正确的设备名称。这样:
~ # 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
~ #
您可以使用命令将整个设备或分区复制到文件中 例如:
dd if=/dev/mtd/mtd4 of=/mnt/sdcard/system.img bs=4096
类似于将文件复制到设备的方法
编辑:
当然,这只适用于在linux中具有设备驱动程序的NAND闪存
如果在闪存中安装了文件系统,则可以使用fd
或mount
命令查找正确的设备名称。这样:
~ # 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闪存?你真的需要询问你的硬件供应商,或者其他了解它的人。这个东西没有通用的框架。@User1:谢谢。在您的示例中,您是如何发现/dev/rot是nandflash系统的?@mans:例如,我只是复制了根文件系统“/”。系统中可以有多个NAND或NOR闪存设备。如果想要的数据位于挂载点/foo/bar后面,则对挂载到该点的设备使用dd。如果设备由内核中的mtd驱动程序处理,则这是正确的。然而,并不是所有的闪存芯片都是这样暴露的。引导存储之类的东西在gpio线上挂有一个单独的编程接口,这需要特定于板的工具,这并不少见。我如何才能找到哪个设备是我的nand闪存?你真的需要询问你的硬件供应商,或者其他了解它的人。这个东西没有通用的框架。@User1:谢谢。在您的示例中,您是如何发现/dev/rot是nandflash系统的?@mans:例如,我只是复制了根文件系统“/”。系统中可以有多个NAND或NOR闪存设备。如果所需数据位于挂载点/foo/bar后面,则对挂载到该点的设备使用dd。