1、mtd* 和 mtdblock* 的区别
1)/dev/mtd* 是linux MTD架构中,系统自己实现的mtd分区对应的字符设备,其内部添加了ioctl,支持很多命令,如MEMGETINFO、MEMERASE等;
2)/dev/mtdblock* 是nand flash驱动中,使用add_mtd_paritions()添加的MTD设备分区,为块设备;
3)# ls /dev/mtd* -l
crw------- 1 root root 90, 0 Jan 1 00:00 /dev/mtd0
crw------- 1 root root 90, 1 Jan 1 00:00 /dev/mtd0ro
crw------- 1 root root 90, 2 Jan 1 00:00 /dev/mtd1
crw------- 1 root root 90, 3 Jan 1 00:00 /dev/mtd1ro
brw------- 1 root root 31, 0 Jan 1 00:00 /dev/mtdblock0
brw------- 1 root root 31, 1 Jan 1 00:02 /dev/mtdblock1
#
4)对每个mtd字符设备的操作,比如nandwrite命令操作mtd0,其本质也是操作mtdblock0
2、mtd-util中的flash_eraseall、flashcp等工具,是以ioctl为基础生成的工具,所以其操作的mtd_device,只能是mtd* ,不能用mtdblock* ;
3、按字符设备(mtd*)操作需要对齐,按块设备操作不需要对齐;
一般块操作为:挂载文件系统或者dd命令