本帖最后由 Tronlong创龙科技 于 2023-6-15 14:33 编辑
目录
1 评估板快速测试
1.1 系统启动测试
1.2 文件传送测试
1.2.1 通过Linux系统启动卡
1.2.2 通过OpenSSH
1.3 LED测试
1.4 按键测试
1.4.1 用户输入按键测试
1.4.2 CPU ON/OFF按键测试
1.5 时钟设置测试
1.6 DDR读写测试
1.7 MicroSD接口读写测试
1.8 eMMC读写测试
1.9 SPIFLASH读写测试
1.10 PCIe接口测试
1.10.1 SATA接口固态硬盘测试
1.10.2 M.2接口固态硬盘测试
前 言本案例适用开发环境:
Windows开发环境:Windows 7 64bit、Windows 10 64bit
虚拟机:VMware15.1.0
Linux开发环境:Ubuntu18.04.4 64bit
U-Boot:U-Boot-2020.04
Kernel:Linux-5.4.70
Linux SDK:5.4.70_2.3.0
进行操作前,请先按照调试工具安装、Linux开发环境搭建相关文档,安装SecureCRT串口调试终端、VMware虚拟机、Linux SDK等相关软件。
本文主要提供评估板的硬件资源测试方法。无特殊说明情况下,默认使用USB TO UART2作为调试串口,使用Linux系统启动卡启动系统,通过路由器与PC机进行网络连接。
本案例采用的评估版为创龙科技TLIMX8-EVM,它是一款基于NXP i.MX 8M Mini的四核ARM Cortex-A53 + 单核ARM Cortex-M4异构多核处理器设计的高性能评估板,由核心板和评估底板组成。ARM Cortex-A53(64-bit)主处理单元主频高达1.6GHz,ARM Cortex-M4实时处理单元主频高达400MHz。处理器采用14nm最新工艺,支持1080P60 H.264视频硬件编解码、1080P60 H.265视频硬件解码、GPU图形加速器。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。 评估板接口资源丰富,引出MIPI CAMERA、MIPI/LVDS LCD、HDMI OUT、LINE IN/OUT、PCIe、FlexSPI、USB、RS485、RS232、千兆网口、百兆网口等接口,板载WIFI模块,支持Mini-PCIe4G模块,可选配外壳直接应用于工业现场,方便用户快速进行产品方案评估与技术预研。
评估板正视图
1.1 系统启动测试接入电源,并使用Micro USB线连接PC机和评估板的USB TO UART2调试串口。打开设备管理器,确认评估板USBTO UART2调试串口对应的COM端口号。
图 1
图 2
打开串口调试终端SecureCRT,选择对应的COM端口号,设置波特率为115200,8N1,无校验位。建立串口连接,如下图所示。
将Linux系统启动卡插入评估板Micro SD卡槽,根据评估底板丝印将启动方式选择拨码开关拨为11100(1~5),此档位为SD卡启动模式。将评估板上电启动,串口终端会打印如下类似启动信息。
核心板LED在系统启动过程中的变化说明如下:
评估板上电后,电源指示灯LED0点亮;随后U-Boot第一阶段启动,LED1点亮;紧接着U-Boot第二阶段启动,LED2点亮;直到内核启动运行时,LED2熄灭,LED1进行心跳闪烁;eMMC进行读写时,LED2闪烁。
系统启动后会自动登录root用户,说明使用Linux系统启动卡启动评估板成功。
如需从eMMC启动评估板,请执行如下脚本命令一键固化Linux系统至eMMC。
Target# /opt/tools/mkemmcboot.sh
用时约5min,eMMC成功固化Linux系统,同时串口调试终端打印提示信息。将评估板断电,将Linux系统启动卡从评估板MicroSD卡槽中取出,根据评估底板丝印将启动方式选择拨码开关拨为00010(1~5),此档位为eMMC启动模式。
将评估板上电,评估板将从eMMC启动U-Boot,然后加载Linux内核、设备树和文件系统。
1.2 文件传送测试PC机和评估板之间传送文件的常见方式如下:
(1) 通过Linux系统启动卡、U盘等存储介质方式拷贝。
(2) 通过NFS、TFTP、OpenSSH等网络方式拷贝。
1.2.1 通过Linux系统启动卡将配套的系统启动卡插至PC机,然后把需要拷贝至评估板的文件拷贝至系统启动卡的BOOT分区,如下图所示。
将系统启动卡插至评估板,启动系统并执行如下命令查看分区信息。系统启动卡的BOOT分区挂载在评估板文件系统“/run/media/mmcblk1p1/”目录下。
Target# df -h
Target# ls /run/media/mmcblk1p1
1.2.2 通过OpenSSHOpenSSH是SSH(Secure Shell)协议的免费开源实现。SSH协议族可用来进行远程控制,或在计算机之间传送文件,评估板文件系统默认已支持SSH库。
在Ubuntu中执行如下命令,查询是否已安装OpenSSH。
Host# ssh -v
可看到系统已自带OpenSSH。如未安装,请先自行正确安装OpenSSH。
将评估板RGMII ETH网口通过网线连接至路由器。在评估板上执行如下命令可自动获取到IP,如下图所示。“-i”用于指定网卡,eth0为网卡名字,请根据实际情况修改。
Target# udhcpc -ieth0
执行如下命令可查询IP地址。本次查询到的IP地址是192.168.0.120。
Target# ifconfig
(1) 使用OpenSSH从PC机传送文件至评估板
执行如下命令在Ubuntu中新建文件test1,并使用OpenSSH命令将test1文件拷贝至评估板文件系统根目录。
Host# touch test1 //新建文件
如出现提示“Are you sure you want to continue connecting(yes/no)?”,请输入:yes。 在评估板上执行如下命令可看到从PC机拷贝过来的文件,如下图所示。
Target# ls /
(2) 使用OpenSSH从评估板传送文件至PC机
执行如下命令在评估板文件系统根目录新建一个测试文件test2。
Target# cd /
Target# touch test2
在Ubuntu上执行如下OpenSSH命令将评估板测试文件test2拷贝至PC机“/home/tronlong/test/”目录下。如传输的是文件夹,请在scp后面添加参数“-r”。
Host# ls /home/tronlong/test/
(3) 使用OpenSSH登录到评估板文件系统
在Ubuntu执行如下命令可通过OpenSSH登录评估板文件系统。
如需退出登录,请执行exit或者logout命令。
1.3 LED测试评估底板LED与GPIO对应关系如下表所示。
表 1
USER1 | USER2 |
GPIO2_20 | GPIO1_5 |
(1) 逐盏点亮LED
进入评估板文件系统,执行如下命令逐盏点亮、熄灭LED。
Target# echo 0 >/sys/class/leds/user-led0/brightness //控制USER1 LED灭
Target# echo 1 >/sys/class/leds/user-led0/brightness //控制USER1 LED亮
Target# echo 0 >/sys/class/leds/user-led1/brightness //控制USER2 LED灭
Target# echo 1 >/sys/class/leds/user-led1/brightness //控制USER2 LED亮
1.4 按键测试
1.4.1 用户输入按键测试评估板用户输入按键KEY3对应GPIO1_6。进入评估板系统,执行如下命令查看按键事件号。
Target# cat /proc/bus/input/devices
从上图中可看到按键事件号为event1,执行如下命令,按下KEY3进行按键测试,可看到如下打印信息。按“Ctrl + C”可终止测试命令。
Target# od -x /dev/input/event1
1.4.2 CPU ON/OFF按键测试评估板上电启动后,长按CPU ON/OFF按键5s,核心板两个用户指示灯与电源指示灯全灭,系统断电。再长按CPU ON/OFF按键1s,系统重新启动,串口调试终端将会打印如下类似启动信息。
1.5 时钟设置测试
Linux系统中分系统时钟(软件时钟)和RTC时钟(硬件时钟),系统时钟掉电即会消失,RTC时钟在安装电池的情况下会长期运行。
如需使用RTC时钟,请先安装纽扣电池。CON3为RTC纽扣电池座,适配纽扣电池ML2032(3V可充)、CR2032(3V不可充)。使用可充电电池时,请将跳线帽插入J1实现充电。使用不可充电电池时,请确保无跳线帽插入J1。
如下为时钟相关的常用命令。
(1) 查看系统时钟
Target# date
(2) 查看RTC时钟
Target# hwclock -u
Target# date -s "2021-03-1016:15:00" //设置时间:2021年3月10日16点15分00秒
Target# date
(4) 同步系统时钟到RTC时钟
Target# hwclock --systohc -u
Target# hwclock -u
(5) 同步RTC时钟到系统时钟
Target# hwclock --hctosys -u
1.6 DDR读写测试Linux系统启动时,在U-Boot的SPL阶段完成DDR的初始化,并打印DDR实际容量,如下图所示。
DDR读写速度受实际情况影响,测试速率以具体情况为准,如下测试数据仅供参考。
(1) DDR读速度测试
进入评估板系统,执行如下命令对DDR进行读速度测试。
Target#bw_mem 100M rd
测试从DDR中读取100MByte数据,可看到本次测试的读速度为2308.88MB/s。
(2) DDR写速度测试
进入评估板系统,执行如下命令对DDR进行写速度测试。
Target#bw_mem 100M wr
测试写入100MByte数据至DDR中,可看到本次测试的写速度为1357.81MB/s。
(3) DDR拷贝速度测试
进入评估板系统,执行如下命令对DDR进行拷贝速度测试。
Target#bw_mem 100M cp
测试拷贝100MByte数据至DDR中,可看到本次测试的拷贝速度为767.07MB/s。
1.7 Micro SD接口读写测试本小节使用SanDisk品牌、128GByte容量的Micro SD卡来测试评估板Micro SD接口性能。请参考《Linux系统启动卡制作及系统固化》文档将其制作成Linux系统启动卡再进行测试。不同的Micro SD卡以及不同的测试方法,对Micro SD接口测试结果将造成一定差异。
将Micro SD卡插入评估板Micro SD卡槽,启动方式选择拨码开关拨为00010(1~5),此档位为eMMC启动模式。进入评估板文件系统执行如下命令查看Micro SD卡挂载信息。
Target#df -h
(1) Micro SD接口写速度测试
进入评估板文件系统,执行如下命令测试Micro SD接口写速度。
Target# echo 3> /proc/sys/vm/drop_caches
Target# time dd if=/dev/zeroof=/run/media/mmcblk1p2/test bs=1024K count=200 conv=fsync
time命令有计时作用,dd用于复制,从if(input file)文件读出,写到of(output file)指定的文件,bs是每次写块的大小,count是读写块的数量。
“if=/dev/zero”不产生IO,即不断输出数据,可用来测试纯写速度。
此处一共写200MByte测试数据至Micro SD卡的test文件,可看到本次测试的Micro SD接口写速度约为58.7MB/s。
(2) Micro SD接口读速度测试
进入评估板文件系统,执行如下命令测试Micro SD接口读速度。
Target# echo 3> /proc/sys/vm/drop_caches
Target# time dd if=/run/media/mmcblk1p2/testof=/dev/null bs=1024K
“of=/dev/null”不产生IO,即不断接收数据,可用来测试纯读速度。
此处从test文件中一共读出200MByte的数据,可看到本次测试的Micro SD接口读速度为86.3MB/s。
1.8 eMMC读写测试需对eMMC设备进行分区后方可对其进行读写测试。评估板出厂时,默认已完成eMMC设备分区工作,执行如下命令可查看eMMC容量以及分区信息。
Target# dmesg |grep mmcblk0
其中boot分区在评估板文件系统挂载路径为“/run/media/mmcblk0p1/”,rootfs分区在评估板文件系统挂载路径为“/run/media/mmcblk0p2/”,执行如下命令可查看挂载情况。
Target# df -h
(1) eMMC写速度测试
进入评估板系统,执行如下命令对eMMC设备进行写速度测试。
Target# echo 3> /proc/sys/vm/drop_caches
Target# time dd if=/dev/zeroof=/run/media/mmcblk0p2/test bs=1024K count=200 conv=fsync
此处一共写200MByte测试数据至eMMC设备rootfs分区下的test文件,可看到本次测试的eMMC设备写速度为9.0MB/s。
(2) eMMC读速度测试
进入评估板系统,执行如下命令对eMMC设备进行读速度测试。
Target# echo 3> /proc/sys/vm/drop_caches
Target# time ddif=/run/media/mmcblk0p2/test of=/dev/null bs=1024K
此处从test文件中一共读出200MByte数据,可看到本次测试的eMMC设备读速度为171MB/s。
1.9 SPI FLASH读写测试本小节对评估板底板SPI FLASH的MTD0分区进行读写速度测试。MTD0分区大小为8MByte,读写测试会将该分区内容擦除,请做好数据备份。
执行如下命令加载驱动,查询SPI FLASH分区,确认MTD0分区大小(读写请勿超出分区大小),将该分区内容擦除。
Target# modprobe spi-nor
Target# cat /proc/mtd
Target# flash_erase/dev/mtd0 0 0
(1) SPI FLASH写速度测试
进入评估板系统,执行如下命令对SPI FLASH进行写速度测试。
Target# time dd if=/dev/zeroof=/dev/mtd0 bs=1024k count=8
测试写入8MByte数据至SPI FLASH的MTD0分区下,可看到本次测试的SPI FLASH写速度为369KB/s。
(2) SPI FLASH读速度测试
重启评估板,进入评估板系统,执行如下命令对SPI FLASH进行读速度测试。
Target# modprobe spi-nor
Target# cat /proc/mtd
Target# time dd if=/dev/mtd0 of=/dev/null bs=1024k
测试从SPI FLASH的MTD0分区读取8MByte数据,可看到本次测试的SPI FLASH读速度为1.4MB/s。
1.10 PCIe接口测试本章节分别通过PCIe接口读写SATA接口和M.2接口的固态硬盘,测试PCIe接口外接固态硬盘的读写带宽。
1.10.1 SATA接口固态硬盘测试本小节使用三星品牌、120GByte容量、FAT32格式的SATA接口SSD固态硬盘(以下简称“SATA硬盘”)测试。
评估板断电,将PCIe转SATA模块(品牌:乐扩,型号:IO-PCE9215-4I)插至评估板PCIe SLOT接口,并将SATA硬盘连接至PCIe转SATA模块。测试工具采用fio,fio工具将会清除SATA硬盘的数据,请注意备份数据,建议使用空硬盘进行测试。
评估板上电,执行如下命令查看是否检测到PCIe和SATA硬盘。
备注:若未能识别到SATA硬盘,请用SATA转USB线,将SATA硬盘连接到PC机查看是否已为FAT32格式。
Target# lspci
Target# fdisk -l
(1) SATA硬盘写速度测试
Target# fio -filename=/dev/sda -ioengine=libaio -iodepth=1 -iodepth_batch=1-iodepth_low=1 -iodepth_batch_complete=1 -direct=1 -rw=write -bs=1024K-size=1000M -numjobs=1 -thread -group_reporting -name=write_job -userspace_reap-ramp_time=1 -allow_mounted_write=1
备注:"/dev/sda"为本次的设备号,具体设备号可使用fdisk -l命令查看。
测试写入1000MByte数据至SATA硬盘中,可看到本次测试SATA硬盘写速度为283MB/s。
(2) SATA硬盘读速度测试
Target# fio-filename=/dev/sda-ioengine=libaio -iodepth=1 -iodepth_batch=1 -iodepth_low=1-iodepth_batch_complete=1 -direct=1 -rw=read -bs=1024K -size=1000M -numjobs=1-thread -group_reporting -name=read_job -userspace_reap -ramp_time=1
备注:"/dev/sda"为本次的设备号,具体设备号可使用fdisk -l命令查看。
测试从SATA硬盘中读出1000MByte数据,可看到本次测试SATA硬盘读速度为233MB/s。
1.10.2 M.2接口固态硬盘测试本小节使用西数数据SN550、FAT32格式、500GByte容量的M.2接口(NVMe协议)SSD固态硬盘(以下简称“M.2硬盘”)进行测试。
评估板断电,请将M.2硬盘插在PCIe转M.2模块(型号:绿联M.2 NVMe转PCI-E3.0X4扩展卡),然后将PCIe转M.2模块插至评估板PCIe SLOT接口。测试工具采用fio,fio工具将会清除M.2硬盘的数据,请注意备份数据,建议使用空硬盘进行测试。
备注:PCIe转M.2模块信号示意图仅供参考,并非模块的原理图。
评估板上电,执行如下命令查看是否检测到PCIe和M.2硬盘,并可看到插入的M.2硬盘设备节点为“/dev/nvme0n1”。
备注:若未能识别到M.2硬盘,请将M.2硬盘通过PCIe转M.2模块连接至PC机查看是否已为FAT32格式。
Target# lspci
Target# fdisk -l
(1) M.2硬盘写速度测试
Target# fio-filename=/dev/nvme0n1 -ioengine=libaio -iodepth=1 -iodepth_batch=1 -iodepth_low=1-iodepth_batch_complete=1 -direct=1 -rw=write -bs=1024K -size=1000M -numjobs=1-thread -group_reporting -name=write_job -userspace_reap -ramp_time=1-allow_mounted_write=1
备注:"/dev/nvme0n1"为本次的设备号,具体设备号可使用fdisk -l命令查看。
测试写入1000MByte数据至M.2硬盘中,可看到本次测试M.2硬盘写速度为332MB/s。
(2) M.2硬盘读速度测试
Target# fio -filename=/dev/nvme0n1 -ioengine=libaio -iodepth=1-iodepth_batch=1 -iodepth_low=1 -iodepth_batch_complete=1 -direct=1 -rw=read-bs=1024K -size=1000M -numjobs=1 -thread -group_reporting -name=read_job-userspace_reap -ramp_time=1
备注:"/dev/nvme0n1"为本次的设备号,具体设备号可使用fdisk -l命令查看。
测试从M.2硬盘中读出1000MByte数据,可看到本次测试M.2硬盘读速度为209MB/s。