飞利浦 幻域3000 philips hy3000 探索

其实这台机器很早就有 Openwrt 固件和 UBoot 了,只是奸商们不愿意放出来(特指某黄鱼上卖100-200的垃圾价格)。

所以只能重复造轮子了。

然后我从本地代理免费拿了一台。

翻车!!!

配置信息

CPU: MT7981BA
RAM: 1GB DDR4 SCY DP4DQ8C16FJB
ROM: 128GB eMMC SCY E128CYMT2ABE00
Switch: MT7531AE
RF: MT7976CN

参考 [1]

飞利浦幻域3000路由器项目白皮书

2.4G和5G天线都是2个3DBi的单频PCB天线

PCB 图

有几个空焊盘,其中有USB的、FLASH的、ETH的

USB2.0 的空焊盘,可以补焊一个 90度弯角测查式USB2.0母座,补两个数据线补0欧的电阻,但是因为是USB2.0的,速率低,干扰小,所以也不补什么电阻电容了,直接一坨锡焊上去就行了。

空的8脚焊盘疑似是 FLASH 的。

空的 60 PIN QFN 焊盘疑似是 EN8811H,在香蕉派 BPI R3迷你开发板上也有类似的芯片。就算知道了,但是没什么用。。。

原版固件过滤 PCDN

将其链接再另一台具备 ADGUARD 的设备上,添加以下规则

1
2
3
4
5
6
7
8
9
10
data-video.71edge.^$important
ipes-gin.iqiyi.com^$important
msg.71edge.com^$important
app. jinyudalu.com^$important
flux-sec.71edge.com$important
udp-app.jinyudalu.com^$important
www.taobao.com^$client='192.168.10.116'
www.baidu.com^$client='192.168.10.116'
policy-video.71edge.com^$important
flux.hcdn.71edge.com^$important

原版固件开启 SSH Telnet

有人反映新版固件里面 sshdtelnetd 被删除了,导致无法开启 SSH 和 Telnet。

解包发现 bin\start_cdn.sh 里面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
random_char () {
local char_set="${1:-0-9a-zA-Z}"
local random_num
random_num="$(head /dev/urandom | LC_ALL=C tr -dc "$char_set" | head -c 1)"
echo -n "$random_num"
}

password=""
for i in {1..12}; do
password="${password}$(random_char)"
done


cus=`factory_hm info | grep telnet | cut -d '=' -f 2`
if [ "1" == "$cus" ]; then
killall -9 telnetd
mv /usr/sbin/telnetd /usr/sbin/tn
p_file="/lib/pwd_cfg"
p_s=${password}"-7RU-"
if [ ! -f "$p_file" ];then
(echo $p_s;sleep 1;echo $p_s) | passwd > /dev/null
fi
fi

这个是随机生成一个密码,然后使用 passwd 命令设置密码。以及将 telnetd 重命名为 tn,然后杀掉 telnetd 进程。

但是 openwrt 有一个 ubus 机制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
================= FAILSAFE MODE active ================
special commands:
* firstboot reset settings to factory defaults
* mount_root mount root-partition with config files

after mount_root:
* passwd change root's password
* /etc/config directory with config files

for more help see:
https://openwrt.org/docs/guide-user/troubleshooting/
- failsafe_and_factory_reset
- root_password_reset
=======================================================

可以进入 failsafe 模式,使用 passwd 命令修改密码

然后使用 ubus 修改密码

1
ubus call luci setPassword '{ "username": "root", "password": "test" }'

参考 Failsafe mode, factory reset, and recovery mode

重设密码后,使用 root 用户登录,将 tn 重命名为 telnetd,然后启用。

参考 [2]

下载文件

下载文件

暂未提供

个人技术力有限,还在探索中,故暂时不提供某些文件。


以下是我自行制作的固件和 UBoot

但是没有经过测试,可能会导致设备变砖,请谨慎使用

固件和 UBoot
  • fip-uboot

  • immortalwrt

  • autoBuild

如果有什么问题,邮件联系我,或者在 GitHub 上提 issue。

TTL 连接

