一、准备工作
1.在Ubuntu系统中进入u-boot的文件根目录,编译出一个新的ARM环境下的u-boot.imx文件,这里笔者使用自己编写的脚本mx6ull_fire_emmc.sh文件进行编译,脚本的内容如下图所示:
操作步骤如下图所示:
2.编译成功后uboot的根目录会生成一些新的文件,从中找到u-boot.imx文件并拷贝到tftp文件目录中,如下图所示:
3.进入ftfp文件目录找到拷贝的u-boot.imx文件赋予最高权限,如下图所示:
4.使用一块Linux开发板,连接好串口(能够打印出Linux系统信息的串口)和网线(能够在uboot命令控制界面下ping通的网口,笔者使用的是开发板和网线直连的方式),重启Linux开发板后进入uboot命令控制界面。查看开发板的ip地址和服务器的ip地址(即Ubuntu系统的ip地址),如下图所示:
5.如果显示的ip地址不在同一个网段或者没有对应的信息显示,可以按照下图所示做相应的设置:
首先,查看服务器也就是Ubuntu系统的ip地址(通常手动设置成指定的ip地址)
根据服务器的ip地址在uboot命令控制界面设置对应的ip地址,具体设置命令如下所示:
1 setenv ipaddr 192.168.1.50
2 setenv ethaddr 00:04:9f:04:d2:35
3 setenv gatewayip 192.168.1.1
4 setenv netmask 255.255.255.0
5 setenv serverip 192.168.1.110
6 saveenv
ipaddr是开发板设置的ip地址;
serverip是服务器(Ubuntu系统)的IP地址;
ethaddr 为网络 MAC 地址,是一个 48bit 的地址,如果在同一个网段内有多个开发板的话一定要保证每个开发板的ethaddr不同。
uboot的环境变量设置完成后,使用ping命令去ping一下服务器ip地址检查是否正常,正常情况如下图所示:
以上准备工作完成后即可进行下面的阶段。
二、更新SD卡中的uboot
1.这里笔者要更新的是SD卡中的uboot,首先在uboot命令控制界面输入下面命令查看mmc有效的设备:
1 mmc list
笔者的开发板的Flash是EMMC,同时支持SD卡,因此会显示两个有效设备,具体信息如下图所示:
显示的有效设备信息中,0是指SD卡,1是指EMMC。
接着输入下面命令切换设备到SD卡,
1 mmc dev 0
最后输入“version”命令查看当前SD卡中的uboot信息为以后对照。
2.为了确认切换设备成功可以使用下面的命令查看当前选择的设备信息:
1 mmc info
笔者使用的SD卡是2G的存储空间,注意SD块的大小为512个字节,具体信息如下图所示:
3.使用下面的命令从服务器(Ubuntu系统)下载新的uboot到指定的0x80800000为起始地址DRAM中。
1 tftp 80800000 u-boot.imx
如果下载成功会显示如下图信息:
4.新下载的uboot的大小为424960个字节,从前面的信息我们知道SD卡每个块的大小为512个字节,那么将会占用424960/512=830个块,用16进制表示就是0x33E。使用下面的命令从SD卡分区0第2个块开始烧写新的uboot,千万不要写SD卡或者EMMC的前两个块(扇区),里面保存着分区表!
1 mmc write 80800000 2 33E
写入SD成功后如下图所示:
5.重启开发板(设置SD卡启动),使用“version”命令再次查看uboot信息,对比之前的信息SD卡中uboot的日期发生了变化,说明新的uboot写入成功,具体信息如下图所示:
三、更新EMMC中的uboot
1.和SD卡类似,如果要在uboot中更新EMMC对应的uboot可以使用如下命令:
1 mmc dev 1 0 /*切换到EMMC的分区0*/
2 tftp 80800000 u-boot.imx /*下载u-boot.imx到DRAM中的指定地址中*/
3 mmc write 80800000 2 33E /*烧写u-boot.imx到EMMC中*/
4 mmc partconf 1 1 0 0 /*分区配置*/
5
千万不要写EMMC的前两个块(扇区),里面保存着分区表!