mtd-utils 工具的使用

嵌入式Linux下mtd erase命令入门使用指南 深入浅出讲解嵌入式Linux环境下如何使用mtd工具集中的erase命令,清理MTD分区数据,是进行固件更新与闪存管理的关键操作,掌握erase用法至关重要。 阅读详情

一.下载源码包。
二.编译

1.修改Makefile 

CROSS=mipsel-linux-

2.make

3.将编译生成的可执行文件COPY到开发板上


三.命令的使用

使用命令前用cat /proc/mtd 查看一下mtdchar字符设备;或者用ls -l /dev/mtd*
#cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00c00000 00020000 "ROOTFS"
mtd1: 00200000 00020000 "BOOTLOADER"
mtd2: 00200000 00020000 "KERNEL"
mtd3: 03200000 00020000 "NAND ROOTFS partition"
mtd4: 04b00000 00020000 "NAND DATAFS partition"

为了更详细了解分区信息用mtd_debug命令

#mtd_debug info /dev/mtdX (不能使用mtdblockX, mtdblockX 只是提供用來 mount 而已)
mtd.type = MTD_NORFLASH
mtd.flags =
mtd.size = 12582912 (12M)
mtd.erasesize = 131072 (128K)
mtd.oobblock = 1
mtd.oobsize = 0
mtd.ecctype = (unknown ECC type - new MTD API maybe?)
regions = 0

 

 

