界面烧录 — 不更新uboot
电脑连接WIFI(或者通过网线连接电脑与路由器), 通过浏览器访问路由器管理界面,进行升级。注意不要断电!!!(断电只能通过tftp方式恢复)
openwrt-ar71xx-generic-ap147-16M-squashfs-sysupgrade.bin
winscp ---- 不更新uboot
电脑连接WIFI(或者通过网线连接电脑与路由器),打开WinScp软件输入IP地址与账户密码(连接上可能是路由器没有打开TFTPD服务器,或者路由器没有设置初始登录密码,通过路由器管理页面设置登录密码)
make menuconfig
添加SFTP/FTP 方便winsc文件传输
Network --->
File Transfer --->
<*>vsftp
通过鼠标将升级文件拉到openwrt系统。(放在/tmp目录最好)
通过串口工具连接到openwrt主板
通过命令查看升级文件
通命令 sysupgrade -n xxx.bin (不保存配置文件)
等待烧录完成,然后自动重启(注意不要断电!!!)
tftp烧录 — 不更新uboot(一般在烧录中途断电导致根系统不完整或者编译固件和硬件不适配情况下使用这种方式)
通过串口工具连接路由器主板,上电时候uboot倒计时进入内核
查询主板相关信息
u-boot> printenv
bootargs=console=ttyS0,115200 root=31:02 rootfstype=squashfs init=/sbin/init mtdparts=spi0.0:256k(u-boot),64k(u-boot-env),14528k(rootfs),1472k(kernel),64k(art),16000k(firmware)
bootcmd=bootm 0x9F050000 || bootm 0x9FE80000
bootdelay=1
baudrate=115200
ipaddr=10.10.18.1
serverip=10.10.18.100
autoload=no
hostname=u-boot_zbt-we1526
bootfile=firmware.bin
loadaddr=0x80800000
ncport=6666
uboot_name=u-boot.bin
uboot_addr=0x9F000000
uboot_size=0x40000
uboot_upg=if ping $serverip; then tftpb $loadaddr $uboot_name && if itest.l $filesize <= $uboot_size; then erase $uboot_addr +$uboot_size && cp.b $loadaddr $uboot_addr $uboot_size && echo DONE! U-Boot upgraded!; else echo ERROR! File is too big!; fi; else echo ERROR! $serverip is not reachable!; fi
fw_addr=0x9F050000
fw_upg=if ping $serverip; then tftpb $loadaddr $bootfile && erase $fw_addr +$filesize && cp.b $loadaddr $fw_addr $filesize && echo DONE! Firmware upgraded!; else echo ERROR! $serverip is not reachable!; fi
recovery=if button; then sleep 600;setenv cnt 0;setenv stop_boot;echo Keep button pressed for at least:;echo - 3s for web based recovery;echo - 5s for U-Boot console;echo - 7s for network console;echo;while button && itest $cnt < 0xA; do ledon;sleep 300;echo . '\\c';sleep 300;ledoff;sleep 600;setexpr cnt $cnt + 1;done;echo 0x$cnt seconds;echo;if itest $cnt >= 0xA; then echo \#\# Error: 10s limit reached!;echo Continuing normal boot...;echo;elif itest $cnt >= 7; then echo Starting network console...;setenv stop_boot 1;echo;startnc;elif itest $cnt >= 5; then echo Starting U-Boot console...;setenv stop_boot 1;echo;elif itest $cnt >= 3; then echo HTTP server is starting for firmware update...;setenv stop_boot 1;echo;httpd;elif itest $cnt < 3; then echo \#\# Error: button was not pressed long enough!;echo Continuing normal boot...;echo;fi;setenv cnt;fi
stdin=serial
stdout=serial
stderr=serial
ethaddr=94:A4:08:EF:FC:C1
ethact=eth0
Environment size: 1910/64508 bytes
u-boot>
配置TFTPD服务器
主板与电脑通过网线直连方式下
首先配置电脑的IP地址 $serverip , 然后通过Tftpd工具创建服务器(一般自动识别,只要选择存放固件目录)
Tftpd工具设置
验证是否正常ping通电脑服务器(如果不能ping 通,大概率是防火墙拦截)
u-boot> ping 10.10.18.100
eth0 link down
enet1 port0 up
Using eth1 device
## Error: ping failed, host 10.10.18.100 is not alive!
u-boot>
关闭防火墙
u-boot> ping 10.10.18.100
Using eth1 device
Ping OK, host 10.10.18.100 is alive!
u-boot>
下载程序
通过查询主板相关信息 得到:升级步骤
fw_upg=
if
ping $serverip; ----> serverip=10.10.18.100
then
tftpb $loadaddr $bootfile ----> loadaddr=0x80800000 bootfile=xxxx.bin
erase $fw_addr +$filesize ----> fw_addr=0x9F050000 $filesize=文件大小(0x开头 注意+filesize是没有空格)
cp.b $loadaddr $fw_addr $filesize
echo DONE! Firmware upgraded!;
else
echo ERROR!
$serverip is not reachable!;
fi
tftpd下bin文件
得到升级命令:
tftpb 0x80800000 openwrt-ath79-generic-glinet_gl-mifi-squashfs-sysupgrade.bin
擦除固件地址
erase 0x9F050000 +0x4c032b
拷贝新固件到固件地址
cp.b 0x80800000 0x9F050000 0x4c032b
复位重启等待…
tftp 烧录uboot (建议通过flash方式烧录。先用Flash备份整个固件,然后再实验)
与tftp升级固件类似。
uboot_upg=
if ping $serverip; (能否ping通 $serverip=10.10.18.100)
then
tftpb $loadaddr $uboot_name ($loadaddr=0x80800000 xxxu-boot.bin )
if itest.l $filesize <= $uboot_size; (下载uboot.bin 大小 <= $uboot_size=0x40000)
then
erase $uboot_addr +$uboot_size (erase 0x9F000000 +0x40000 )
cp.b $loadaddr $uboot_addr $uboot_size (cp.b 0x80800000 0x9F000000 +0x40000 )
echo DONE!
U-Boot upgraded!;
else
echo ERROR!
File is too big!;
fi;
else
echo ERROR!
$serverip is not reachable!;
fi
Flash烧录固件
通过flash烧录器(建议买好点,如果自己生成wifi模块,因为涉及mac地址的滚码烧录)
通过串口输入ifconfig可以查询相关网卡信息(用于后面的flash读取出来mac存放内存地址查找)
QCA9531模组的Flash型号是华邦25Q128JV,用夹具把flash芯片夹好,然后通过flash配套工具进行操作
读取flash,然后保存(用于恢复设备,或者作为量产基础固件)
可以将flash读取的内容写入另外一个空白的flash中,然后将新的flash焊接回去,验证新烧录的flash是否正常工作(如果不能工作,请认真看看是否读取失败。或者本身设备对其运行代码进行加密)
bin文件手动修改相关mac地址(flash烧录器借朋友。没有高级功能自定义滚码)
利用hex操作软件(我使用的是UltraEdit),查找相应mac。 (记住:将读取的文件再拷贝一份来进行修改mac)
进行手动修改(将地址修改94A408EF10C1 94A408EF10C2 94A408EF10C0 )注意根据mac规则生成新的mac,我只改的第二位(偶数)。只为了验证mac。实际你们可以按申请到的mac( mac 关系访问外网)
进行写入flash
焊接flash,然后上电启动是否验证正常。如果自测无大问题交由测试进行更全面测试。
量产问题
wifi模块量产需要购买mac地址
思路:可以将已经验证测试没有问题的样机,拆卸flash芯片通过flash烧录器拷贝出来,通过ultraedit软件打开 bin文件 查询mac地址。然后配置flash烧录器滚码进行烧录。(如果量不大就自己手动烧录flash,或者交给flash厂家他们可以做滚码烧录)
进阶篇:OpenWrt网络优化,提升网络稳定性
上一篇:OpenWrt源码目录结构说明(QSDK)(二)
下一篇:OpenWRT 添加文件到源码及自启动配置 (四)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)