mtd分区和mtdblock创建

首先需要设置uboot的传入参数,以下为我使用的参数:

"mtdparts=spi32766.0:240K(uboot)ro,16k(dtb)ro,2560k(kernel)ro,64k(param),-(rootfs) root=31:04 rw rootfstype=jffs2"

这里添加param 分区拿来自己使用。这里64k(param),64k为大小param为名称。

mtd的权限修改:

64k(param)rw,提示出错 ->  mtd: bad character after partition (r)
64k(param)ro,为只读模式,无法进行写操作。
64k(param) ,为读写模式

开机后显示4个分区:

mtd0   mtd1   mtd2   mtd3 

但是在使用dd操作的时候无法写入数据。

我们需要的是mtdblock块设备,
两者区别,网上搜索:
/dev/mtdx和/dev/mtdblockx 是同一个MTD分区的两种不同应用描述,操作上是有区别的

/dev/mtdN设备
/dev/mtdN 是MTD架构中实现的mtd分区所对应的字符设备(将mtd设备分成多个区,每个区就为一个字符设备),其里面添加了一些ioctl,支持很多命令,如MEMGETINFO,MEMERASE等。
mtd-utils中的flash_eraseall等工具,就是以这些ioctl为基础而实现的工具,实现一些关于Flash的操作。比如,mtd 工具中 flash_eraseall中.
/dev/mtdblockN设备
/dev/mtdblockN,是Flash驱动中用add_mtd_partitions()添加MTD设备分区,而生成的对应的块设备。MTD块设备驱动程序可以让flash器件伪装成块设备,实际上它通过把整块的erase block放到ram里面进行访问,然后再更新到flash,用户可以在这个块设备上创建通常的文件系统。
而对于MTD块设备,MTD设备层是不提供ioctl的实现方法的,也就不会有对应的MEMGETINFO命令之类,因此不能使用nandwrite,flash_eraseall,flash_erase等工具去对/dev/mtdblockN去进行操作。
源地址 :http://blog.csdn.net/linglongqiongge/article/details/47087967

我们需要新建mtdblock设备,在内核里选择Caching block device access to MTD devices,
重新编译烧写。
这里写图片描述

开机后出现mtdblock 设备,再对其进行dd 或者 open ,read,write操作,均是可行的。

note:
MTD设备的一般不宜挂载fat,ext2,ext3等文件系统,挂载的文件系统容易出错,特别出现在断电重启时候。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值