拆机,找到主板上的串口,连接 RX TX GND(可能需要焊接)。

以 CH340G 为例

  1. 安装驱动

  2. 连接 RX TX GND

  3. 打开设备管理器,查看 COM 口号(假设串口号是COM9)

    1
    start devmgmt.msc
  4. 关闭防火墙以及安全软件,使用 Putty、Xbash 或者 HyperTerminal 等串口调试助手

  5. 打开串口调试助手,设置波特率115200,数据位8,停止位1,无校验位,串口COM9

  6. 选择对应的 COM 口,点击打开串口

  7. 连接成功后,打开路由器电源

备份固件

暂未完成… 因为有人已经做了,我就不做了,只是说一下大致的步骤

参考[3] [4]

1
2
3
4
5
6
# 查看分区信息
fdisk -l
# emmc 分区
cat /proc/partitions
# nand 分区
cat /proc/mtd

使用 dd 命令备份分区

1
2
3
4
5
6
7
8
# dd if=/dev/mmcblk0boot0 of=/mnt/mmcblk0p8/mmcblk0boot0_bl2.bin conv=fsync
dd if=/dev/mmcblk0p1 of=/mnt/mmcblk0p8/mmcblk0p1_PMBR.bin conv=fsync
dd if=/dev/mmcblk0p2 of=/mnt/mmcblk0p8/mmcblk0p2_u-boot-env.bin conv=fsync
dd if=/dev/mmcblk0p3 of=/mnt/mmcblk0p8/mmcblk0p3_factory.bin conv=fsync
dd if=/dev/mmcblk0p4 of=/mnt/mmcblk0p8/mmcblk0p4_fip.bin conv=fsync
dd if=/dev/mmcblk0p5 of=/mnt/mmcblk0p8/mmcblk0p5_kernel.bin conv=fsync
dd if=/dev/mmcblk0p6 of=/mnt/mmcblk0p8/mmcblk0p6_rootfs.bin conv=fsync
dd if=/dev/mmcblk0p7 of=/mnt/mmcblk0p8/mmcblk0p7.bin conv=fsync

用命令或者 winscpxshell 等工具传输到本地

分区信息

原厂分区信息

1
2
3
4
5
6
7
8
9
10
11
guid/type=PartitionTypes.LinuxFilesystem first-block=0 size=34 name=gpt
guid/type=PartitionTypes.LinuxFilesystem first-block=8192 size=1024 name=u-boot-env
guid/type=PartitionTypes.LinuxFilesystem first-block=9216 size=4096 name=factory
guid/type=PartitionTypes.LinuxFilesystem first-block=13312 size=4096 name=fip
guid/type=PartitionTypes.LinuxFilesystem first-block=17408 size=65536 name=kernel
guid/type=PartitionTypes.LinuxFilesystem first-block=82944 size=1024001 name=rootfs
guid/type=PartitionTypes.LinuxFilesystem first-block=1107968 size=20480 name=
guid/type=PartitionTypes.LinuxFilesystem first-block=1128448 size=8388608 name=
guid/type=PartitionTypes.LinuxFilesystem first-block=9517056 size=230686720 name=
guid/type=PartitionTypes.LinuxFilesystem first-block=240203776 size=20480 name=
guid/type=PartitionTypes.LinuxFilesystem first-block=240224256 size=4028383 name=

提取 dts

先取得 kernel.bin

extract-dtb

1
2
git clone https://github.com/PabloCastellano/extract-dtb.git
cd extract-dtb

转换 bin 到 dtb

1
2
./extract-dtb/extract-dtb.py kernel.bin
cd dtb

得到的较大的文件就是需要的 dtb 文件(02_xxx.dtb)

1
sudo apt install device-tree-compiler
1
dtc -I dtb -O dts -o mt7981-ph-hy3000.dts './mt7981-ph-hy3000.dtb'

原厂的参数基本是16进制的,但是要适配 Openwrt 的话,必须是10进制的,所以需要转换一下

参考 [5]

制作好的 dts

HY3000_DTS

刷写 UBOOT

