MTD设备学习,挂载,读写,分区查看
MTDMemory Technology Device,内存技术设备/dev/mtdN字符设备,支持ioctl,MEMGETINFO,MEMERASE等,mtd-utils(用于进行mtd操作的工具集,包含flash_eraseall等工具)就是以此实现的。mtd字符设备主设备号90。/dev/mtdblockN块设备,可以在块设备上创建文件系统,不提供ioctl方法,无法使用nandwrite,
MTD
Memory Technology Device,内存技术设备
/dev/mtdN
字符设备,支持ioctl,MEMGETINFO,MEMERASE等,mtd-utils(用于进行mtd操作的工具集,包含flash_eraseall等工具)就是以此实现的。mtd字符设备主设备号90。
/dev/mtdblockN
块设备,可以在块设备上创建文件系统,不提供ioctl方法,无法使用nandwrite,flash_eraseall,flash_erase等工具进行操作。mtd块设备主设备号31。只读块设备。貌似无法通过dd来写入。
实际上mtdN和mtdblockN是一个MTD分区,只是提供给上层的视图不同,因为mount、umount命令只能挂在块设备(有文件系统),mtd-utils工具(flash_erase等)只能通过字符设备来交互。
常用命令 - 挂载信息
mount
类似/proc/mounts
,下面有
rootfs on / type rootfs (rw)
/dev/root on /mnt/.cramfs type cramfs (ro,relatime)
/dev/mmcblk1p1 on / type ext2 (rw,noatime,errors=continue)
proc on /proc type proc (rw,relatime)
ramfs on /tmp type ramfs (rw,relatime)
sysfs on /sys type sysfs (rw,relatime)
usbfs on /proc/bus/usb type usbfs (rw,relatime)
mdev on /dev type tmpfs (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,mode=600)
/dev/mmcblk1p3 on /mnt/mmcblk1p3 type vfat (ro,relatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)
/proc/partitions
查看mtd块设备的大小,一个block是1KB:cat /proc/partitions
major minor #blocks name
31 0 4608 mtdblock0
31 1 2176 mtdblock1
31 2 64 mtdblock2
31 3 64 mtdblock3
31 4 64 mtdblock4
31 5 512 mtdblock5
31 6 64 mtdblock6
31 7 64 mtdblock7
31 8 8192 mtdblock8
31 9 64 mtdblock9
31 10 320 mtdblock10
179 0 3866624 mmcblk1
179 1 250480 mmcblk1p1
179 2 250488 mmcblk1p2
179 3 1000440 mmcblk1p3
179 4 1953504 mmcblk1p4
/etc/fstab
预先写好的挂载文件,开机后按自动该文件挂载目录。
# <file system> <mount pt> <type> <options> <dump> <pass>
none /proc proc defaults 0 0
none /dev/pts devpts defaults 0 0
none /sys sysfs defaults 0 0
none /dev/shm tmpfs defaults 0 0
none /proc/bus/usb usbfs defaults 0 0
# these are for read-only root:
none /tmp tmpfs defaults,mode=1777 0 0
none /var/run tmpfs defaults 0 0
/dev/mtdblock3 /mnt/rootdata cramfs defaults 0 0
# writable flash
mtd:spi_jffs2 /mnt/rwflash jffs2 defaults 0 0
mtd:spi_reserve /mnt/mpflash jffs2 defaults 0 0
# writable overlays
/mnt/rwflash/config /etc/config none defaults,bind 0 0
/mnt/rwflash/mail /etc/mail none defaults,bind 0 0
/mnt/rwflash/snmp /etc/snmp none defaults,bind 0 0
none /root tmpfs defaults,mode=1777 0 0
none /sys/kernel/debug debugfs defaults 0 0
pvgnas02:/users /home nfs noauto,tcp,soft,intr,nolock 0 0
/proc/mtd
查看mtd设备分区情况:cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00010000 "spi_boot"
mtd1: 001c0000 00010000 "spi_kernel"
mtd2: 01100000 00010000 "spi_root"
mtd3: 00b80000 00010000 "spi_rootdata"
mtd4: 00090000 00010000 "spi_jffs2"
mtd5: 000d0000 00010000 "spi_reserve"
mtd6: 00020000 00010000 "spi_bootenv"
/proc/mounts
查看当前分区的挂载情况
rootfs / rootfs rw 0 0
/dev/root / cramfs ro,relatime 0 0
none /proc proc rw,relatime 0 0
none /dev tmpfs rw,relatime 0 0
/tmpfs /mnt/rwflash tmpfs rw,relatime 0 0
/dev/mtdblock4 /mnt/rwflashphy jffs2 rw,relatime 0 0
none /dev/pts devpts rw,relatime,mode=600 0 0
none /sys sysfs rw,relatime 0 0
none /dev/shm tmpfs rw,relatime 0 0
none /proc/bus/usb usbfs rw,relatime 0 0
none /tmp tmpfs rw,relatime,mode=1777 0 0
none /var/run tmpfs rw,relatime 0 0
/dev/mtdblock3 /mnt/rootdata cramfs ro,relatime 0 0
mtd:spi_reserve /mnt/mpflash jffs2 rw,relatime 0 0
/tmpfs /etc/config tmpfs rw,relatime 0 0
/tmpfs /etc/mail tmpfs rw,relatime 0 0
/tmpfs /etc/snmp tmpfs rw,relatime 0 0
none /root tmpfs rw,relatime,mode=1777 0 0
none /sys/kernel/debug debugfs rw,relatime 0 0
df -h -T
查看已经挂载的分区和文件系统类型
Filesystem Size Used Available Use% Mounted on
/dev/root 22.8M 22.8M 0 100% /
/dev/mtdblock4 576.0K 288.0K 288.0K 50% /mnt/rwflashphy
/dev/mtdblock3 11.2M 11.2M 0 100% /mnt/rootdata
mtd:spi_reserve 832.0K 244.0K 588.0K 29% /mnt/mpflash
mountpoint
判断当前目录是否为挂载点
选项:
-q:不打印任何信息;
-d:打印文件系统的主设备号和次设备号;
-x:打印块数设备的主设备号和次设备号。
fdick -l
显示出所有挂载和未挂载的分区,但不显示文件系统类型。
Disk /dev/mtdblock0: 4 MB, 4718592 bytes
255 heads, 63 sectors/track, 0 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/mtdblock0 doesn't contain a valid partition table
Disk /dev/mtdblock10: 0 MB, 327680 bytes
255 heads, 63 sectors/track, 0 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/mtdblock10 doesn't contain a valid partition table
parted -l
查看未挂载的文件系统类型,以及哪些分区尚未格式化。
lsblk -f
查看未挂载的文件系统类型。
常用命令 - MTD操作
flash_erase
用于清除设备中的块
flash_erase MTD-device [start] [cnt (# erase blocks)] [lock]
flash_eraseall
擦除指定设备上的所有块
Usage: flash_eraseall [OPTION] MTD_DEVICE
Erases all of the specified MTD device.
-j, --jffs2 format the device for jffs2
-q, --quiet don't display progress messages
--silent same as --quiet
--help display this help and exit
--version output version information and exit
flashcp
向指定的设备写文件,与dd命令不同,对坏块是安全的,提供了许多错误检测属性
BusyBox v1.19.3 (2017-04-19 10:54:20 CST) multi-call binary.
Usage: flashcp -v FILE MTD_DEVICE
Copy an image to MTD device
-v Verbose
nandwrite
用于把文件写入nand flash
nandwrite [OPTION] MTD_DEVICE [INPUTFILE|-]
读取与写入
读取
通过cat读取(通过网络发送走了):cat /dev/mtdblock2 | nc 192.156.13.235 5555
通过dd读取(未验证):dd if=/dev/mtdblock2 | nc 192.168.1.30 5555
写入
写入命令:flashcp -v /var/run/viewer/media/folder/sda4/mtd2new /dev/mtd2 2>&1
效果:
Erasing block: 148/148 (100%)
Writing kb: 9432/9440 (99%)
Verifying kb: 9432/9440 (99%)
参考链接
更多推荐
所有评论(0)