测试uboot命令,搭建nfs服务器和tftp服务器,是测试uboot非常关键的一步。跳过这一节,后面可能要踩坑。
一、输入“help回车”,查询uboot所支持的命令
二、输入“? bootz回车”,查询“bootz”怎么用
注意:和boot一样,用来启动 Linux 系统的。
三、常用的查询命令
1、输入“? bdinfo回车”,查询“bdinfo”怎么用
输入“bdinfo回车”,查询“开发板的信息”
2、输入“printenv回车”,打印环境变量
3、输入“version回车”,打印uboot当前的版本号
四、输入“reset回车”,设置开发板重启
五、输入“? setenv回车”,查询“setenv”怎么用
六、修改环境变量,setenv和saveenv是成对出现的
见下图:
七、新建环境变量
输入“setenv author 'console=ttySTM0,115200 root=/dev/mmcblk2p2 rootwait rw'回车”
输入“saveenv回车”,保存新建环境变量“author”,及其值。
输入“reset回车”,重启开发板
八、输入“printenv回车”,打印环境变量
九、删除环境变量
输入“setenv author回车”,将“author”设置为空值,就可以删除环境变量
输入“saveenv回车”,保存新建环境变量“author”,及其值。
输入“reset回车”,重启开发板
输入“printenv回车”,打印环境变量
十、内存操作命令
1、显示指定内存地址的值
输入“? md回车”,查询md的用法
注意:在uboot里,所有的数据为16进制。
输入“md.b C0100000 14回车”,查询内存首地址为“0xC0100000”开始处的20个字节;
输入“md.w C0100000 A回车”,查询内存首地址为“0xC0100000”开始处的20个字节;
输入“md.l C0100000 5回车”,查询内存首地址为“0xC0100000”开始处的20个字节;
2、修改指定内存地址的值
输入“? nm回车”,查询“nm”的用法
使用nm将内存地址为c0100000处的4个字节修改为12345678,然后再改回原来的值。
3、输入“? mm回车”,查询“mm”的用法
修改指定地址的内存值,和“nm用法”不同的地方是:它修改内存数据后,内存的地址会自动增加。
使用mm将内存地址为c0100000处的4个字节修改为12345670,然后再改回原来的值。
4、使用“一个数据”填充“指定内存起始地址”的一段内存
使用mw将内存地址为c0100000处的12个4字节修改为“0A0A0A0A”。
十一、清除命令cls
在调试串口按回车,会一直执行“上次执行的命令”,为了取消,可以输入“cls”清除“上次执行的命令”;
输入cls就可以清除“自动执行上条命令”
十二、数据拷贝命令cp
将内存首地址为“C0100000”处的12个4字节数据拷贝到内存首地址为“C0100030”处
十三、比较两段内存的数据是否相等CMP
十四、网络操作命令
1、输入“ifconfig”查询虚拟机的IP地址,加下图:
2、将开发板的USB串口连接好,打开串口调试,设置网路变量
输入“setenv ipaddr 192.168.2.178回车”,设置开发板的IP地址为“192.168.2.178”
输入“setenv ethaddr 00:04:9f:04:d2:36回车”,设置开发的MAC地址为“00:04:9f:04:d2:36”
输入“setenv gatewayip 192.168.2.1回车”,设置网关地址为“192.168.2.1”
输入“setenv netmask 255.255.255.0回车”,设置子网掩码为“255.255.255.0”
输入“setenv serverip 192.168.2.180回车”,设置ubuntu主机的IP地址为“192.168.2.180”
输入“saveenv回车”,保存环境变量
3、输入“dhcp回车”,路由器获分配IP地址给开发板
十五、搭建nfs服务器
nfs命令功能:使用uboot中的nfs命令将ubuntu中的文件下载到开发板的DRAM内存中;其次是用来从ubuntu下载内核镜像uImage和设备树。
uImage文件路径为08、系统镜像\08、系统镜像\02、出厂系统镜像\03、linux-mp1-5.4.31-gca8f6cddb-v1.7 。
stm32mp157d-atk.dtb文件路径为08、系统镜像\08、系统镜像\02、出厂系统镜像\03、linux-mp1-5.4.31-gca8f6cddb-v1.7 。
1、将uImage文件发送到虚拟机“zgq/linux/nfs”目录下
2、输入“ls回车”,列出“nfs”目录下的文件和文件夹
3、输入“nfs C2000000 192.168.2.180:/home/zgq/linux/nfs/uImage回车”从服务器下载uImage,保存到内存首地址为“C2000000”
十六、在ubuntu上搭建TFTP服务器
tftp命令功能:用来从ubuntu下载内核镜像uImage和设备树。
1、安装 tfp-hpa 和 tfpd-hpa,输入“sudo apt-get install tftp-hpa tftpd-hpa回车”
2、输入“mkdir tftpboot回车”,创建“tftpboot”目录
3、输入“chmod 777 /home/zgq/linux/tftpboot回车”,给tftpboot赋可执行权限,非常重要;
配置“tftp”创建“/etc/xinetd.d”目录
输入“cd /etc/回车”
输入“sudo mkdir xinetd.d回车”
输入“ls回车”
4、输入“sudo vi tftp回车”,新建一个tftp文件
server tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /home/zgq/linux/tftpboot/
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
5、按“ESC健”,再输入“:wq回车”,保存文件。
6、输入“sudo service tftpd-hpa start回车”,启动tftp服务器
7、输入“sudo vi /etc/default/tftpd-hpa回车”
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/zgq/linux/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-1 -c -s"
8、按“ESC健”,再输入“:wq回车”,保存文件。
9、输入“sudo service tftpd-hpa restart回车”,重启“tftp服务器”
至此,“tftp服务器”搭建好了。
十七、使用tftp从ubuntu下载文件
1、将“uImage”拷贝到“tftpboot”目录下
输入“cd nfs/回车”
输入“cp uImage /home/zgq/linux/tftpboot/回车”
2、输入“chmod 777 uImage回车”,给uImage赋可执行权限
3、在串口输入“tftp C2000000 uImage回车”,将uImage下载到内存地址为C2000000地址处,实现从ubuntu下载文件,见下图:
十八、EMMC和SD卡操作命令
1、输入“mmc info回车”,查询SD卡的信息
2、查询EMMC信息
输入“mmc rescan回车”,扫描mmc
输入“mmc list回车”,列出mmc设备
输入“mmc dev 1回车”,切换到EMMC设备
输入“mmc info回车”查看EMMC信息
3、查看EMMC分区
输入“mmc dev 1回车”,切换到EMMC设备
输入“mmc part回车”,查看EMMC分区
4、读EMMC
输入“mmc dev 1回车”,切换到EMMC
输入“mmc read c0000000 400 10回车”
从EMMC的第1024(0x400)个块开始,读取16(0x10)个块的数据到DRAM的0XC0000000地址处。
十九、EXT格式文件系统操作命令
1、查询EXT4格式设备的目录和文件信息
输入“mmc dev 1回车”,切换到EMMC设备
输入“mmc info回车”查询EMMC信息
2、输入“mmc part回车”查看EMMC分区
输入“ext4ls mmc 1:2”查看“boot分区”有哪些文件和目录
3、将EMMC中的uImage文件读到DRAM中
输入“ext4load mmc 1:2 C2000000 uImage回车”,将EMMC分区2中的uImage读到内存C2000000地址处。
4、将ubuntu中的uImage文件烧写到EMMC中,生成文件为“test_uImage”
输入“mmc dev 1回车”,切换到EMMC设备
输入“tftp C0000000 uImage回车”,使用tftp将uImage下载到内存C0000000的地址处。
输入“ext4write mmc 1:2 C0000000 /test_uImage 7ef8a0回车”
输入“ext4ls mmc 1:2回车”查看“boot分区”有哪些文件和目录
见下图:
二十、使用网络下载uImage和设备树stm32mp157d-atk.dtb到内存再启动linux
1、使用FileZilla将uImage和设备树stm32mp157d-atk.dtb上传到tftpboot目录下,见下图:
2、给uImage和stm32mp157d-atk.dtb赋可执行权限,非常重要;
输入“ls回车”,列出tftpboot目录下的文件和文件夹
输入“chmod 777 uImage回车”
输入“ls回车”,列出tftpboot目录下的文件和文件夹发现uImage变成了可执行文件;
输入“chmod 777 stm32mp157d-atk.dtb回车”
输入“ls回车”,列出tftpboot目录下的文件和文件夹,发现stm32mp157d-atk.dtb变成了可执行文件;
3、输入“tftp C2000000 uImage回车”,将uImage下载到DRAM中的C2000000地址处;
输入“tftp C4000000 stm32mp157d-atk.dtb回车”,将设备树下载到DRAM中的C4000000地址处;
4、输入“bootm c2000000 - c4000000回车”启动linux内核
二十一、从EMMC直接启动linux
输入“mmc dev 1回车”,切换到EMMC
输入“ext4ls mmc 1:2回车”查看“boot分区”是有uImage和stm32mp157d-atk-dtb
输入“ext4load mmc 1:2 c2000000 uImage回车”,将EMMC中的uImage文件加载到内存地址C2000000处
输入“ext4load mmc 1:2 c4000000 stm32mp157d-atk.dtb回车”,将EMMC中的stm32mp157d-atk.dtb文件加载到内存地址C4000000处
输入“bootm c2000000 - c4000000回车”启动linux内核
二十二、通过设置环境变量bootcmd的值,从EMMC启动linux系统
开发板上电,运行TF-A,然后是uboot,然后是bootcmd
出现“STM32MP>”时输入setenv bootcmd 'ext4load mmc 1:2 c2000000 uImage;ext4load mmc 1:2 c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000',设置从EMMC启动linux系统
出现“STM32MP>”时输入: saveenv,保存bootcmd的值
出现“STM32MP>”时输入: boot回车,启动 Linux 系统
二十三、通过设置环境变量bootcmd的值,从网络启动linux系统
出现“STM32MP>”时输入setenv bootcmd 'tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 -c4000000',设置从网络启动linux系统
出现“STM32MP>”时输入: saveenv,保存bootcmd的值
出现“STM32MP>”时输入: boot,启动 Linux 系统
二十四、run命令
1、输入“setenv mybootemmc 'ext4load mmc 1:2 c2000000 uImage;ext4load mmc 1:2 c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000'回车”
输入“saveenv回车”,保存创建的mybootemmc环境变量;
输入“run mybootemmc回车”,设置从EMMC启动linux。
输入“boot回车”,启动 Linux 系统;
2、输入“setenv mybootnet 'tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000'回车”
输入“saveenv回车”,保存创建的mybootnet环境变量;
输入“run mybootnet回车”,从网络启动linux。
输入“boot回车”,启动 Linux 系统;