参考 [6] [7] [8]

fip.bin 为某个机子的 uboot;
mtk_uartboot 是一个通过ttl接口,把uboot通过ttl传入,ram的一种启动方式,通过mtk_uartboot启动7981设备的时候除了需要uboot还需要BL2,这个BL2和刷机用的BL2不一样,这个是ram管理用的BL2,刷机是Flash用的BL2,请不要搞混。
BL2 是用于关闭安全引导的,gpt.bin 是分区表。

这个设备没有安全引导,所以无需刷写 BL2,直接刷 fip.bin 即可。

1
.\mtk_uartboot\mtk_uartboot.exe -s COM9 -p .\mtk_uartboot\mt7981\mt7981-ddr4-bl2-ram-boot.bin -a -f .\fip\mt7981_philips_hy3000-fip.bin --brom-load-baudrate 115200 --bl2-load-baudrate 115200

或者使用脚本 ph-hy3000.bat

1.运行命令后会出现等待握手信息

1
2
Using serial port: COM9
Handshake...

2.然后路由器上电开机,握手成功CMD会输出sending payload信息开始发送bl2

1
2
3
4
5
6
hw code: 0x7981
hw sub code: 0x8a00
hw ver: 0xca00
sw ver: 0x1
Baud rate set to 115200
sending payload to 0x201000...

3.发送完成加载bl2会输出信息同时开始发送fip

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Checksum: 0x3c82
Setting baudrate back to 115200
Jumping to 0x201000 in aarch64...
Waiting for BL2. Message below:
==================================
NOTICE: BL2: v2.10.0 (release):v2.4-rc0-5845-gbacca82a8-dirty
NOTICE: BL2: Built : 20:30:05, Feb 2 2024
NOTICE: WDT: Cold boot
NOTICE: WDT: disabled
NOTICE: CPU: MT7981 (1300MHz)
NOTICE: EMI: Using DDR4 settings
NOTICE: EMI: Detected DRAM size: 1024MB
NOTICE: EMI: complex R/W mem test passed
NOTICE: Starting UART download handshake ...
==================================
BL2 UART DL version: 0x10
Baudrate set to: 115200

此时在上传fip,600KB的fip使用1500000波特率只需要几秒钟,低波特率则大概45秒。此时如果需要进入uboot webui可以直接按住reset按键不放,等待uboot指示灯闪烁并进入uboot。如果没有按reset会直接启动固件,进入固件再恢复刷砖的分区也行。

4.fip加载完后输出

1
2
3
4
FIP sent.
==================================
NOTICE: Received FIP 0x90b59 @ 0x40400000 ...
==================================

此时程序已经执行完,已经加载uboot,如果不进行打断将会直接启动固件。

参考 [9]

所以需要立即关闭cmd窗口,同时其他ssh工具连接串口(比如 putty,XShell),进入后使用键盘上下键移动光标

晚了打断启动,可以试试按路由复位键,重复以上步骤

注意:ttl加载uboot,可能有个问题,就是你来不及打开com口,uboot就跳去引导固件了,启动不成功又去加载你闪存的uboot,这就成了个环,你又不能提前打开com口。你又不知道。所以试试安住reset键,再给路由器上电。

此时输出

1
MT7981>

表示已经进入uboot命令行

1
MT7981> bootmenu

进入uboot菜单

5.进入uboot webui

进入路由器进入uboot后,电脑设置IP为192.168.1.254,子网掩码为255.255.255.0

先ping一下路由器,确认连接正常

1
ping 192.168.1.1

如果ping不通,检查网线是否连接好,或者路由器是否正常工作。

先刷写 uboot

192.168.1.1/uboot.html 上传 mt7981_philips_hy3000-fip.bin

然后刷 gpt(可选)

192.168.1.1/gpt.html 上传 Philips hy3000-PMBR-gpt.bin

刷新固件

uboot 下,进入 192.168.1.1 上传固件

恢复原厂固件

暂未完成…

参考 [10]

使用 dd 命令

暂时没有回到原厂的想法,毕竟一个PCDN,没什么用。