命令:flash_erase
作用:擦出指定范围内flash的内容,如果不指定,默认擦出起始位置的第一块,使相应flash变为全1
用法:
flash_erase MTD-device [start] [cnt (# erase blocks)] [lock]
MTD-device:待擦出的分区,如/dev/mtd0
start:起始位置设置,这里必须设置为0x20000(128K)的整数倍
cnt: 从start开始计算,要擦出的块数
lock: 写保护                            
eg:  ./flash_erase /dev/mtd0 0x40000 5   //擦出mtd0分区上从0x40000开始的5块数据 ,128K/块

 

命令:flash_eraseall
作用:擦出整个分区的数据,同时也会作坏块检测
用法:
flash_eraseall [OPTION] MTD_DEVICE

-q, --quiet    不显示打印信息
-j, --jffs2    一jffs2 格式化分区

eg: ./flash_eraseall -j /dev/mtd0

 

命令:flashcp
作用:copy 数据到 flash 中
用法:
usage: flashcp [ -v | --verbose ] <filename> <device>
       flashcp -h | --help

filename:待写入的数据
device: 写入的分区,如/dev/mtd0

eg: 
 filename制作:mkfs.jffs2 -e 0x20000 -d cq8401 -o cq8401.img  -n  //这里的-e 0x20000 必须更你芯片的erasesize 相等
 
./flashcp cq8401.img /dev/mtd0  // copy cq8401.img文件系统到  /dev/mtd0分区中
当然这个命令的功能跟 dd if=/tmp/fs.img of=/dev/mtd0差不多

 

命令:nandwrite
作用:向nand flash中写数据
用法:
 nandwrite [OPTION] MTD_DEVICE INPUTFILE
  -a, --autoplace       Use auto oob layout
  -j, --jffs2           force jffs2 oob layout (legacy support)
  -y, --yaffs           force yaffs oob layout (legacy support)
  -f, --forcelegacy     force legacy support on autoplacement enabled mtd device
  -n, --noecc           write without ecc
  -o, --oob             image contains oob data
  -s addr, --start=addr set start address (default is 0)
  -p, --pad             pad to page size
  -b, --blockalign=1|2|4 set multiple of eraseblocks to align to
  -q, --quiet           don't display progress messages
      --help            display this help and exit
      --version         output version information and exit
   
eg: ./nandwrite -p /dev/mtd0  /tmp/rootfs.jffs2

 

命令:nanddump
作用:dump出nand flash一些信息,如:block size,erasesize,oobblock 大小,oob data ,page data等;同时也会作坏块检测
用法:
nanddump [OPTIONS] MTD-device
           --help               display this help and exit
           --version            output version information and exit
-f file    --file=file          dump to file
-i         --ignoreerrors       ignore errors
-l length  --length=length      length
-o         --omitoob            omit oob data
-b         --omitbad            omit bad blocks from the dump
-p         --prettyprint        print nice (hexdump)
-s addr    --startaddress=addr  start address

eg:./nanddump -p -f nandinfo.txt /dev/mtd0  //dump出nand flash /dev/mtd0数据并保存到 nandinfo.txt

 

命令:mtd_debug
作用: 对mtd 调试作用
用法:
usage: mtd_debug info <device>
       mtd_debug read <device> <offset> <len> <dest-filename>
       mtd_debug write <device> <offset> <len> <source-filename>
       mtd_debug erase <device> <offset> <len>

eg:
#./mtd_debug info /dev/mtd0  // 输出/dev/mtd0上的一些信息,这里必须用mtdx
#./mtd_debug erase /dev/mtd0 0x0 0x40000  // 擦出/dev/mtd0 分区上 从0x0开始的  , 128K*2 大小的数据
#./mtd_debug write /dev/mtdblock0 ox0 0x360810 cq8401.img //向mtdblock0分区,写入 3.6M 大小的文件系统cq8401.img,这里最好用mtdblockx
#./mtd_debug read  /dev/mtdblock0 ox0 0x360810 read.img  //从mtdblock0中读出 3.6M 数据保存到read.img
# cmp -l cq8401.img read.img  // 验证write to flash 和 read from flash 中的数据是否一致;也可以使用diff命令来比较

另外针对nand flash,mtd_debug这个工具来测试mtd驱动也不是很好,用nandwrite和nanddump这两个工具或许更好点。然后可以用cmp这个命令来比较一下nanddump出来的数据和nandwrite写入的数据是否一致。

 

命令:ftl_format
解释:In order to use one of conventional file systems (Ext2, ext3, XFS, JFS, FAT) over an MTD device, you need a software layer which emulates a block device over the MTD device. These layers are often called Flash Translation Layers (FTLs).

 

例一:如何测试nor flash 驱动
step1:
#./mtd_debug info /dev/mtd0  // 输出/dev/mtd0上的一些信息,这里必须用mtdx
step2:
#./mtd_debug erase /dev/mtd0 0x0 0x40000  // 擦出/dev/mtd0 分区上 从0x0开始的  , 128K*2 大小的数据
step3:

#./mtd_debug write /dev/mtdblock0 ox0 0x360810 cq8401.img //向mtdblock0分区,写入 3.6M 大小的文件系统cq8401.img,这里最好用mtdblockx

step4:
#./mtd_debug read  /dev/mtdblock0 ox0 0x360810 read.img  //从mtdblock0中读出 3.6M 数据保存到read.img,当然这里的长度应该相等

step5:
# cmp -l cq8401.img read.img  // 验证write to flash 和 read from flash 中的数据是否一致;也可以使用diff命令来比较

 


例二:如何测试nand flash 驱动

其实nand flash 驱动同样可以用例一的方法测试,但既然有nandwrite,nanddump命令,为何不用呢!


step1:
#./flash_eraseall -j /dev/mtd1        //用jffs2格式化该分区

step2:
#./nanddump -p  /dev/mtd1  //dump出nand flash /dev/mtd1数据,可以看到现在的数据全是ff

step3:
#./nandwrite -p   /dev/mtd1 cq8401.img  // 将cq8401.img文件系统写入mtd0分区

step4:
#./nanddump -p  /dev/mtd1  //dump出nand flash /dev/mtd1数据,可以看到现在的数据不再是全ff

 

例三:如何用mtd-util 工具向nand flash写入文件系统jffs2.img,并修改启动参数,使文件系统从nand flash 启动;假设已分好区,mtd0为文件系统分区

 方式一:
step1:
NFS起文件系统
#./flash_eraseall -j /dev/mtd0        //用jffs2格式化该分区

#./nandwrite -j -f -p -q /dev/mtd0 jffs2.img  // 将jffs2.img文件系统写入mtd0分区

step2:
然后再看看我们新写入的JFFS2文件系统能不能mount上.

#mount -t jffs2 /dev/mtdblock0 /mnt
#ls /mnt

setp3:
重启开发板,在U-BOOT里 设置启动参数
#setenv bootargs 'mem=64M console=ttyS0,115200n8 ip=192.168.4.201:::::eth0:off  root=/dev/mtdblock0 rootfstype=jffs2 rw'
#reset


方式二:

 

 NAND 起内核,NAND起文件系统
1. 网起文件系统
nerase 0 55 && nprog 0 192.168.4.200 n-boot.bin.hg && nprog 128 192.168.4.200 zImage-6pci && reset
2.进入网起的文件系统
 cat /proc/mtd

3. 制作JIFFS的文件系统
mkfs.jffs2 -e 0x20000 -d root-vw -o dvr20000.img  -n

4.
cp dvr20000.img /dev/mtdblock1

5.修改NAND BOOT启动参数 include/cq8401_board.h
修改NAND BOOT
setenv bootargs 'mem=64M console=ttyS0,115200n8 ip=192.168.4.201:::::eth0:off  root=/dev/mtdblock1 rootfstype=jffs2 rw'

6.  从新烧写
nerase 0 55 && nprog 0 192.168.4.200 n-boot.bin.local && nprog 128 192.168.4.200 zImage-6pci && reset

例四:
如何将一个 .tar.gz文件系统  写到 nor 或者 nand flash中
   target$ mkdir /mnt/flash    
   target$ mount -t jffs2 /dev/mtdblock0 /mnt/flash  (mtdblockx只是用来挂载的)
   target$ cd /mnt/flash
   target$ tar zxvf rootfs.tar.gz

 

Linux MTD子系统(一) MTD(Memory Technology Device)子系统(代表内存技术设备)为原始闪存设备提供了一个抽象层。 当使用不同的闪存类型和技术(例如NAND,OneNAND,NOR 等)时,可以使用相同的API。 阅读详情

相关推荐

基于mtd的nandflash的擦写nanderase与nandwrite

对于nand平台更新,我们有两个常用工具可用,一个是nanderase擦除的命令,一个是nandwrite写数据的命令,我们先了解一下nand的基本特性。     Nand flash只有一种操作,就是把1写为0,不能把0写为1,所以我们在写入之前,先要把所有的位置1,也就是擦除动作。Nand 擦除是以block块大小为最小单位,写入是以page页为最小单位。     由于工作需求,需要封装

csdn66_2016的博客 1万+

/proc/mtd 各个参数含义 -- linux内核

通过/proc虚拟文件系统读取MTD分区表:cat /proc/mtd mtd .name = raspi, .size = 0x00400000 (4M) .erasesize = 0x00010000 (64K) .numeraseregions = 0 Creating 6 MTD partitions on "raspi": 0x00000000-0x00400000 : "AL

《我是你的正能量》 2万+

移植mtd-utils工具包

移植mtd-utils工具包第一步:下载所需源码。链接具体如下:第二步:这里需要说明,在移植之前,需要有交叉编译器才可以进行,后续需要用到交叉编译器,必须安装才可以进行,第三步:将下载的三个压缩包,统一放到了ubuntu的目录下:/home/mtd_utils_make(这里我是放到了个人的目录下,放哪都可以,记住路径就可以)。第四步:解压三个压缩包:tar -xzvf mtd-utils-1.0.0.tar.gz tar -xzvf lzo-2.10.tar.gz tar -xzvf

qq_39721016的博客 2530

mtd_utils

mtd-utils移植与使用: https://blog.youkuaiyun.com/xjzlq/article/details/34445083 mtd和mtdblock的区别: https://blog.youkuaiyun.com/weixin_38239856/article/details/81006347 mtdN和mtdblockN描述的是同一个MTD分区,对应同一个硬件分区,两者的大小是一样的,只不过...

what, when, why, how... 435

mtd-utils交叉编译

由于制作的Busybox缺少ubiformat命令,然后自己移植mtd-utils,这里记录下: 环境:Ubuntu虚拟机19.04 mtd-utils依赖zlib、lzo、e2fsprogs提供的库和头文件: zlib: 1.2.11 http://www.zlib.net/ lzo: 2.10 http://www.oberhumer.com/opensource/lzo/do...

发呆健将的博客 3441

移植mtd-utils工具包--使用教程

移植mtd-utils工具包--使用教程 关于mtd-utils的移植,在Ubuntu Server 10.04平台上交叉编译,移植到嵌入式Linux,经过实践,以下是交叉编译的正确步骤,不保证在其他环境中能正确运行,以下是编译环境: build: Ubuntu Server 10.04 host: Linux version 2.6.32.15-15-sigma cross

gzshun 5771

mtd-utils工具的编译和使用

一、下载源码包并解压 root@:/home/# wget ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-1.0.0.tar.bz2 root@:/home/# wget http://www.zlib.net/zlib-1.2.3.tar.gz root@:/home/# wget http://www.oberhumer.com/open

xiaoaide01的专栏 1305

交叉编译mtd-utils工具链

/******************************************************  *  * 时间:      星期三, 八月 29, 2012 11:52:13  * 作者:      LvApp  *   * 使用环境  * PC:       ubuntu11.04  * board:    s3c6410  * cross:    arm-li

LvAppの嵌入式 5702

mtd-utils 工具安装及使用

mtd-utils 工具安装 1. 下载mtd_utils http://www.linux-mtd.infradead.org/ 2. 安装GCC yum install gcc 3. 安装编绎依赖: zlib-devel, lzo-devel, and libuuid-devel libacl-devel and zlib-devel autoconf 4. 编绎时configure不将ub...

flyingnosky的专栏 5607

【安徽理工大学】一文带你高分拿下计算机考研复试(85+的秘密)

一文带你高分拿下安徽理工大学计算机考研复试(85+的秘密)

猫天意的博客 1523

从零到一:Silvaco中跨导曲线的自动化脚本实现

本文详细介绍了如何使用Python脚本在Silvaco中实现跨导曲线(gm曲线)的自动化分析,包括数据加载、跨导计算和结果可视化。通过自动化处理Id-Vg曲线,显著提升半导体器件工程师的工作效率,特别适用于工艺优化和DOE分析。文章还提供了批量处理和关键参数提取的高级技巧,帮助工程师快速掌握Silvaco脚本开发。

nn3456的博客 567

交叉编译 mtd-utils

由于busybox 没有完全支持ubi相关的命令,只支持部分命令,例如 ubiformat 、ubinfo等命令没有支持。所以就需要自己移植完整ubi命令。

jun1428236219的博客 2934

【头歌实训:逆置顺序表】

根据提示,在右侧编辑器补充函数rev的代码,使用顺序表L的空间就地逆置L。},要求时间复杂度为O(n),空间复杂度为O(1)。第一行为顺序表逆置之前的元素。每个数据后一个空格。第二行为顺序表逆置之后的元素。每个数据后一个空格。本关任务:设计一个算法,将一个顺序表L的元素{a。第一行为顺序表中元素个数n。第二行为空格隔开的n个整数。开始你的任务吧,祝你成功!

guang_Lee的博客 998

从源码编译mtd-utils工具

The mtd-utils include mkfs.ubifs, and ubi utilities.  在ubuntu下面编译mtd-utils的两种方法(相信也可以用于其它发行版下): 方法一:   从git repository获取源代码,此编译为最近更新 1. get the source code of mtd-utils      git clone git://git.i

voice_shen的专栏 1万+

用AG9311芯片DIY一个多功能Type-C扩展坞:从原理图到PCB布局的保姆级指南

本文详细介绍了如何利用AG9311芯片DIY多功能Type-C扩展坞,涵盖从原理图设计到PCB布局的全过程。AG9311芯片作为高性价比的Type-C控制器,支持HDMI 2.0、USB 3.0、PD快充和千兆网口,适合硬件爱好者打造个性化扩展坞。文章还提供了调试技巧和进阶优化建议,帮助读者轻松完成项目。

weixin_42520909的博客 404

Windows版本Carla(含RoadRunner插件)源码安装+RoadRunner地图导入

通过跳转浏览器账号密码登录github,不要选择Fine-grained personal access tokens,在git clone时会显示非授权,也不要使用Windows凭据!核心指令:编译PythonAPI–make PythonAPI,,编译Server–make launch,封装”游戏“–make package。完成安装后,在已安装->2022版本右侧->更多->导入配置,选择配置文件(需将配置文件内容更新为手册内容,如下图)->详细信息,更新。不要修改版本,执行上面指令即可!

winnizap的博客 1467

mtd-utils工具的使用

在ubuntu 10.04上交叉编译编译 mtd-utils  ===================================================================================== 在写文章之前, 大概有两天时间在找mtd-utils的交叉编译资料, 经常找到的都是过时的, 或者版本很低, 或者需要改一堆的Makefile, 能不能

小小白 7462

MATLAB自动驾驶(1)——预构建场景库

MATLAB自动驾驶(1)——预构建场景库

Ucicorn Gundam的博客 3265
上一篇: NFS mount failed, reason given by server: Permission denied
下一篇: TI文件系统制作,和在线烧写与更新
萧山夜雨
博客等级 码龄24年 75粉丝 13原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值