通过 fdisk -l 命令可以查询到 eMMC 分区信息及容量。
root@myir-yg2lx:~# fdisk -l
Disk /dev/mtdblock0: 512 KiB, 524288 bytes, 1024 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mtdblock1: 256 KiB, 262144 bytes, 512 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mtdblock2: 256 KiB, 262144 bytes, 512 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mtdblock3: 16 MiB, 16777216 bytes, 32768 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/mmcblk0: 7.29 GiB, 7818182656 bytes, 15269888 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x326d86a0
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 20480 122879 102400 50M c W95 FAT32 (LBA)
/dev/mmcblk0p2 122880 15269887 15147008 7.2G 83 Linux
我拿到的开发板是8G的eMMC固态硬盘,共有两个分区:
/dev/mmcblk0p1 :用来存放 kernel 和 dtb 文件
/dev/mmcblk0p2 :用来存放文件系统
这里/dev/mmcblk0p1 起始在 20480 块开始,前面还保存着 bootloader 和分区表的信息。
通过 df 命令可以查询到 eMMC 分区信息,使用情况,挂载目录等信息。
root@myir-yg2lx:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 6.8G 1.5G 5.0G 23% /
devtmpfs 235M 0 235M 0% /dev
tmpfs 428M 0 428M 0% /dev/shm
tmpfs 428M 9.9M 419M 3% /run
tmpfs 428M 0 428M 0% /sys/fs/cgroup
tmpfs 428M 0 428M 0% /tmp
tmpfs 428M 36K 428M 1% /var/volatile
tmpfs 86M 0 86M 0% /run/user/0
/dev/mmcblk0p1 50M 23M 27M 46% /mnt
性能测试主要测试 eMMC 在 linux 系统下对文件的读写速度,一般结合 time 与 dd双命令进行测试。
root@myir-yg2lx:~# time dd if=/dev/zero of=tempfile bs=1M count=100 conv=fdatasnc
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 4.20636 s, 24.9 MB/s
real 0m4.287s
user 0m0.009s
sys 0m0.643s
使用 dd 命令写文件时,需要加 conv=fdatasync 参数,表示当 dd 写 N 次结束之后,会 flush cache 同步到磁盘。因为对磁盘的写一般是先写到缓存还没有写到磁盘就返回了。这里测试出写磁盘速度为 24.9MB/s。
在嵌入式系统中,经常需要测试系统文件读写性能,读文件时忽略 cache 的影响。这时可以指定参数 iflag=direct,nonblock。
root@myir-yg2lx:~# time dd if=tempfile of=/dev/null bs=1M count=100 iflag=direc,nonblock
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 2.28087 s, 46.0 MB/s
real 0m2.286s
user 0m0.008s
sys 0m0.090s
从上面的数据我们看到,从磁盘直接读取速度为46MB/s.
更多回帖