定制环境搭建

使用 VirtualBox 搭建 Ubuntu 64 位虚拟机

推荐使用 2204,其他版本也可以

其他虚拟机也可以,VMware 也可以

跳过自动安装,选择 Try Ubuntu 进入系统

一切默认即可,最小安装

可以先试用系统,更改分辨率,然后再安装系统,这样比较好操作

安装完重启虚拟机,安装增强功能。

共享剪切板与拖放改为双向,共享文件夹改为一个方便的目录,挂载点改为 /home/username/shareDir,自动挂载,固定分配

关闭屏保、息屏以及省电相关设置

apt 升级(非必须)

1
2
sudo apt update
sudo apt upgrade

恢复默认源(非必须)

参考 [11],有时候系统会默认只有国内源,然而有一些包没有,就需要恢复默认源(追加即可),完成后进行上一步 apt 升级。

1
sudo gedit /etc/apt/sources.list

安装软件包

1
sudo apt install curl

配置环境

1
sudo bash -c 'bash <(curl -sL https://build-scripts.immortalwrt.eu.org/init_build_environment.sh)'

定制 immortalwrt 固件

参考 [12] [13] [14]

  1. 克隆仓库

    1
    git clone --depth=1 https://github.com/hanwckf/immortalwrt-mt798x.git
  2. 进入目录

    1
    cd immortalwrt-mt798x
  3. 获取最新 feed

    1
    ./scripts/feeds update -a

    如果出现报错(即有error或者xx停止等字样) 参考 [15]

    1
    2
    3
    4
    5
    6
    7
    8
    9
    Build dependency: Please install ncurses. (Missing libncurses.so or ncurses.h)

    Build dependency: Please install a static zlib. (Missing libz.a or zlib.h)

    Build dependency: Please install the openssl library (with development headers)

    Build dependency: Please install GNU 'awk'

    Build dependency: Please install the Subversion client

    当前编译环境缺少依赖组件

    (可选,出现问题后使用)可一次性全部安装所需依赖组件,输入:

    1
    sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev subversion git-core gawk asciidoc libz-dev zlib1g-dev libssl-dev
  4. 链接 feed

    1
    ./scripts/feeds install -a
  5. 选择配置

    1
    cp -f defconfig/mt7981-ax3000.config .config
  6. 使用 make menuconfig 选择编译选项

    1
    make menuconfig
  7. 配置选项

    • Target System 选择 MediaTek Ralink ARM
    • Subtarget 选择 MT7981
    • Target Profile 选择 philips-hy3000,但是目前没有这个选项,查看 ### 适配 philips-hy3000
    • Kernel module -> File systems -> 添加 ext4、f2fs、brtfs 支持
    • 其他选项根据需要选择
    • <save> 保存配置
    • <exit> 退出配置
  8. 编译固件

    1
    make -j$(nproc) V=s

    -j$(nproc) 表示使用所有 CPU 核心进行编译
    -j1 表示使用单核编译
    -j8 表示使用八核编译
    V=s 表示显示详细编译信息
    V=sc 表示显示编译信息和警告
    V=99 表示显示所有编译信息

如果编译过程中出现错误,或者使用 Ctrl+C 中断编译,可以使用 make clean 清理编译缓存,然后重新编译。参考 [16]
linux 工具 quilt 可能会执行相当长时间,不要以为卡住了,不要中断编译,耐心等待。

编译完成后,固件文件在 bin 目录下

适配 philips-hy3000

对于没有配置的情况,我们需要手动添加配置文件

所以需要拆机,查看具体的硬件信息,可以查看 ## 配置信息 中的配置

区分单臂路由,看 dts 中的 gmac,单臂路由器只有一个 gmac,其他路由器有两个 gmac。或者拆开看主板上的PCB布局

所以寻找一个类似的路由器,在其基础上进行修改,比如 SL-3000 这款机型就比较接近

