ぉ沙皮狗的忧伤 发表于 2021-3-12 12:15:07

tf卡压力测试

本帖最后由 ぉ沙皮狗的忧伤 于 2021-3-15 17:38 编辑

一、将启动方式改flash启动,并将文件系统存放至emmc中
1、烧录程序到flash中
2、emmc中创建分区
使用fdisk打开emmc设备,在我这里emmc在dev下面的设备名是mmcblk0,而tf卡在dev下面的设备名是mmcblk1

在命令行输入fdisk /dev/mmcblk0

a    可启动标志的切换
b    编辑“bsd disklabel”
c    切换dos兼容性标志
d    删除分区
l    列出已知的分区类型
n    添加新的分区
o    创建一个新的空DOS分区表
p    打印分区表
q    退出,不保存更改
s    创建一个新的空的Sun disklabel
t    不要更改分区的系统id
u    改变显示/进入单位
v    检查分区表
w    将表写入磁盘并退出
x    额外的功能(仅限专家)

先去打印分区表,创建一个大小2G的分区和一个6G分区,完成创建之后w保存

若想删除分区输入d就行,选择分区号,然后保存w


创建的那两个分区就出现了,p1分区存放boot包,p2分区存放文件系统

boot分区p1格式化成fat32格式,文件系统分区格式化成ext4分区


挂载/dev/mmcblk0p2分区到/mnt目录在

拷贝tf的boot分区中的rootfs.tar.gz到emmc的第二个分区中,并解压

断电,在boot界面倒计时进入boot菜单,烧录boot包到QSPI中

断电,拔出SD卡,将启动拨码开关拨到QSPI启动,在上电,在boot界面倒计时是敲回车进入boot菜单,按“q”进入命令行,


输入pri打印环境变量,在其中找到加载文件系统的方式,先找到qspiboot在其中找到mmc_rootfs_args,在mmc_rootfs_args中找到加载root的地方


由于我们的文件系统放在/dev/mmcblk0p2的分区中,所有要在环境变量里面对其进行修改,set修改后使用saveenv保存,使用pri打印一下并确认

断电重启

二、编写测试脚本
1、先将tf卡格式化成ext4格式,因为我们板卡无法判断tf卡是mmcblk0设备还是mmcblk1设备,所有我们在脚本里面手动指定,剩下的可以仔细看脚本
#!/bin/sh

#手动指定
SD_name=/dev/mmcblk1p1
SD_file=1.txt

#获取SD卡大小
SD_size=`df -h | grep $SD_name | awk '{print $2}' | awk -F"." '{print $1}'`



#获取挂载文件宮录
mount_file=`mount | grep $SD_name | awk '{print $3}'`

while [ "1" == "1" ]
do

      #新建指定大小的文件
      truncate -s 1000M $SD_file


      #测试读写速度
      touch $mount_file/abc.txt
      echo "write speed test"
      #date
      sync
      time dd bs=1M count=1000 if=/dev/zero of=$mount_file/abc.txt
      echo "read speed test"

      echo 3 > /proc/sys/vm/drop_caches

      #date
      sync
      time dd bs=1M count=1000 of=/dev/zero if=$mount_file/abc.txt
      rm $mount_file/abc.txt

      echo 3 > /proc/sys/vm/drop_caches

      echo write file
      #从SD卡读写文件,查看是否出错
      #每次拷贝大小为1G的数据到SD卡中,例如16G的SD卡就考16次
      for i in `seq 1 $SD_size`
      do
                cp ./1.txt $mount_file/$i.txt
                echo write $i.txt
                echo 3 > /proc/sys/vm/drop_caches
                              sync                                                               
      done                                 
                                             
      echo read file                                             
      #将SD卡中的数据读出来                                       
      for i in `seq 1 $SD_size`                                 
      do                                                         
                mv$mount_file/$i.txt ./
                echo read $i.txt         
                                                
                echo 3 > /proc/sys/vm/drop_caches                        
                                                                                 
                rm ./*.txt                                                         
                sync                                                               
      done                                    
                                                
      sleep 3                                 
done                           
三、执行脚本并测试由于为了更方便演示,故测试大小有1000M改为100M
使用dd测试读写速度,先判断tf卡实际内存大小,创建一个大小1000M的1.txt文件,例如16Gtf卡,实际内存大小是14.6G,故将1.txt拷贝14次到tf卡中,在读出来,并查看内核是否出现系统性的错误,若想做的更准确,则只需要在拷贝1.txt到tf卡之前记录一下md5值,拷过去读出来,对比md5值是否一致,不一致读写出错,可以私聊我,底下交流交流



代码在附件中

页: [1]
查看完整版本: tf卡压力测试