嵌入式Linux之教你怎么使用uboot利用四个字母启动裸机程序

uboot启动裸机程序

    • 环境配置
      • 启动uboot
      • 配置网络
    • 下载并验证
    • 重点骚操作

环境配置

前文嵌入式Linux之快速体验imx6ull开发板已经介绍了怎么去往Alpha开发板上去烧写一个系统,而uboot则是这个系统的一部分,本文不会过多的介绍uboot,而只是简单地介绍在启动裸机程序中使用到的

启动uboot

通过串口连接Alpha开发板到电脑,打开串口终端并连接(我这里使用的是MobaXterm)复位开发板,按回车键,进入如下界面(这是uboot的启动界面)
嵌入式Linux之教你怎么使用uboot利用四个字母启动裸机程序_第1张图片

配置网络

输入以下命令

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通,
嵌入式Linux之教你怎么使用uboot利用四个字母启动裸机程序_第2张图片
二、检查电脑TFTP服务器是否开启
这里为了方便直接重启TFTP服务器

sudo service tftpd-hpa restart  

嵌入式Linux之教你怎么使用uboot利用四个字母启动裸机程序_第3张图片

下载并验证

使用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

下载成功如下图
嵌入式Linux之教你怎么使用uboot利用四个字母启动裸机程序_第4张图片
再使用go命令跳转到0x87800000这个地址上去就可以启动下载的程序了,命令如下

go 87800000

注:由于裸机程序一般都为死循环,所以要下载其他程序只能复位重新操作

重点骚操作

是不是感觉太复杂了,那我们就简化下载操作方式,设置环境变量“g”

setenv g 'tftp 87800000 my.bin;go 87800000'
saveenv

输入run g,就可以运行环境变量g中保存的指令,
嵌入式Linux之教你怎么使用uboot利用四个字母启动裸机程序_第5张图片
是的你没有看错只需要输入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寄存器中	 				*/

你可能感兴趣的:(Linux)