有关 dts 的部分在前文中已经提到过了,这里就不再赘述了

  1. 进入 target/linux/mediatek/files-5.4/arch/arm64/boot/dts/mediatek/ 目录创建mt7981-philips-hy3000.dtsmt7981-sl3000.dts 为基础,进行修改

    需要修改的地方有:

    • key、leds、gsw、eth、hnat

    • 这个设备只有红、绿两种灯

    gpioaddress(10)level
    led:red8high
    led:green13low
    key:reset1low
    key:mesh0high

    这里没有用原厂的网络接口配置方法,使用了 mt7981-360t7-base.dtsi 的配置方法

    参考 [17]

    还有就是 USB,即xhci,出场主板上就没有焊接,可以不需要,需要配的话就照着2.0的来就行了

    1
    2
    3
    @xhci {
    status = "okay";
    }
  2. 打开 target\linux\mediatek\mt7981\base-files\etc\board.d\02_network 文件

    根据 factory 里面的信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    label=wan=E0:FF:FF:FF:FF:3C
    ra0=E0:FF:FF:FF:FF:3D
    rax0=E0:FF:FF:FF:FF:3E
    eth1=E0:FF:FF:FF:FF:3F
    eth2=E0:FF:FF:FF:FF:40
    eth3=E0:FF:FF:FF:FF:3B
    eth4=E0:FF:FF:FF:FF:3C

    sn=PH0XXXXXXXXX9

    0x74 = E0:FF:FF:FF:FF:3D
    0x10000 = PH0XXXXXXXXX9

    适配的接口信息 02_network

    1
    2
    3
    4
    5
    philips,hy3000)
    ucidef_set_interfaces_lan_wan "eth0" "eth1"
    ucidef_add_switch "switch0" \
    "1:lan" "2:lan" "3:lan" "0:wan" "6u@eth0" "5u@eth1"
    ;;

    所以添加网络mac信息

    1
    2
    3
    4
    5
    philips,hy3000)
    lan_mac=$(mmc_get_mac_binary factory 0x74)
    wan_mac=$(macaddr factory $lan_mac 1)
    label_mac=$wan_mac
    ;;
  3. 打开 target\linux\mediatek\mt7981\base-files\lib\preinit\90_extract_caldata 文件函数 do_extract_caldata()中添加 philips-hy3000 的信息

  4. 打开 target\linux\mediatek\mt7981\base-files\lib\upgrade\platform.sh 文件函数 platform_do_upgrade()platform_check_image() 中添加 philips-hy3000 的信息

  5. 打开 target\linux\mediatek\image\mt7981.mk 文件添加适配信息 参考[18]

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    define Device/philips_hy3000
    DEVICE_VENDOR := Philips
    DEVICE_MODEL := HY3000
    DEVICE_DTS := mt7981-philips-hy3000
    DEVICE_DTS_DIR := $(DTS_DIR)/mediatek
    SUPPORTED_DEVICES := philips,hy3000
    DEVICE_PACKAGES := $(MT7981_USB_PKGS) f2fsck losetup mkf2fs kmod-fs-f2fs kmod-mmc \
    luci-app-samba4
    IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
    endef
    TARGET_DEVICES += philips_hy3000
  6. 打开 defconfig\mt7981-ax3000.config 文件添加 philips-hy3000 的信息

    1
    2
    CONFIG_TARGET_DEVICE_mediatek_mt7981_DEVICE_philips_hy3000=y
    CONFIG_TARGET_DEVICE_PACKAGES_mediatek_mt7981_DEVICE_philips_hy3000=""

定制 uboot

参考 [14:1] [19] [20]

1
2
git clone git clone https://github.com/hanwckf/bl-mt798x.git
cd bl-mt798x

UBoot 有 2022 与 2023 版本,根据自己的需求选择

以相近设备的配置为基础进行修改

atf-20220606-637ba581b\configs\mt7981_philips_hy3000__defconfig
uboot-mtk-20220606\configs\mt7981_philips_hy3000_defconfig

修改 uboot-mtk-time/arch/arm/dts 中的类似机型 dts 文件

参照 openwrt 的 dts 文件进行修改

build.sh 中修改相关信息,比如需要编译的版本 22/23,如果编译22版,则把23版注释掉

