openwrt tftp 升级软件的方法

来源:互联网 发布:复杂网络应用于博弈 编辑:程序博客网 时间:2024/05/29 06:41
1.升级前需要知道的知识
硬件接上串口,启动的时候不断的按任意键进入uboot模式,用printenv命令查看环境
ath> printenv
bootargs=console=ttyS0,115200 root=31:02 rootfstype=jffs2 init=/sbin/init mtdparts=ath-nor0:256k(u-boot),64k(u-boot-env),14528k(rootfs),1408k(uImage),64k(mib0),64k(ART)
bootcmd=bootm 0x9fe80000
bootdelay=2
baudrate=115200
ethaddr=0x00:0xaa:0xbb:0xcc:0xdd:0xee
ipaddr=192.168.1.1
serverip=192.168.1.10
dir=
lu=tftp 0x80060000 ${dir}u-boot.bin&&erase 0x9f000000 +$filesize&&cp.b $fileaddr 0x9f000000 $filesize
lf=tftp 0x80060000 ${dir}ap151${bc}-jffs2&&erase 0x9f050000 +0xE30000&&cp.b $fileaddr 0x9f050000 $filesize
lk=tftp 0x80060000 ${dir}vmlinux${bc}.lzma.uImage&&erase 0x9fe80000 +$filesize&&cp.b $fileaddr 0x9fe80000 $filesize
stdin=serial
stdout=serial
stderr=serial
ethact=eth0

Environment size: 684/65532 bytes
ath>
上面中的环境变量与tftp升级相关的是下面三行内容:
lu=tftp 0x80060000 ${dir}u-boot.bin&&erase 0x9f000000 +$filesize&&cp.b $fileaddr 0x9f000000 $filesize
lf=tftp 0x80060000 ${dir}ap151${bc}-jffs2&&erase 0x9f050000 +0xE30000&&cp.b $fileaddr 0x9f050000 $filesize
lk=tftp 0x80060000 ${dir}vmlinux${bc}.lzma.uImage&&erase 0x9fe80000 +$filesize&&cp.b $fileaddr 0x9fe80000 $filesize

设置lu lf 和 lk 为别名,代替后面的命令集
lu=tftp 0x80060000 ${dir}u-boot.bin&&erase 0x9f000000 +$filesize&&cp.b $fileaddr 0x9f000000 $filesize
    (1) 将u-boot.bin文件上传到0x80060000地址;注意${dir}u-boot.bin&&erase代指相对应的需要升级的文件名  
    (2)然后从地址0x9f000000开始,擦除filesize大小;
    (3)从fileaddr地址中复制数据,大小为filesize,到地址0x9f000000.也就是说设备的地址从0x9f000000开始,到 0x9f000000+filesize里面存放的是u-boot。

lf=tftp 0x80060000 ${dir}ap151${bc}-jffs2&&erase 0x9f050000 +0xE30000&&cp.b $fileaddr 0x9f050000 $filesize
     (1)上传${dir}ap151${bc}-jffs2到地址0x80060000;注意${dir}ap151${bc}-jffs2代指相对应的需要升级的文件名
     (2)然后从地址0x9f050000开始,擦除0xE30000大小;
     (3)从fileaddr地址中复制数据,大小为filesize,到地址0x9f050000也就是说设备的地址从0x9f050000开始,到 0x9f050000+filesize里面存放的是rootfs。
 

lk=tftp 0x80060000 ${dir}vmlinux${bc}.lzma.uImage&&erase 0x9fe80000 +$filesize&&cp.b $fileaddr 0x9fe80000 $filesize
     (1)上传${dir}vmlinux${bc}.lzma.uImage 到地址0x80060000;注意${dir}vmlinux${bc}.lzma.uImage代指相对应的需要升级的文件名
     (2)然后从地址0x9fE80000开始,擦除filesize大小;
     (3)从fileaddr地址中复制数据,大小为filesize,到地址0x9E80000
也就是说设备的地址从0x9fE80000开始,到 0x9fE80000+filesize里面存放的是kernel。


2.开始升级
openwrt编译后/bin/ar71xx/目录下会生成对应的升级软件

找到和自己手上对应的硬件对应的软件,我编译的是ap151-16M的flash的firmware,如上图与我的硬件相关的文件有四个:
openwrt-ar71xx-ap151-16M-qca-legacy-uboot.bin
openwrt-ar71xx-generic-ap151-16M-kernel.bin
openwrt-ar71xx-generic-ap151-16M-rootfs-squashfs.bin
openwrt-ar71xx-generic-ap151-16M-squashfs-sysupgrade.bin
升级方式有两种:
第一种升级方式(uboot.bin+kernel.bin+squashfs.bin):
升级uboot:
tftp 0x80060000 openwrt-ar71xx-ap151-16M-qca-legacy-uboot.bin
erase 0x9f000000 +0x28bec;cp.b 0x80060000 0x9f000000 0x28bec

0x28bec是uboot文件的大小,第一条命令下完之后可以看到文件的大小,如下所示
TFTP fromserver 192.168.1.10; our IP address is 192.168.1.1
Filename'openwrt-ar71xx-ap151-16M-qca-legacy-uboot.bin'.
Loadaddress: 0x80060000
Loading:#################################
done
Bytestransferred = 166892 (28bec hex)

(当然也可以不指定文件大小如升级uboot可以使用tftp 0x80060000 openwrt-ar71xx-ap151-16M-qca-legacy-uboot.bin;erase 0x9f000000 +0x40000;cp.b $fileaddr 0x9f000000 $filesize)
升级kernel:
tftp 0x80060000 openwrt-ar71xx-generic-ap151-16M-kernel.bin
erase 0x9f680000 +0x110000;cp.b 0x80060000 0x9f680000 0x110000


升级quashfs:
tftp 0x80060000openwrt-ar71xx-generic-ap151-16M-rootfs-squashfs.bin
erase 0x9f050000 +0x620000;cp.b 0x800600000x9f050000 0x620000


第二种升级方式(uboot.bin+sysupgrade.bin):

sysupgrade.bin将kernel和quashfs合成在一起了,所以只需要uboot.bin+sysupgrade.bin即可
升级uboot:
tftp 0x80060000 openwrt-ar71xx-ap151-16M-qca-legacy-uboot.bin
erase 0x9f000000 +0x28bec;cp.b 0x80060000 0x9f000000 0x28bec

升级sysupgrade.bin:
tftp 0x80060000 openwrt-ar71xx-generic-ap151-16M-squashfs-sysupgrade.bin
erase 0x9f050000 +0xf3c924; cp.b 0x80060000 0x9f050000 0xf3c924;reset


发现一个介绍uboot环境的很好的文章:

https://wiki.openwrt.org/doc/techref/bootloader/uboot.config



0 0