本帖最后由 ぉ沙皮狗的忧伤 于 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值是否一致,不一致读写出错,可以私聊我,底下交流交流 
 
 
 
 
代码在附件中 
 
 |