前文嵌入式Linux之快速体验imx6ull开发板已经介绍了怎么去往Alpha开发板上去烧写一个系统,而uboot则是这个系统的一部分,本文不会过多的介绍uboot,而只是简单地介绍在启动裸机程序中使用到的
通过串口连接Alpha开发板到电脑,打开串口终端并连接(我这里使用的是MobaXterm)复位开发板,按回车键,进入如下界面(这是uboot的启动界面)
输入以下命令
setenv ipaddr 192.168.0.119
setenv ethaddr 00:04:9f:04:d2:35
setenv gatewayip 192.168.0.1
setenv netmask 255.255.255.0
setenv serverip 192.168.0.110
saveenv
首先说一下setenv命令它是设置环境变量的
第一行是设置当前设备的IP地址为:192.168.0.119
第二行是设置当前设备的MAC地址为:00:04:9f:04:d2:35
第三行是设置当前网关的IP地址为:192.168.0.1(你路由器的IP)
第四行是设置的是子网掩码:255.255.255.0
第五行是设置服务器IP:就是你的电脑的IP,为了之后从电脑上下载bin文件
第六行的saveenv是保存设置的环境变量
设置完成之后就能从电脑上下载裸机程序了,这里使用的是TFTP服务器,之前也已经在内置ubuntu中安装了,在下载程序之前还有两件是要做,
一、要ping一下电脑的IP能不能ping通,
二、检查电脑TFTP服务器是否开启
这里为了方便直接重启TFTP服务器
sudo service tftpd-hpa restart
使用tftp命令下载bin文件,是否还有人记得Makefile中的这两行代码
注:一定要关闭I,DCache和MMU的程序才能使用此方法启动裸机程序
zk:$(TARGET).bin
cp $(TARGET).bin /home/linux/linux/tftpboot/my.bin
这是我自己添加的一个指令,这里就是为了方便下载
直接输入下面的命令就会把my.bin文件下载到板子的0x87800000地址上去
tftp 87800000 my.bin
下载成功如下图
再使用go命令跳转到0x87800000这个地址上去就可以启动下载的程序了,命令如下
go 87800000
注:由于裸机程序一般都为死循环,所以要下载其他程序只能复位重新操作
是不是感觉太复杂了,那我们就简化下载操作方式,设置环境变量“g”
setenv g 'tftp 87800000 my.bin;go 87800000'
saveenv
输入run g
,就可以运行环境变量g中保存的指令,
是的你没有看错只需要输入run g
就可以运行裸机程序了(这里是下载的串口的例程)
重启之后只需要进入uboot输入run g
即可运行裸机程序
注:如果要使用uboot启动裸机程序必须关闭I,DCache和MMU ,下面是关闭I,DCache和MMU的汇编代码
/* 关闭I,DCache和MMU
* 采取读-改-写的方式。
*/
mrc p15, 0, r0, c1, c0, 0 /* 读取CP15的C1寄存器到R0中 */
bic r0, r0, #(0x1 << 12) /* 清除C1寄存器的bit12位(I位),关闭I Cache */
bic r0, r0, #(0x1 << 2) /* 清除C1寄存器的bit2(C位),关闭D Cache */
bic r0, r0, #0x2 /* 清除C1寄存器的bit1(A位),关闭对齐 */
bic r0, r0, #(0x1 << 11) /* 清除C1寄存器的bit11(Z位),关闭分支预测 */
bic r0, r0, #0x1 /* 清除C1寄存器的bit0(M位),关闭MMU */
mcr p15, 0, r0, c1, c0, 0 /* 将r0寄存器中的值写入到CP15的C1寄存器中 */