公司让我给自己用来开发NVR的板子做一个文件系统,只给我了一个板子和一个hi3531 SDK 开发包,,这可苦了我,我对硬件了解甚少,于是一顿恶补.由于一直在看Linux的书,所以对SDK的学习还算快速,不几天文件系统做出来个样子,虽然是根据各处来的文档拼凑的,也感觉差不了多少了,现在想往板子上刷一刷了.然后学tftp用来刷板子,可是刷了几下板子就挂了,开始还能用tftp恢复回来,后来直接恢复不了了,听主管说要用fastboot,立马打起精神搞一搞.可是搞了好久还是不行.后来遇到高人指点,终于对fastboot算是了解透彻了,一定要根据我的理解狠狠总结一下(文档上讲的很清楚的就不细讲了).
工具;我用的是 Hi3531 SDK 自带的 FastBoot 3.1(BVT)
fastboot有3种模式:burn by partition, burn by adress, burn fastboot,下面分别介绍
burn by partition,根据下方的提示框中的内容可以发现它的实现原理其实也是tftp,只不过变成了一个tftp的工具,还可以保存xml的配置文件,用起来应该算方便了许多呢.
burn by adress,根据16进制(HEX)地址刷,这个没怎么用.
burn fastboot, 这个应该是板子里本来没有uboot的时候用的,也应该算是fastboot核心的用法了.我一开始就是用的这个,但是不知道写的文件应该是uboot,所以一直没反应,好纠结啊.
在刷板子之前要先备份一下板子上flash的内容,
1、配置tftp服务器
# 可以使用任意的tftp服务器,将package/image_uclibc(或image_glibc)下的相关文件拷贝到tftp服务器目录下。
测试tftp服务69端口是否开启, 使用命令
netstat -nlp|grep 69
2、参数配置
# 单板上电后,敲任意键进入u-boot。设置serverip(即tftp服务器的ip)、ipaddr(单板ip)和ethaddr(单板的MAC地址)。
setenv serverip xx.xx.xx.xx
setenv ipaddr xx.xx.xx.xx
setenv ethaddr xx:xx:xx:xx:xx:xx
setenv netmask xx.xx.xx.xx
setenv gatewayip xx.xx.xx.xx
ping serverip,确保网络畅通。
setenv ipaddr 192.168.0.133;setenv serverip 192.168.0.233;setenv ethaddr 00:16:17:30:C9:17;
setenv netmask 255.255.255.0;setenv gatewayip 192.168.0.1
备份16M spi flash
mw.b 0x81000000 0xff 0x1000000; sf probe 0; sf read 0x81000000 0 0x1000000;tftp 0x81000000 hi3531_spiflash_image_16M_bak14.3.4 0x1000000
进入uboot模式,查看uboot参数
hisilicon # printenv
baudrate=115200
bootfile="uImage"
jpeg_addr=0x80000000
jpeg_size=0x20000
vobuf=0x8f000000
bootdelay=3
gatwayip=192.168.0.1
filesize=3C818C
fileaddr=82000000
bootargs=mem=128M console=ttyAMA0,115200 root=1f04 root