何当共剪西窗烛
唯有踏浪执子归 人不怜我我自怜

D-Link DIR-868L 梅林固件恢复出厂变砖破案

最近研究openwrt时,很多以前的问题我都拿起来研究了一下,发现现阶段所有的梅林固件,包括我适配的DIR-868L梅林固件,都会存在这个问题。

问题的原因是DIR-868L总共有两块磁盘,一块是SPI Nor Flash,大小为2MB;另一块是nand,大小为128MB

这两块磁盘的作用是,SPI Nor Flash 存放boot分区和nvram分区,nand上存放固件。

但是华硕AC68U的SPI Nor Flash大小应该是4MB,因为我之前没有改动分区的代码,查看日志如下:

Creating 2 MTD partitions on “bcmsflash”:
0x000000000000-0x000000040000 : “boot”
0x0000003f0000-0x000000400000 : “nvram”

这是不对的,我之前没看16进制的400000是多少,以为是2MB,换算起来是4MB,于是整个nvram写在了溢出的区块上,正确的应该是boot分区的长度为0-0x1f0000,nvram的为0x1f0000-0x200000

下面看一下我为openwrt定义的原生分区表,可以知道0-0x40000区段是最小的u-boot分区,即通常说的CFE,但实际上在u-boot和nvram分区之间还有很多分区,可以参见下面。

u-boot@0 {
+ label = “u-boot”;
+ reg = <0x000000 0x040000>;
+ read-only;
+ };
+
+ devconf@40000 {
+ label = “devconf”;
+ reg = <0x040000 0x010000>;
+ read-only;
+ };
+
+ devdata@50000 {
+ label = “devdata”;
+ reg = <0x050000 0x010000>;
+ read-only;
+ };
+
+ mydlink@60000 {
+ label = “mydlink”;
+ reg = <0x060000 0x170000>;
+ read-only;
+ };
+
+ langpack@1d0000 {
+ label = “langpack”;
+ reg = <0x1d0000 0x020000>;
+ read-only;
+ };
+
+ nvram@1f0000 {
+ label = “nvram”;
+ reg = <0x1f0000 0x010000>;
+ };
+ };

知道这个问题的话呢,下个版本就去解决,现存的梅林固件都会有之前的问题,包括AC-68U的固件以及其它衍生固件。下个版本升级固件就行了,与CFE无关。

那么再复盘一下,之前什么情况下会重置变砖?

—-从CFE修改了设备型号,修改型号后致使重置后固件会以错误的分区表进行分区,丢失了nvram分区,进而系统引导失败。

那么为啥miniweb还有?妙就秒在这里,因为最小的核心u-boot分区并没有错误,并且boot分区在固件里是以read-only挂载的,默认不可写。

赞(1) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《D-Link DIR-868L 梅林固件恢复出厂变砖破案》
文章链接:https://www.bigxd.com/2021/03/862.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 8

评论前必须登录!

 

  1. #1
    头像

    大神好厉害!!!

    yoyoer1个月前 (03-05)
  2. #2
    头像

    高手,可惜我已搞坏了一台机子。请大神能否出一个修复好的cfe,谢谢。

    张生1个月前 (03-06)
  3. #3
    头像

    终于破案了

    画下句1个月前 (03-06)
  4. #4
    头像

    反馈一个问题,就是在aimesh系统在web端子页面察看是断开的,但是其实是可正常使用的,另外在手机app看也是正常的,我估计是显示的问题,或者参数调用的问题

    画下句1个月前 (03-06)
  5. #5
    头像

    大神要是把软件中心移植进来固件,那就完美了。#^_^#

    king1个月前 (03-06)

觉得文章有用就打赏一下文章作者

微信扫一扫打赏