然后编译

1
SOC=mt7981 BOARD=philips_hy3000 ./build.sh

编译后的文件在 output 目录下

GPT&BL2

参考 [21] [22] [23] [24] [25] [26]

bl-mt798x 项目中

atf/tools/dev/gpt_editor 目录下存在 mtk_gpt.py 脚本文件

编写相应的 gpt.json 分区表

参考 [10:1]

使用该脚本即可生成对应的 gpt.bin 文件

在对应设备的 deconfig 文件中添加 CONFIG_TARGET_ALL_NO_SEC_BOOT=y

然后编译 bl-mt798x 项目,生成的 bl2.bin 文件在 output 目录下

这台设备不需要 BL2。

新的 ATF arm-trusted-firmware

这是复刻自 ARM-software 仓库的一个分支

主线 FIT

暂未完成…

参考 [24:1] [27] [28] [29] [30] [31]

在 oss 项目 [31:1] 观察到 dts 文件中有 mtd 相关的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mtd-layout {
layout@0 {
label = "default";
cmdline = "console=ttyS0,115200n8 earlycon=uart8250,mmio32,0x11002000";
mtdids = "nmbm0=nmbm0";
mtdparts = "nmbm0:1024k(bl2),512k(u-boot-env),2048k(Factory),2048k(fip),512k(product_info),512k(kdump),64512k(ubi)";
};

layout@1 {
label = "ubi-107m";
mtdids = "nmbm0=nmbm0";
mtdparts = "nmbm0:1024k(bl2),512k(u-boot-env),2048k(Factory),2048k(fip),512k(product_info),512k(kdump),109568k(ubi)";
};
};

但是很显然,这是 nand 的配置

同时观察到 atf deconfig 文件中

1
2
- CONFIG_TARGET_FIP_NO_SEC_BOOT=y
+ CONFIG_TARGET_ALL_NO_SEC_BOOT=y

随后,我在 openwrt 项目的github页面找到了一个设备的 dts mt7981b-unielec-u7981-01-emmc.dts

里面关于 emmc 的处理是这样的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
&mmc0 {
pinctrl-names = "default", "state_uhs";
pinctrl-0 = <&mmc0_pins_default>;
pinctrl-1 = <&mmc0_pins_uhs>;
bus-width = <8>;
max-frequency = <52000000>;
cap-mmc-highspeed;
vmmc-supply = <&reg_3p3v>;
non-removable;
status = "okay";

card@0 {
compatible = "mmc-card";
reg = <0>;

block {
compatible = "block-device";
partitions {
block-partition-env {
partname = "u-boot-env";

nvmem-layout {
compatible = "u-boot,env";
};
};

block-partition-factory {
partname = "factory";

nvmem-layout {
compatible = "fixed-layout";
#address-cells = <1>;
#size-cells = <1>;

eeprom_factory_0: eeprom@0 {
reg = <0x0 0x1000>;
};

macaddr_factory_4: macaddr@4 {
compatible = "mac-base";
reg = <0x4 0x6>;
#nvmem-cell-cells = <1>;
};

macaddr_factory_1000: macaddr@1000 {
compatible = "mac-base";
reg = <0x1000 0x6>;
#nvmem-cell-cells = <1>;
};
};
};
};
};
};
};

我不能确定这是否就是 emmc 主线 FIT 的处理方式,然后我找到了 mt7981b-cmcc-rax3000m-emmc.dtso

进行了确认,这种写法确实是 emmc 的处理方式。

参考 [32] [33]

可以确定,即便编写了相关 dts,仍然不能够支持主线 FIT 的 ibt 固件,需要刷下对应 preloader

在 openwrt 的下载页面 Index of (root) / releases / 24.10.0 / targets / mediatek / filogic / 可以找到很多 preloader 的固件

我不太确定是否使用支持 FIT 的 dts 进行编译,就可以自动生成 preloader 的固件

我在openwrt官方仓库里找到了该提交 423186d

该提交详细展示了如何适配 FIT

