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

【授人以渔】华硕梅林固件CFE编译方法

以未修改的原梅林源码为例,git地址为https://github.com/RMerl/asuswrt-merlin

型号以RT-AC68U为例。

CFE的源码主的目录为下:

$(源码置放目录)/asuswrt-merlin/release/src-rt-6.x.4708/cfe

说明一下各文件夹作用:

build为编译目录,编译配置等内容在这个目录


cfe目录为cfe的源代码目录

docs为文档目录


主要在需要修改的配置文件在build文件夹里,cfe的源码在cfe文件夹里,下面浏览下
$(源码置放目录)/asuswrt-merlin/release/src-rt-6.x.4708/cfe/build/broadcom/bcm947xx/compresse



可以看到里面的txt文件都是各型号的CFE配置文件,各种sdram定义,gpio接口定义就在这,网上的CFEEDIT工具,修改的大部分也是这里面的配置,在十六进制文件查看器中可以用ASCI码查看的.


然后还是看

$(源码置放目录)/asuswrt-merlin/release/src-rt-6.x.4708/cfe/build/broadcom/bcm947xx/compresse 目录下的Makefile文件,可以看到引用配置文件是有条件的,具体就是要将两个变量赋值


RTAC68U=1
PATYPE=0

现在就得到编译CFE的方法:

cd $(源码置放目录)/asuswrt-merlin/release/src-rt-6.x.4708/cfe

make RTAC68U=1 PATYPE=0

以上两条命令即编译了RT-AC68U的CFE,再次编译前记得执行make clean


西窗浪人首发,转载附初始地址



未经允许不得转载:西窗浪人 » 【授人以渔】华硕梅林固件CFE编译方法
分享到: 更多 (0)

评论 11

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1
    头像

    老大,可有rt-ac3200的cfe,方便的话邮箱一个,392517728@qq.com非常感谢!!!

    freedomcooky6个月前 (03-16)回复
    • 戏子醉

      没有那个设备呀,华硕官方找不到么

      戏子醉6个月前 (03-17)回复
  2. #2
    头像

    你好,知道CFE Edit怎么把参数保存回去的吗?也就是CFE里面”FLSH”标志后面的校验算法是怎么实现的吗?
    目前已经知道的是FLSH,接下来四个字节是参数的长度,接下来的是CRC算法和版本,请问这个CRC算法怎么实现的?谢谢!

    斐然5个月前 (04-07)回复
    • 戏子醉

      百度crc32

      戏子醉5个月前 (04-08)回复
      • 头像

        肯定不是CRC32算法,因为只占有2个字节,可能是CRC16或者CRC8,问题是不知道用的那个公式

        斐然5个月前 (04-08)回复
        • 戏子醉

          跟我争辩有意思吗,又要来问,又不相信。
          /* Do CRC check */
          if (len > *insize ||
          len > flashinfo.flash_size ||
          len < sizeof(struct trx_header)) { xprintf("\nTRX file size error!"); return CFE_ERR; } calccrc = flash_crc32(ptr + 12, len-12); if (calccrc != ltoh32(hdr->crc32)) {
          xprintf(“\nTRX CRC error!”);
          return CFE_ERR;
          }

          戏子醉5个月前 (04-09)回复
        • 戏子醉
          • 头像

            你好,我不是要和你争,是讨论。您给出的事trx文件的校验,trx文件头部是CRC32校验,那是毋庸置疑的了。我的问题可能你没有看清楚,我是说cfe.bin文件内部,在”FLSH”标志以后,有一个校验码,使用CFEedit.exe编辑完成cfe.bin参数以后,保存这些参数回去,需要对这些参数进行校验,把校验码写回cfe.bin,位置在FLSH标志之后的第9和第10个字节,cfeedit只能编辑老的cfe.bin(参数内容从0x400到0x1400,版本号1.05),新版的参数区域已经增大(比如布法罗wzr-1750dph的cfe的参数区域已经是0x400到0x1700,版本号1.46,腾达AC15的cfe的参数区域已经从0x400-0x2400,版本号1.47),这样导致cfeedit无法识别,由于源码已经写死了,跟不上cfe版本的更新,会提示不正确的cfe,因此我想自己写一个类似cfeedit的工具,但是不知道校验方式和校验的起始位置,我说的可能不太清楚,你可以用二进制工具打开一个cfe.bin看看就明白了.

            斐然5个月前 (04-09)
          • 戏子醉

            我想我明白你的意思了,不过我也不知道具体的方法,我甚至都不知道还有这个校验。

            戏子醉5个月前 (04-09)
  3. #3
    头像

    从恩山一直搜到您的博客,dir868L的CFE和固件帮助很大,再次感谢,现在手上有个魅族的R10 OEM路由器,未量产的,拆机配置是4708加双4360,能刷入AC68U的openwrt但是没有WiFi,刷入R7000的梅林有WIFI但是因reset键GPIO不对重启变砖,能否讲解一下如何修改GPIO

    图拉丁5个月前 (04-22)回复
    • 戏子醉

      确定变砖是因为reset的gpio不对引起的?GPIO定义需要在原版系统中,通过接入TTL线,查看开启引导日志截取。个人感觉应该是内核的引导地址不一致引起的变砖,主要原因是你那个魅族路由器的Bootloader与R7000的梅林固件定义的内核地址不一样,无法引导。
      解决方式有两种:1是找出正确的内核引导地址,修改梅林源代码,重新编译。2是编译出魅族路由器的梅林专属CFE。
      修改梅林固件的GPIO在源码/release/src/rc/init.rc文件中,搜索机型RTAC68U可找到

      戏子醉5个月前 (04-22)回复