uboot移植结束后,需要进行测试。
1、烧录程序
1)、将STM32MP157开发板的网络接口与路由器的网络接口通过网线连接起来。
2)、将开发板的串口和电脑通过USB线连接起来。
3)、将开发板的USB OTG接口和电脑通过USB线连接起来。
4)、将开发板上拨码开关拨到“000”位置。
5)、给开发板上电。
6)、准备烧录文件
①、tf-a-stm32mp157d-atkserialboot.stm32,是我们移植TF-A得到的。
②、tf-a-stm32mp157d-atk-trusted.stm32,是我们移植TF-A得到的。
③、uboot.stm32,是我们移植uboot得到的。
④、atk-image-bootfs.ext4,借用正点原子的,文件路径:D:\Linux安装\08、系统镜像\08、系统镜像\02、出厂系统镜像\01、STM32CubeProg烧录固件包\atkimage-bootfs.ext4。
⑤、tf-a.tsv,FlashLayout文件(脚本文件),见下面的路径:
系统镜像\02、出厂系统镜像\01、STM32CubeProg烧录固件包\flashlayout\ atk_emmc-stm32mp157d-atk-qt.tsv,需要将这个文件重命名为“tf-a.tsv”。
将上述文件拷贝到“C:\Program Files\STMicroelectronics\images\my-tfa”
见下图:
7)、使用“Notepad++”软件打开“tf-a.tsv”;
点击“视图”,“显示符号“, “显示空格与制表符”,修改后保存,见下图如下:
8)、打开“STM32CubeProgrammer”
9)、点击“Connect”
10)、点击“Open file”,得到下图:
11)、选择“tf-a.tsv”,点击“打开”,点击“Browse”,选择“my-tfa”文件,然后点击“Download”,见下图:
12)、将开发板断电,将拨码开关设置为010,再上电。
13)、等串口输出“Hit any key to stop autoboot: 1”,需要立即按下“回车健”,得到下图
2、测试开发板网络连接
1)、使用网线将STM32MP157开发板上的网络接口与电脑或者路由器连接起来;
2)、使用串口设置“网络地址环境变量”
已知虚拟机网络参数:
虚拟机IP地址:“192.168.2.180”
虚拟机网关:“192.168.2.1”
虚拟机子网掩码:“255.255.255.0”
开发板的“网络地址环境变量”设置如下:
setenv ipaddr 192.168.2.178 //开发板“IP地址”
setenv ethaddr 00:04:9f:04:d2:36 //开发板网卡“MAC地址”,48位
setenv gatewayip 192.168.2.1 //开发板默认网关
setenv netmask 255.255.255.0 //开发板子网掩码
setenv serverip 192.168.2.180 //服务器地址,也就是“Ubuntu地址”
saveenv
见下图操作:
3)、测试开发板网络连接
输入“ping 192.168.2.180”,见下图操作:
3、测试USB OTG设备
1)、输入“ums 0 mmc 1”
注意:正点原子STM32MP157开发板只有一个USB OTG接口,它可以用作USB SLAVE,对应的索引为0,所以ums后面跟的是0,mmc后面跟的是1,表示将EMMC挂载到“虚拟机”上,同理:ums 0 mmc 0表示将TF卡挂载到虚拟机上。
见下图操作:
2)、查看虚拟机桌面是否有U盘图标,见下图:
注意:在虚拟机上发现磁盘bootfs,说明USB OTG工作成功。
3)、双击“bootfs”,得到下图:
4)、结束U盘挂载,在串口输入“CTRL+C键”,见下图操作:
- 查询是否使能“boot”和“bootd”命令
输入:“? boot”
输入:“? bootd”
见下图:
如果串口上出现上述信息,表示开发板使能了“boot”命令。
“boot”和“bootd”执行的是同一个函数。
5、从EMMC启动Linux
1)、输入“ext4ls mmc 1:2”,查看EMMC的分区2;
EMMC的分区2中存放了15个文件:
boot.scr.uimg
lost+found,这是一个文件夹;
mmc0 extlinux,这是一个文件夹;
mmcl extlinux,这是一个文件夹;
stm32mp157d-atk.dtb,这是移植uboot时,生成的“.dtb”设备树文件;
stm32mp157d-atk-hdmi.dtb,这是“.dtb”设备树文件;
stm32mp157d-atk-mipi.dtb,这是“.dtb”设备树文件;
stm32mp157d-atk-spdif.dtb,这是“.dtb”设备树文件;
uInitrd,是initialized RAM disk的缩写,启动时存在于内存的文件系统;
alientek 1024x600.bmp,这是一个图片文件,用来测试LCD能否显示;
alientek 1280x800.bmp,这是一个图片文件,用来测试LCD能否显示;
alientek 480x272.bmp,这是一个图片文件,用来测试LCD,适合我的开发板;
alientek 800x480.bmp,这是一个图片文件,用来测试LCD能否显示;
uImage,这是uboot专用的映像文件;
5.4.31-gca8f6cddb,这是Linux文件
其中比较重要的就是4个“.dtb设备树文件”和Linux内核的“uImage镜像文件”。
2)、设置bootcmd 环境变量,从EMMC里面读取系统文件:
出现“STM32MP>”时输入:
setenv bootcmd 'ext4load mmc 1:2 c2000000 uImage;ext4load mmc 1:2 c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000'
出现“STM32MP>”时输入: saveenv
出现“STM32MP>”时输入: boot
6、从网络启动Linux
1)、检查是否安装“NFS服务”和“SSH服务”。
2)、记得前面曾经在“linux”目录下创建过一个“nfs”的文件夹,这个是用来供nfs服务器使用。
使用tftp从ubuntu中下载“Image”和“.dtb设备树文件”;
将“Linux镜像文件”和“Linux根文件系统”放到ubuntu下的tftp中;
设置Linux从网络启动。
这样不需要频繁烧写EMMC,每次重新编译Linux内核或某个Linux驱动后,就可以使用“cp命令”,将其文件拷贝到这个指定的文件夹即可,加快了开发速度,方便了调试。
STM32MP> setenv bootcmd 'tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000'
STM32MP> saveenv
STM32MP> boot
设置好以后,uboot 先从tftp服务器下载uImage和stmm32mp157d-atk.dtb这两个文件,然后启动。
7、LCD测试
从EMMC中读取“alientek_800x480.bmp”,保存到内存C0000000地址处。
1)、输入“mmc dev 1回车”,切换到EMMC设备
2)、输入“ext4ls mmc 1:2回车”查看“EMMC分区2”有哪些文件和目录,
其中alientek_800x480.bmp符合当前开发测试
3)、输入“ext4load mmc 1:2 C2000000 alientek_800x480.bmp回车”,将EMMC分区2中的alientek_800x480.bmp读到内存C2000000地址处;
4)、输入“bmp info c2000000回车”,显示图片信息;
5)、输入“bmp display c2000000 0 0回车”,显示 bmp;
至此,uboot测试完成。