以及 immortalwrt 的仓库找到了该提交

  • 76bc820 mediatek: add CMCC RAX3000M eMMC custom U-Boot layout

  • 38e8762 mediatek: add ubootenv support for cmcc rax3000m emmc/nand version

  • d17eb36 arm-trusted-firmware-mediatek: add emmc/spim-nand ddr4 build for mt7981

  • eb105e5 mediatek: convert eeprom/macaddr to nvmem format for cmcc rax3000m

  • 38e8762 mediatek: add ubootenv support for cmcc rax3000m emmc/nand version

可以推测,进入主线 FIT 的设备将会在编译的时候自动生成 bl31-uboot,preloader

不过好像这个 FIT 也没什么用,懒得研究了。

自动化

参考 [34]

  • fip-uboot

  • Actions-OpenWrt

复刻到自己的 GitHub 上,运行 Actions 即可。

超频

参考 [35] [36]

据说这颗芯片具有较大的超频潜力。

就是制作超频 BL2。

参考 [37] [38] [39]

251218填坑

其实相对于 [35:1] 的方法而言,还有更简单的方法

克隆 hanwckf 的 bl-mt798x 仓库

a/atf-20240117-bacca82a8/plat/mediatek/mt7981/drivers/pll/pll.c 文件进行修改

atf 版本根据自己的需要选择

方法与 [35:2] 类似

0001-atf2024-overclocing-mt7981-to-1.6GHz.patch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 .../plat/mediatek/mt7981/drivers/pll/pll.c    | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/atf-20240117-bacca82a8/plat/mediatek/mt7981/drivers/pll/pll.c b/atf-20240117-bacca82a8/plat/mediatek/mt7981/drivers/pll/pll.c
index 6a064d203..77d935811 100644
--- a/atf-20240117-bacca82a8/plat/mediatek/mt7981/drivers/pll/pll.c
+++ b/atf-20240117-bacca82a8/plat/mediatek/mt7981/drivers/pll/pll.c
@@ -94,11 +94,20 @@ void mtk_pll_init(int skip_dcm_setting)
mmio_clrbits_32(MPLL_PWR_CON0, CON0_ISO_EN);

/* Set PLL frequency */
- mmio_write_32(ARMPLL_CON1, 0x82000000); /* 1.3G */
-
- //mmio_setbits_32(ARMPLL_CON0, 0x124); /* divider for 650M */
-
- mmio_setbits_32(ARMPLL_CON0, 0x114); /* divider for 1.3G */
+ // 251218: overclock hack
+ NOTICE("THIS IS AN OVERCLOKING BL2!\n");
+ NOTICE("set arm freq to 1.60 GHz:\n");
+
+ // mmio_write_32(ARMPLL_CON1, 0x82000000); /* 1.3G */
+ mmio_write_32(ARMPLL_CON1, 0x50000000); /* 1.6G */
+ // mmio_write_32(ARMPLL_CON1, 0x55000000); /* 1.7G */
+ NOTICE("ARMPLL_CON1 = 0x%x\n", mmio_read_32(ARMPLL_CON1));
+
+ // mmio_setbits_32(ARMPLL_CON0, 0x124); /* divider for 650M */
+ // mmio_setbits_32(ARMPLL_CON0, 0x114); /* divider for 1.3G */
+ mmio_clrbits_32(ARMPLL_CON0, 0x70); /* divider for >1.3G */
+ mmio_setbits_32(ARMPLL_CON0, 0x104);
+ NOTICE("ARMPLL_CON0 = 0x%x\n", mmio_read_32(ARMPLL_CON0));

mmio_setbits_32(NET2PLL_CON0, 0x114);
mmio_setbits_32(MMPLL_CON0, 0x124);
--
2.34.1

梅林的研究

在该项目中 asuswrt-merlin.ng

看到支持了 AX57_Go,这也是一款 mt7981 的路由器

但是由于 hy3000 这台设备是 emmc 的

梅林好像也没看见哪台设备适配 emmc

所以暂时不考虑

