达发 airoha en7529/en7562/an7563 等基于 en7523 的 SoC 构成分析以及 OpenWrt 支持研究(下)
接上文 SDG320 en7562ct ax3000 研究(上)
SoC 构成研究
点击展开相关研究过程
从原厂的编译信息分析
/userfs/profile.cfg 有着一些编译信息。
1 | "512k[bootloader],12m[rescue],1280k[reservearea],256k[romfile],5m[kernela],33m[rootfsa],5m[kernelb],33m[rootfsb],6m[data],50m[java],78m[osgi]" |
这个分区信息是移动版本的,其他版本的是下面这样的
1 | "512k[bootloader],12m[rescue],1280k[reservearea],256k[romfile],5m[kernela],33m[rootfsa],5m[kernelb],33m[rootfsb],6m[data],16m[plugin1],16m[plugin2],96m[plugin3]" |
UBOOT 2014 版本 ATF2_1
1 | TCSUPPORT_ARM_SECURE_BOOT=y |
这两个 SECURE_BOOT 有什么区别吗?应该上面这个是 ATF 的。
如果有高手,可以结合开源的 ATF 代码,尝试制作一个多功能 UBOOT,就像 uboot-mt798x 一样
1 | TCSUPPORT_ETHPHY=5R_DIS |
这里只选取了最重要的差别,其他系统定义上的差别、驱动特性的差别没有给出。
TCSUPPORT_BUSYBOXCONFIG_TC3262=y 指定了使用了 TC3262 的 BusyBox 配置。TC3262 是 TrendChip 的一个 SoC 系列,可能是为了兼容性或特定功能。
TcBoot 是从 TrendChip 的 TC3262 衍生而来的极简引导加载程序。可能是为了支持 A/B 分区的相关特性,或是 NAND BBT/BMT 相关功能。
某些编译信息,来自固件里打包的某些文件,这应该是编译 Airoha SDK 的工具链。
1 | root@Ubuntu:tmp# /home/sdks/OEM/airoha_en75xx-evb2023/bin/arm-linux-gcc -v |
没有源码,看个乐呵。
设备树构建猜想
以下是进行推测的过程,可以直接跳到末尾最新的部分。
当然,这些都是推测,不保准准确,没有看到 dieshot 时,谁也不能确定。
airoha: add support for Gemtek W1700K
这个提交展示了如何在带有 Secure Boot 的达发设备上引导系统。W1700K 是一个基于 an7581 的设备,使用了 Secure Boot 机制。
我感觉有戏,感觉可以为该设备提供 OpenWrt 支持。但是主线上的 en7523 只有验证样品的 DTS 文件,没有模板。
不过话又说会来了,这个 dts 貌似不太完整,比如 keys、led 的 GPIO 都没有,而且也没有分区信息,应该是藏在内核脚本里了,还是要ttl看启动信息。
见参考资料 [1]。
gdma 应该是一个 dma 设备,而 gdm 是一个以太网 mac 设备,frame_engine 集成了以太网相关的部分。
在 [2] 中提到:
R5408M 的四个 2.5G 口是直通 CPU 的,…CPU EN7562C 里面集成有一个千兆交换机,5-8 号千兆口就是走这个交换芯片。…
参考[3]:
…CPU型号是EN7652CT,双核A53架构,频率1GHz,集成4个千兆PHY。…
以及原厂编译配置文件中的
1 | TCSUPPORT_HSGMII_LAN=y |
结合 [4] 、[5] 的信息以及使用 ifconfig/iwconfig 命令查看到的网口信息
1 | eth0 |
可以确定,这确实是有一个千兆交换机内置在 en7562ct SoC 之中。GMAC1 扩展支持 SGMII 和 HSGMII
估计应该和 EN8850DRE 差不多
而设备树中包含了 wdma 和 wed,设备树中使用 en751221 作为兼容硬件,可能同样兼容 EN7526。
Pcie 方面,en7562ct 使用了兼容 mt7520 的 pcie 通道
而 hsgmii 是提供 2.5Gbps 内部接口(Interface),或为 pon/xpon 提供支持。
参考[3:1]:
…T和U的差别,从价格和扩展性来看,就差在3个HSGMII接口上。…
千兆网口(PHY)来自内部的以太网交换机芯片。
额外发现,airoha 的交换机芯片,后缀不一样,它们的结构可能也不相同,故此驱动可能也并不通用,特定型号只能期待 MTK/AIROHA 开源了。
以及可以发现,小米 BE5000,使用了 en7563PT 处理器,推测该芯片应该是 en7562 的更新换代。以及还有一款 极客AP 也使用了 en7563pt 方案。
解包小米固件后,发现该 dts 与 an7562 的内核提取 dts 非常相似,也是基于 an7523 的设备树,但是多了 an7581 的 oop-table 频率表,GPIO、分区表、thermal-zones等。
另外,我们也可以查看另一个不同架构 SoC en751221 的相关资料,已经有人发表相关的文章。具体见参考资料 [1:1]。也已经有人为其适配 Linux/OpenWrt。
en7561 一般搭配 MT7905DEN+MT7975DN 配置成 ax1800
en7562 一般搭配 MT7976DN+MT7916AN 配置成 ax3000
an7963 一般搭配 MT7976CN+MT7991AV/BV 配置成 be3600/be5000
EN7562 是 28nm 的处理器,AN7563 则是 14nm 的处理器。
另外,airoha 的命名很混乱,en7561 是 mips 架构的,en7562/7563 是 arm 架构的,据说 en7561 是 mt7621 的改版,如果要尝试为 en7561 提供 OpenWrt 支持,可以参考 mt7621 的相关代码。
结论
7月9日更新
概述:
EN7562CT 是用于 xPON 应用的高度集成的单芯片解决方案。
它集成了四个以太网 GPHY、一个 DDR3 控制器、一个 USB3.0 Host、一个 USB2.0 Host、两个 PCIe Gen2 端口,以及用于 VoIP 应用的具有 ISI/ZSI 兼容接口的 PCM 控制器,从而完全满足未来智能家居网关的要求。
EN7562CT 采用 1.0GHz ARM CA53 双核 CPU 和强大的 Xmart PacketAccelerator(XPA),它可以支持无与伦比的网络功能,具有极高的数据包处理能力。
通过 XPA,EN7562CT 执行高级 QoS、安全性和灵活的协议管理。
EN7562CT 还集成了三个专有的 RISC-V 内核,以加速 WiFi 和安全应用程序。
EN7562CT 采用领先的节能技术制造系统板设计简单易行,提供系统成本低、超低能耗的独特消费者解决方案
特性:
高度集成的广域网接口
符合 ITU-T G.984/G.988和IEEE802.3ah 标准
支持主动以太网
提供 MIB 计数器和嗅探器功能,用于快速现场调试非匹配和 Xmart 数据包处理引擎
Xmart packet 加速器可以支持线速数据包处理和转发无需 CPU 参与的能力
支持高达 32K 的流量,包括 L2 网桥、IPv4 NAT/路由、IPv4 NAPT、IPv6
3/5 元组路由、6RD 和 DS-LITE、NPTv6、VxLAN、NVGRE强大的流量分类引擎解析 L2 到 L4 头信息
TR-156 和 CTC Spec 中定义的灵活 VLAN 转换功能。
支持 L2 和 L3 组播流和组播 VLAN 转换
可配置的数据包缓冲区位置,具有高效的基于页面的链表缓冲区管理
有效的 QoS 方案,包括按流 TrTCM 流量整形、SP/WRR/SP+WRR
用于交通调度,尾部下降和红色用于拥堵处理支持高达 16K 的 jumboframe
高度集成的局域网接口x4 GEPHY
x3 HSGMII 与 PCIE/USB SerDes 的组合。强大的 SoC 平台
1.0GHz ARM CA53 双核 CPU,256K L2 缓存
集成三个专有的 RISC-V 内核,用于 WiFi 和安全加速
支持高达 1GB DDR3-1866 SDRAM
支持 SPI NOR/NAND 闪存
两个用于双频 WiFi 应用的 PCIe Gen2 接口
一个 USB3.0 接口和一个 USB2.0 接口
提供一个 PCM 或两个 ZSI/ISI 接口
用于安全应用的内置加密引擎
两个 UART
一个 I2C 主机和一个 I2C slave
方框图:

