最近研究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挂载的,默认不可写。
大神好厉害!!!
这么晚了还逛博客啊
高手,可惜我已搞坏了一台机子。请大神能否出一个修复好的cfe,谢谢。
9块包邮解君愁手动滑稽>
https://www.bigxd.com/2019/02/458.html
里面的mtd0就是完整的cfe分区
终于破案了
反馈一个问题,就是在aimesh系统在web端子页面察看是断开的,但是其实是可正常使用的,另外在手机app看也是正常的,我估计是显示的问题,或者参数调用的问题
对方拒绝了你的消息并脱光了你的衣服
其实你发现的这个问题我也很早发现了,自编译的cfe代码也需要调整,因为华硕的cfe代码有bug,默认也把2M的spi识别为了4M的,不信你可以ttl里面show devices
大神要是把软件中心移植进来固件,那就完美了。#^_^#