|
本帖最后由 hackpascal 于 2015-9-25 01:45 编辑
不知从什么时候起,UBNT 开始在其固件中加入了设置 Flash 写保护的功能,此写保护在 Flash 断电后依然存在,可通过向 Flash 发送清零状态寄存器的指令来解除写保护,或者通过编程器来解除写保护。
楼主在开发 Breed 之初并未预料到会有固件会进行这样的设置,但 UBNT 确实这么做了,很恶心。
在 UBNT 固件设置了 Flash 写保护后, Bootloader 必须在每次启动固件前解除 Flash 写保护,否则固件无法正常启动。
Breed 很快跟进,加入了清除 Flash 写保护的功能,因此能够启动最新的 UBNT 固件。
以下为重点:
如果是老版的 Breed 遇到了设置写保护的固件,那么从 Breed 里面将无法进行任何更新操作,包括升级 Breed,唯一的办法就是使用替换了 U-Boot 的 UBNT 升级固件来更新最新版的 Breed。
但是。。r766 之前的 Breed 有个小缺陷,即不会检查 UBNT 所使用的 u-boot-env (U-Boot 环境变量) 的有效性。
这会导致一个问题,即如果 Flash 中没有有效的 u-boot-env (例如从空白的 Flash 刷 UBNT、用编程器刷 UBNT 固件工具生成的编程器固件、先刷 TP-LINK 固件再刷 UBNT 固件),那么从 UBNT Web 升级固件将会失败。失败的表现是 UBNT 升级页面出现 -117 的错误码。
如果存在这个问题,恰好又使用了老版 Breed 刷入了新版带写保护的固件,那么。。请看下文的终极解决办法;否则可以通过刷替换 Breed 的 UBNT 升级固件来解决此问题。
最新的 Breed r766 修复了 u-boot-env 问题,每次更新时都会自动处理此部分;UBNT 固件工具也已更新,会在生成编程器固件时自动加入 u-boot-env 数据。
========================================华丽的分割线========================================
终极解决办法:
如果升级固件替换 breed 无效,则使用此方法
原理:使用内存启动版 breed 来刷入最新版 breed
方法:
- 根据路由是uboot还是breed,搭建tftp/http服务器
- 下载本贴附件 breed-mem-ar724x.img,注意此文件绝不能刷入路由,否则变砖,后果自负
- 通过 ttl 或者 telnet (仅breed)进入 uboot/breed
- 通过 tftp (uboot)/wget (breed) 命令将 breed-mem-ar724x.img 载入内存,记下载入的内存地址 (默认是 0x80000000)
- 通过 bootm 0x80000000 (uboot)/boot mem 0x80000000 (breed) 运行 breed-mem-ar724x.img, 将 0x80000000 改为实际的加载地址
- 内存版 breed 启动后,就已解除了 flash 写保护,此时直接访问 192.168.1.1 刷入最新版 breed 即可
说明:- 具体的 tftp/wget 方法请自行搜索,本贴不再叙述
- breed-mem-ar724x.img 是专门用于从内存中运行的特殊 breed,不会进行 CPU 频率初始化以及内存初始化,不能刷入 flash,否则必变砖
附件:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
查看全部评分
|