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模式,用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
- openwrt tftp 升级软件的方法
- Openwrt安装软件的方法
- openwrt 升级系统方法
- 升级OPENWRT发布的纯净固件后,习惯装的软件
- openwrt安装软件的两个方法
- cisco ios 升级方法和TFTP的用法
- 升级openwrt的cmake版本
- Cisco ios 软件的安装升级方法
- 8051单片机在线升级软件的方法
- 8051单片机在线升级软件的方法
- 软件升级的方法和装置
- 【1】TFTP软件的开发
- 基于TFTP协议的远程升级设计
- 软件升级包封装方法以及软件升级方法
- 关于软件冲突或程序升级bios 的方法
- 佳能软件不用光盘安装升级包的方法
- C#中实现软件自动在线升级的方法思考
- Ubuntu中安装tftp/tftp-hpa服务的方法
- 【OpenCV】根据点集(轮廓)拟合圆
- 掌握新变革,解密新趋势|msup第29届MPD软件管理工作坊成功召开
- java回调机制
- C4练习-解救小Q
- 算法13—Bit Map算法简介
- openwrt tftp 升级软件的方法
- errno.h
- HashMap存储原理
- POJ 3522 Slim Span
- 纠正对Fragment Transaction BackStack的误解
- Android提高第八篇之SQLite分页读取
- zip
- jquery通过name属性取值的方法
- shell学习-5