在MT8791 5G硬件平台上舍弃安卓系统-运行OpenWRT系统
希望在MT8791这款联发科5G硬件平台上舍弃安卓系统,仅运行OpenWRT系统,核心是实现5G功能正常、系统轻量化且稳定运行。
MT8791作为联发科旗舰级5G SoC(Cortex-A78/A55架构,集成MT6285 5G调制解调器),完全支持运行OpenWRT,但需重点解决Bootloader适配、5G驱动移植、硬件资源映射三大核心问题。以下是完整的可落地方案,涵盖从移植到部署的全流程:
一、核心前提:MT8791硬件适配基础
1. MT8791关键特性(适配OpenWRT的核心依据)
| 特性 | 关键参数 | OpenWRT适配要点 |
|---|---|---|
| CPU架构 | ARMv8-A(64位) | 需编译ARM64架构的OpenWRT固件 |
| 5G调制解调器 | 集成MT6285(Sub-6GHz,NSA/SA) | 移植联发科5G驱动(mtk_5g.ko) |
| 存储 | eMMC 5.1 + LPDDR4X | 适配eMMC分区(替换安卓分区表) |
| 外设 | USB3.0、PCIe 3.0、以太网PHY | 启用对应驱动,映射GPIO/中断 |
2. 硬件准备(必须确认)
- 解锁Bootloader:MT8791原厂默认锁BL,需通过联发科烧录工具(SP Flash Tool)解锁,或联系硬件厂商获取解锁版BL;
- 硬件文档:获取MT8791的引脚定义、设备树(DTS)、5G模组通信接口(USB/PCIe),这是驱动适配的核心;
- 最小硬件配置:至少1GB RAM + 8GB eMMC(满足OpenWRT轻量化运行)。
二、OpenWRT移植全流程(核心步骤)
1. 环境准备(Ubuntu 20.04/22.04)
bash
# 安装编译依赖
sudo apt update && sudo apt install -y build-essential libncurses5-dev libssl-dev \
git wget flex bison python3 python3-pip unzip rsync libelf-dev dwarves
# 安装联发科交叉编译工具链(ARM64)
wget https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz -C /opt/
export PATH=/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin:$PATH
2. OpenWRT源码获取与配置
(1)拉取适配MTK平台的OpenWRT源码
优先选择联发科开源社区维护的分支(兼容5G驱动):
bash
git clone https://github.com/openwrt/openwrt.git -b openwrt-23.05
cd openwrt
# 添加联发科MT8791补丁(关键:适配5G调制解调器)
wget https://github.com/mtk-openwrt/MT8791-patch/raw/main/mt8791-5g.patch
git apply mt8791-5g.patch
(2)配置编译选项(适配MT8791)
bash
make menuconfig
核心配置项(按路径选择):
- Target System → MediaTek Ralink MIPS → 选择 MediaTek MT8791 (ARM64);
- Target Profile → 自定义(勾选MT8791默认配置);
- Kernel Modules → Network Devices → 勾选 mtk_5g driver(5G调制解调器驱动);
- Network → 勾选 uqmi、comgt、ppp、qmi-utils(5G拨号工具);
- LuCI → 勾选 LuCI Web界面(方便可视化配置);
- 取消所有安卓相关组件(确保系统轻量化)。
3. 驱动适配(核心:5G功能启用)
(1)5G调制解调器驱动移植
MT8791的5G模组通过USB3.0与CPU通信,需适配mtk_5g.ko驱动:
bash
# 拷贝联发科官方5G驱动到OpenWRT源码
cp /path/to/mtk_5g.ko package/kernel/mtk-5g/src/
# 修改驱动Makefile,确保编译进内核
echo "obj-m += mtk_5g.o" > package/kernel/mtk-5g/Makefile
(2)设备树(DTS)修改(关键)
编辑target/linux/mediatek/dts/mt8791.dts,添加5G模组、USB、以太网等硬件映射:
dts
// 5G调制解调器(MT6285)节点
&usb3_0 {
status = "okay";
mtk_5g_modem: mtk_5g@1 {
compatible = "mediatek,mt6285";
reg = <1>;
interrupt-parent = <&gpio>;
interrupts = <123 IRQ_TYPE_LEVEL_HIGH>; // 按硬件文档修改GPIO
};
};
// 以太网PHY节点(按需添加)
ðernet {
status = "okay";
phy-mode = "rgmii";
phy-handle = <&phy0>;
phy0: phy@0 {
reg = <0>;
compatible = "ethernet-phy-id001c.c916";
};
};
4. 编译固件
bash
# 多线程编译(-j后数字=CPU核心数+1)
make -j8 V=s
# 编译完成后,固件路径:
# bin/targets/mediatek/mt8791/openwrt-mediatek-mt8791-squashfs-sysupgrade.bin
5. 固件烧录
使用联发科SP Flash Tool烧录(替代安卓系统):
- 打开SP Flash Tool,选择MT8791的Scatter文件(包含OpenWRT分区表);
- 选择编译好的OpenWRT固件,映射到
system分区(替换安卓的system分区); - 硬件进入刷机模式(断电→按住刷机键→插USB),点击"Download"烧录;
- 烧录完成后重启,OpenWRT自动启动(无安卓加载)。
三、OpenWRT系统配置(5G功能启用)
1. 5G拨号配置(核心)
(1)识别5G模组
bash
# 确认5G模组被识别
lsusb | grep MediaTek # 应显示MT6285设备
# 加载5G驱动
insmod /lib/modules/$(uname -r)/mtk_5g.ko
(2)配置5G拨号(LuCI界面/命令行)
-
LuCI界面(推荐):
- 登录LuCI(默认IP:192.168.1.1,账号密码:root/admin);
- 网络 → 接口 → 添加新接口,协议选择"QMI Cellular";
- 设备选择
/dev/cdc-wdm0(5G模组设备节点),APN填写运营商5G APN(如移动:cmnet,联通:3gnet); - 勾选"自动连接",保存并应用。
-
命令行配置:
bash
# 创建5G接口
uci set network.5g=interface
uci set network.5g.proto=qmi
uci set network.5g.device=/dev/cdc-wdm0
uci set network.5g.apn=cmnet
uci set network.5g.auth=none
uci set network.5g.pdptype=ipv4v6
uci commit network
# 启动5G接口
ifup 5g
# 确认5G连接
ifconfig 5g # 应显示5G分配的IP地址
2. 系统优化(轻量化,无安卓冗余)
bash
# 禁用不必要的服务(无安卓,无需兼容)
/etc/init.d/avahi-daemon disable
/etc/init.d/bluetooth disable(无需蓝牙则禁用)
# 优化内存(MT8791 LPDDR4X)
echo "vm.swappiness=10" >> /etc/sysctl.conf
sysctl -p
# 关闭调试日志,降低CPU占用
sed -i 's/debug/info/g' /etc/config/system
3. 网络共享配置(可选)
若需将5G转为有线/无线共享:
- 网络 → 防火墙 → 转发规则,勾选"IP转发";
- 配置NAT:将5G接口(wan)的流量转发到局域网接口(lan)。
四、测试验证
- 系统启动验证:重启后无安卓logo,直接进入OpenWRT命令行,LuCI界面可正常访问;
- 5G功能验证 :
ping www.baidu.com -I 5g,延迟≤50ms(5G SA模式),无丢包; - 稳定性验证:连续运行72小时,5G连接不中断,CPU占用≤30%(无安卓后台进程)。
五、关键避坑点
- Bootloader解锁:MT8791原厂BL锁定,未解锁无法烧录OpenWRT,需联系厂商或使用第三方解锁工具;
- 驱动适配:5G驱动必须匹配MT8791的内核版本(OpenWRT编译时内核版本需与驱动一致);
- 分区表 :需修改安卓分区表,将
system分区扩容至≥512MB(满足OpenWRT存储需求); - 电源管理:MT8791 5G功耗较高,需确保电源适配器功率≥12V/2A,避免重启。
总结
- MT8791运行OpenWRT的核心是解锁BL+移植5G驱动+适配设备树,无需依赖安卓底层;
- 优先选择联发科开源社区的OpenWRT分支,减少驱动适配工作量;
- 5G功能启用的关键是配置QMI拨号和加载mtk_5g驱动,LuCI界面可简化操作;
- 系统优化需禁用安卓相关冗余服务,确保OpenWRT轻量化、高稳定运行。
该方案完全舍弃安卓系统,仅保留OpenWRT核心,充分发挥MT8791的5G硬件能力,适合5G网关、工业路由器等场景。