首先需要设置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.youkuaiyun.com/linglongqiongge/article/details/47087967
我们需要新建mtdblock设备,在内核里选择Caching block device access to MTD devices,
重新编译烧写。
开机后出现mtdblock 设备,再对其进行dd 或者 open ,read,write操作,均是可行的。
note:
MTD设备的一般不宜挂载fat,ext2,ext3等文件系统,挂载的文件系统容易出错,特别出现在断电重启时候。