其实我挺喜欢梅林的,以前一直用的博通的路由器,买了几台华硕,组 mesh 很方便,配合梅林固件使用很省心,不用一直折腾,直到 WIFI6 时代,我也买了一台 RAX80,但是翻车了,现在博通的路由器也不行了,又贵又发热,还不开源。

后续

翻车了,后来怎么了,就是他们搞 PCDN 的要收回去升级,然后不给我了。。。

有小道消息说是 PCDN 的程序写的太烂,跑不起来,赚不到钱,我看了一下,原厂固件里有一个 start_yh 的二进制,估计就是这个程序了,确实看起来很简陋

故此无限期暂停对此的研究。

参考


  1. 飞利浦幻域3000首拆???? ↩︎

  2. 微加云(以及其他openwrt的设备)破解后台密码 ↩︎

  3. 360T7官方固件分区备份及刷回官方固件教程 ↩︎

  4. 360 T7 路由器 开启telnet及uboot控制台方法 ↩︎

  5. MT7986使用MT7531 Switch 的Device Tree 探討 ↩︎

  6. 飞利浦 幻域 3000 Philips hy3000 TTL刷机 救砖教程 ↩︎

  7. JCG Q30 PRO救砖教程,MTK mt798x 系列基本通用 ↩︎

  8. MediaTek Filogic 系列路由器串口救砖教程 ↩︎

  9. 诺基亚贝尔EA0326GMP (AX3000) TTL救砖时TFTP无效U-Boot console用loady模式刷回uboot ↩︎

  10. 京东云 AX6000 百里单分区刷机 + 回原厂 + TTL 救砖教程 ↩︎ ↩︎

  11. Ubuntu18.04 默认源 恢复默认源 恢复备份源 ↩︎

  12. immortalwrt-mt798x ↩︎

  13. immortalwrt-mt798x项目介绍 ↩︎

  14. ZhuanyiOp的个人空间-ZhuanyiOp个人主页-哔哩哔哩视频 ↩︎ ↩︎

  15. OpenWRT下载与编译 ↩︎

  16. openwrt编译笔记,有些技巧是自己试验出来的,很多人死也不肯说 ↩︎

  17. 讨论市售MT7981/MT7986/MT7988方案的GMAC到LAN连接的差异 ↩︎

  18. Network configuration /etc/config/network ↩︎

  19. bl-mt798x ↩︎

  20. mt798x uboot 功能介绍 ↩︎

  21. mtk 开源U-Boot ATF配置和编译教程 ↩︎

  22. arm-trusted-firmware ↩︎

  23. 【求助】关于刷入支持主线的u-boot的问题 ↩︎

  24. MT798x 支持主线 OpenWrt 的 U-Boot ↩︎ ↩︎

  25. 【2023-11-07】CMCC RAX3000M EMMC 64G mt7981 算力版 固件+ubootshu小白防砖教程 ↩︎

  26. 【教程】rax3000m emmc刷机 支持硬件QOS MT7981到底值不值 ↩︎

  27. 【网络】 bpi-r4, sd卡uboot,支持web刷写openwrt主线以及237固件! ↩︎

  28. bl-mt798x-oss ↩︎

  29. 移动RAX3000M 64G EMMC 算力版开启ssh以及刷uboot和刷机教程 ↩︎

  30. 【2023-11-07】CMCC RAX3000M EMMC 64G mt7981 算力版 固件+ubootshu小白防砖教程 ↩︎

  31. bl-mt798x-oss ↩︎ ↩︎

  32. U-Boot/Linux设备树简明使用手册 ↩︎

  33. DTS、DTSO、DTBO三种文件的关系及编译流程 ↩︎

  34. Actions-OpenWrt ↩︎

  35. OpenWrt One 路由器(MT7981,主线op)超频bl2编译教程 ↩︎ ↩︎ ↩︎

  36. T798X CPU超频1.65G/一键修改无线最大功率方法 ↩︎

  37. Openwrt Patch 制作及打补丁 ↩︎

  38. 如何给OpenWrt的源码打patch ↩︎

  39. 【openwrt学习笔记】新patch的制作和旧patch的修改 ↩︎