注意:图中相关组件标注的型号只是代表该组件的功能相近,并不带不一定是该型号的组件或兼容组件。

SerDes配置:
| SerDes 名称 | 模式 |
|---|---|
| PONSerDes | PON/HSGMII/5GBASE-R |
| PCIe Gen2 SerDes | PCIe Gen2/HSGMII |
| USB3 SerDes | USB3/HSGMII |
封装工艺:
LFBGA-361
基于 en7523 的 SoC
EN7529DU = EN7523_BASE,
EN7523DT
EN7523DTM
EN7523DU
EN7523GU
EN7523SU
EN7529CT
EN7529CTM
EN7529CU
EN7529DT
EN7529DTM
EN7529DU
EN7529GTH
EN7529GTS
EN7529IT
EN7529ITM
EN7562CT
EN7562CTM
EN7562CU
EN7562DT
EN7562DTM
EN7562DU
EN7562GTH
EN7562GTS
达发 ARM(a53/v7l) 命名规则:
第一位后缀代表频率,从默认频率到最高频率依次为 C(1GHZ)、D(1.2GHZ)、G(1.3GHZ)、P(1.4GHZ),其中 S/I 是特殊版本(一般是性能更强)。注:括号内的频率并不一定是实际频率,只是为了便于理解。
第二位后缀代表内存封装,T 代表使用外置 DDR,U 代表使用内置 DDR。
第三位后缀 H/S,H 代表 Host,S 代表 Slave。
其实这个频率,他是可以超频的,也是可以降频的。如果未来有人研究的话,是可以将最基础的 C 版本超频到 1.4GHz 的,只要你想,改 bl2 的源码,超到 2GHZ 都不是问题,不过这颗芯片发热量巨大,即使降频也很难控制温度。不过用其他版本的厂商实在不多,也没有源码。此外,目前 airoha 新版 SDK(airoha SDK 7.3 kernel 5.4) 是统一 SDK,也就是说,只要你能拿到这个 SDK 的源码,你就可以编译出所有版本的 SoC 的固件(通过不同的 mak 配置)。
基于 EN7528 的 SoC
EN7528HU
EN7528DU
EN7561DU
EN7526FH_EN7528DU
EN7521G_EN7528DU
基于 EN7580 的 SoC
EN7580GT
EN7580ST
EN7580GAT
EN7565
基于 EN7516 的 SoC
EN7516G
基于 EN7527 的 SoC
EN7527G
EN7561G
基于 EN7512 的 SoC
EN7512
EN7513
EN7513G
基于 EN7521, EN7521FC 的 SoC
EN7521FCUD
EN7521F
EN7521S
EN7526D
EN7526F
EN7526G
EN7526FT
EN7526FP
EN7526FT_C
基于 AN7581 的 SoC
AN7581_BASE,
AN7581GT = AN7581_BASE,
AN7566GT,
AN7581PT,
AN7581ST,
AN7551PT,
AN7581CT,
AN7581DT,
AN7581FG,
AN7581FP,
AN7581FD,
AN7551GT,
AN7566PT,
AN7581IT,
AN7581SIT,
基于 AN7552 的 SoC
AN7552_BASE,
AN7552CT = AN7552_BASE,
AN7552ST,
AN7552FT,
AN7563CT,
AN7563PT,
基于 AN7583 的 SoC
AN7583_BASE,
AN7583GT = AN7583_BASE,
AN7583GIT,
AN7583CT,
AN7583DT,
AN7583ST,
AN9510GT,
AN7553GT,
AN7553CT,
AN7567GT,
AN7567CT,
AN7583ET,
AN7583EIT,
AN7583FG,
AN7583FP,
AN7583FD,
AN7583FS,
AN7583FF,
OpenWrt 支持的可能性
点击展开相关研究过程
6月13日记录
今天有一个新的发现:airoha_ml
随后,我又从这些文件中发现了一个名为 IOWRT Airoha integration,目的是移植 Airoha SDK 到 IOWrt(Based On Openwrt)。
6月15日记录
今天我又发现了一款使用 en7562ct 的设备(不过无线使用 7915)的 make config 文件,发现这是使用21年11月的编译配置,此时它直接使用了 en7523 相关配置,全然没有使用 8850 交换机选项和其他有区别于 en7523 的配置。
而这些变化发生于 22 年某个时间,发生这些变化的 SDK 来自 23 年,所以我更能确定了,早期的 en7562 设备直接使用 en7523 的设备树进行编译。
关于交换机,在设备树中的 Frame_Engine 设备中,就有一个交换机的节点。起初查看 /proc/device-tree/ 目录下的设备树文件时,没有发现交换机设备/以太网设备,我还以为是 airoha SDK 的原因,认为实际存在但没在设备树中显示,因为这些设备树的命名难以猜测,以及该设备运行的系统与寻常 linux 不同,似乎叫 tclinux。
即便不启用属于 en7562 家族的特性,它照样能够运行。
是否好奇没有分区表要怎么启动?我也很好奇,然后查阅了文档,像一些 gpio,分区表,都可以写在 uboot 的环境变量/启动命令中。所以不必纠结分区表了和设备树了。这倒是提醒我备份 u-boot 环境变量十分重要。
此外,我发现,userfs/ 目录下,存在:7523duled.conf、7523guled.conf、7529_62led.conf、7529_cd.conf、led.conf、led_fpga.conf 等文件,这些文件可能是用于配置 LED 灯的。所以,达发的 led gpio 可能是通用的,但也可能是厂商内部定义的。
通过查看 IOWrt Airoha integration 的代码,发现他们的也使用类似 airoha 的 led 配置方式。同样存在于 userfs/led.conf 文件中。
通过比较,可以确定 led.conf 并非是通用的,而是特定于某个设备的配置文件。适配系统时,需要通过 patch 的方式来修改该文件。
6月29日更新
今天抽空连接了 TTL,看了一下 uboot 和 启动 log,看到了一下内容
1 | (1) insmod mdio_arht.ko |
这三个模块都是不存在的,但是系统想要加载它们。en8811h 是一个以太网 PHY 驱动,8811_bbu_api 是一个 BBU 驱动,mdio_arht 是一个 MDIO 驱动。
实际上交换机使用 mt753x 的魔改驱动,如果存在 8811 phy 则会有相应的驱动代码,但是该设备没有该 phy,系统也去加载了该驱动,看起来是写死了。
然后就是,它真的有 efuse。
还有一个就是 led 相关的了
1 | tcledctrl version: tcledctrl V1.1.0.0 (Nov 10 2023-16:08:25). |
以及相关的分区表和 gpio 确实存储在 uboot-env 中。
1 | bootdelay=3 |
OpenWrt 实战研究
7月3日更新
近几日尝试编译了基于 Linux 6.6 的固件,以及解决相关驱动问题。
结果是可以启动,但是以太网部分瘫痪,eth、switch、wlan 都无法正常工作。
另外编译过程中 airoha_eth.c 存在问题,使用 patch 解决了(编译报错,但是无法判断该驱动是否正确),不知道是否是因为这个问题导致以太网无法工作。还有 Airoha spi 驱动的问题需要解决。
IOWrt Airoha integration 项目可以当作参考,虽然他们开源了一部分代码,但是仍然有很多门槛,无法一步到位直接使用。
7月6日更新
这个 SoC 网络部分的驱动或许可以结合 en7521 和 an7581 的驱动代码,en7562 很明显是迭代过程的产品,en7521 有泄露的驱动代码,an7581 的驱动代码是官方开源的,但是这种没有 datasheet 的产品,寄存器地址、寄存器位的含义都不清楚,无法进行驱动开发。
还有我尝试在编译了 arm64 的内核,因为某些驱动原生是 arm64 开发的,不清楚是否兼容 v7l 内核,但是编译出来的内核无法正常开机,启动内核后直接 reset cpu。
捋一捋,可以发现:
frame_engine 基于 en7521 的 frame_engine 并加上了一些 PPE/NPU 还有一些 ONU 相关的特性
wed/wdma 兼容 en751221
npu 可能是 an7581 npu 的前身
watchdog 兼容 en7521 的 watchdog
关键的 system-control 部分,我不太清楚,因为 reset-controller/clock-controller 令人折磨,不清楚这个 SoC 是如何工作的。
但是 an7581 的以太网已经是 eth + switch 的形式了,而加速器部分貌似只使用了 npu,wed、wdma 没有看见相关定义
wed 见于 mt7622,而 mt7622 上有 wed0、wed1,而该 SoC 上是 wed0、wed2、wed_test,暂时不知道他们的关系。wdma 见于 mt7623。
真是无语了,明明他们每个芯片都在迭代更新,增加了很多特性,结果相关代码名称都叫 ecnt_eth/airoha-eth/etc.,导致我以为他们是同一个驱动,结果不是的,寄存器地址、寄存器位的含义都不一样,实际上是不能通用的,甚至是不能兼容的。
关于 uboot
目前该 uboot 是配合 5.4 内核使用的,采用 a/b 分区的方式,使用了 ATF2_1 的 U-Boot2014。
但是据说他们内部有一个基于 uboot-2023 开发的版本,但是似乎没有给消费者使用。
github 上有一个 atf-airoha 提供了一个基于 airoha 的 atf,可以尝试移植。
这个是给 ATF-2024 版本使用的,看似他开源了,但是实际上缺少了关键的 DRAMC 初始化代码以及 EFUSE/EFUSE_LOAD 相关的代码,所以无法使用。
但是其实无所谓的,因为uboot该有的功能原版都有。只需要使用时注意备份 uboot 环境变量就行。
虽然 tftpboot 启动不会破坏分区结构并且还是只读的,但是可能会破坏 uboot 环境变量。
所以需要在启动前备份 uboot 环境变量。
1 | printenv |
将输出的内容保存到一个文件中。
当环境变量被破环导致无法启动后,可以使用以下命令恢复:
1 | env default -a # 恢复默认环境变量 |
然后参照之前的环境变量,重新设置。
1 | env delete <variable_name> # 删除某个变量 |
然后启动
1 | flash imgread 2048;\bootm |
总结
目前的结论是:
目前主线 Linux/OpenWrt 可以直接启动所有 airoha mips/arm 的设备。
但是其他部分,比如 pcie/usb/eth/switch/gpio/watchdog/pinctrl/pwm/wed/npu/etc. 都需要特定的驱动支持。而这些驱动可以期待 airoha/mediatek 开源,或是从大厂的 gpl 代码中获取。
相关开源
8月4日更新
通过大厂的gpl开源,我们仍然能够获取一些东西
比如:
netgear gpl 机型 EXS27(BE5000, AN7563PT) 基于 OPENWRT 21.02 mediatek feeds, kernel 5.4
zyxel gpl 机型 px3321-t1(AX3000, AN7529CT) 基于 OPENWRT 14.07, kernel 4.4
netgear的代码倒是比较规范,可以直接使用,但是环境官方没有说明,按照本博客最前面提供的环境进行配置,结合zyxel的环境配置即可,zyxel 的代码需要移植 itb 镜像的打包方法,并且禁用 lzma,改用 gzip 压缩
TP-Link(联州) 也有一些 GPL 开源,但是实际上代码编译不出来,也全是类似 .obj 的文件,无法使用。
比如 XC220, XX230V 等等
可以通过移植来支持其他机型,两款机型的 GPL 代码应该能够支持 airoha wifi6/7 基于 en7523 的机型(en7529ct/en7562ct/an7563pt)
以及一些开源的项目
比如:
atf-airoha, 适用于 Airoha SoC 的 ARM Trusted Firmware
keenetic sdk, 适用于 Keenetic 路由器的开源项目,目前适配了 en7512/en7516/en7528
但是呢,由于不知道这些基于 en7523 的型号更新了什么东西,所以驱动也不一定通用,目前可以知道的是,en7529/en7562 是同代产品,但是是否能够用于最初的 en7523 吗,这不一定,至于 en7562 -> en7563,虽然是改进后支持 wifi7,但是有新增了很多特性。
我收集制作了一个基于 en7523 的 SoC 的相关资料的合集,里面包含了相关的文档、代码、以及一些分析资料。还有一个 bootloader 的项目
airoha-collection
bootloader-en75xx
参考资料
TrendChip
EcoNet
MediaTek/SoC
Quantum Fiber W1700k support - For Developers - OpenWrt Forum
test_devkit_en7521_20161129.tgz
cjdelisle’s openwrt
Support for Zyxel - PX3321-T1
Zyxel PMG5617GA router OEM GPL source code a.k.a. OPAL based on OpenWRT 14.07
OpenWrt support for Zyxel PMG5617GA and Econet SoCs, first GPON support !?
atf-airoha
kernel-49
keenetic-sdk