分享

终于解决了breed刷机后不能正常启动的问题

 新用户30192489 2022-12-24 发布于内蒙古
本帖最后由 doboto 于 2021-1-17 15:04 编辑

首先感谢breed作者大神,breed的功能是真的太强大了!玩法太多!
入手小米路由器4A百兆版一台,想用openwrt系统!找了几个教程,成功刷入了breed,并用breed刷成功了老毛子,一些定制的openwrt系统!用了一段时间,但是或多或少都有信号不好的问题!后来从openwrt官网下载了原版的openwrt,用breed刷入,结果启动不了了!跟很多的人描述的现象一样,一直重启,但是无法进入openwrt!
但是此时还是可以进入breed,但是就进不了这个版本的openwrt,用breed再刷会老毛子可以正常启动。官方原版固件也不敢刷!

网上搜索学习了一下原理,breed的作用就是引导系统启动的,启动系统时,最重要的就是要知道flash中系统地址,breed把他成为闪存布局,就是不同rom,不同的固件他们在系统中划分的分区大小,地址并不一样,而breed目前支持的已经有好几个常见的型号了,比如公版(0x50000), 而这个小米4A,他的启动系统地址实际上在0x160000, breed的web界面上,没有对应的闪存布局可以选。官方原版的openwrt固件中firmware地址也在0x160000,所以用breed的web界面刷固件时,并不对应,启动不了!

原因明白了,就好办了!看到很多人都在发帖问作者可以不可以支持自定义启动地址?实际上web界面上不支持,但是breed还有强档的命令行界面,可以使用,强大到让人膜拜!

那说说我这个问题的解决方法,为需要的人提供一下参考!

1:首先启动breed,并用telnet连接到breed的命令行界面(不会的请参考breed的教程贴)
2:在命令行下使用wget http://x.x.x.x/firmware.bin, 此处要把你要刷的固件放在一个http服务器上(http服务器的得自己想办法,不会请自己搜教程),运行结果如下
breed> wget http://x.x.x.x/firmware.binwget http://x.x.x.x/firmware.binConnecting to x.x.x.x...
connected.HTTP request sent, awaiting
response... 200 OK
Length: 1922059/0x1d540b (1MB) []
Saving to address 0x80000000
以上x.x.x.x为ip地址,可以看到下载成功后,breed将该文件保存到了地址为0x80000000的位置,注意这里没有文件名,下载保存下来的是其实地址
3: 在命令行下执行 flash erase 0x160000 0x200000  这个命令是擦除flash中原有的数据,为我们要写入的文件腾点地方(按道理直接覆盖应该可以,但是我没试成功,还是先擦除,再写入才能成功, 0x160000为要写入firmware的目的地址,0x200000比我们下载的文件大小0x1d540b大一点,凑个整,呵呵)
4:在命令行下执行flash write 0x160000 0x80000000 0x200000(0x160000为要写入firmware的目的地址, 0x80000000是下载的固件的保存地址, 0x200000比我们下载的文件大小0x1d540b大一点,凑个整,呵呵)
5:这个时候,我们下载的固件实际上已经写入到flash了,可以启动了,在breed界面执行 boot flash 0x160000(注意这个是启动地址),回车,输出如下:
Trying to boot firmware from 0x00160000 in flash bank 0 ...
Reading data into memory ...
U-Boot firmware image header detected.   
Image Name:   MIPS OpenWrt Linux-4.14.98
...
如果成功,路由器就会自动重启,并进入我们刷的新系统中了,看到了openwrt的界面。

6:虽然上一步已经成功了,但是很遗憾,断电重启路由器,进入breed自动启动,breed还是会从0x50000处启动系统,那当然启动不成功了,和以前以前,会陷入自动循环重启中。怎么办?breed强大的环境变量功能来了,这些问题都是小case!首先进入breed的web界面,启用环境变量功能!这一步启动环境变量功能界面中,位置选择breed内部,设置启用后,需要重启。
7:再次进到breed的web界面中,上一个步骤已经设置启用了环境变量了,这一步我们就加上关键的环境变量,在环境变量界面,增加  autoboot.command 字段,值设为 boot flash 0x160000,即可,这就是告诉breed启动系统时,使用我们第5步中使用的那个命令boot flash 0x160000,从0x160000处启动,保存。
8:断电重启,哈哈系统已经成功运行了!

总结,有不少网友反馈,用breed刷rom后,变砖,不能正常启动了,反复重启!很可能都是这个原因引起的,就是breed默认的闪存布局,或者可选则闪存布局和你的情况不一致,如果遇到这个问题,你可以试试这个方法。前提是你得知道你的路由闪存布局是什么,最重要的就是系统启动地址。
  那么系统启动地址怎么看呢,一般正常启动的系统,cat /proc/mtd就可以看到,一般名为linux,os ,firmware等就是这个区,这个命令显示的都是区大小,得换算成地址。或者在系统启动时,ssh中使用dmesg命令,可以看到所有区的启动地址。
  好了,也折腾了一天多,总算救活了自己的R4A,除了发帖共享给大家外,也算做个学习记录!
  感谢breed作者,伟大的breed!感谢恩山,感谢多个帖子的作者,我做了很多参考,自己实践!


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多