|
|
本帖最后由 WuSiYu 于 2024-12-9 22:23 编辑
近日OpenWrt官方出了台MT7981的路由器,就是价格非常感人,不过看在它带RTC、POE、GPIO、nor/nand双启动、type-c转串口、还有M2 nvme槽(以及情怀)的份上还是买了一台玩玩
这机器最大的短板就是弱鸡的双核1.3G的MT7981,跑nat+wifi到千兆就快能吃满CPU了(无offload情况),所以想着超个频
参考了论坛里大佬的帖子:https://www.right.com.cn/forum/f ... wthread&tid=8387979 ,不过里面的nand固件只有开NMBM的,这台机器没NMBM用不了,所以就自己摸索了下方法,发在这里以供他人参考,其他没NMBM的nand理论上也能用(但请先确定自己的环境能成功救砖bl2再刷)。我手里这台能从1.3G超到1.7G,跑源里的coremark能从4400分提高到5750分。之后再到1.76G时无线高负载时会重启,到1.8G时开机到一半就会死机,大概是这soc的极限了,求稳可以只超到1.6GHz,此时coremark为5400分
简而言之就是修改bl2的pll初始化代码,位置在这里:https://github.com/mtk-openwrt/a ... ivers/pll/pll.c#L97,修改PLL的频率值和分频值
以下是详细步骤:
1.首先下载最新的OpenWrt 24.10源码,或者直接下载OpenWrt One原厂固件的源码包,里面自带config:https://mirror2.openwrt.org/sour ... s-3098b4bf07.tar.xz
2.先编译一遍代码,确保能成功编译出openwrt-mediatek-filogic-openwrt_one-snand-preloader.bin这个文件,这个就是nand flash上的bl2(不要跟nor-preloader搞混,那个是给nor flash的,这机器的nor flash基本只在救砖的时候用),顺便也能把bl2的源码下载下来,供下一步使用
3.编译完后,这里偷个懒,直接编辑openwrt源码目录下的./build_dir/target-aarch64_cortex-a53_musl/arm-trusted-firmware-mediatek-mt7981-spim-nand-ubi-ddr4/arm-trusted-firmware-mediatek-2024.01.17~bacca82a/plat/mediatek/mt7981/drivers/pll/pll.c文件(注意这样直接编辑的话make clean后这个文件的改动就丢了,标准做法是写个patch,这里只是图省事),其他机型请根据实际情况修改路径中的spim-nand-ubi-ddr4,找到正确的软件包
需要修改mtk_pll_init()函数其中的/* Set PLL frequency */这段,具体修改后的代码和解释如下:
- /* Set PLL frequency */
- // 241208: overclock hack
- NOTICE("THIS IS AN OVERCLOKING BL2!\n");
- NOTICE("set arm freq to 1.60 GHz:\n");
- // 设置频率值,原始为2分频,0x82 = 130,实际对应1.3GHz:
- // mmio_write_32(ARMPLL_CON1, 0x82000000); /* 1.3G */)
- // 由于这个值再大一些的话会设置失败,我们要使用1分频(不分频),0x50 = 80,此时对应1.6G,0x55 = 85,对应1.7G,一次类推
- 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));
- // 设置分频比,原始为2分频,还有个注释掉的4分频(用这个就是650MHz):
- // //mmio_setbits_32(ARMPLL_CON0, 0x124); /* divider for 650M */
- // mmio_setbits_32(ARMPLL_CON0, 0x114); /* divider for 1.3G */
- // 修改为不分频,这个寄存器的4~6位(从0开始数)为分频值,由于默认是001(2分频),这里要将其清零(1分频),然后再设置其余bits
- 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));
复制代码
参考资料:https://mirror2.openwrt.org/docs ... Open_Part1_V1.0.pdf ,第310和311页
4. 再次编译(直接make,不要clean),然后刷入bin/targets/mediatek/filogic/openwrt-mediatek-filogic-openwrt_one-snand-preloader.bin到nand中的bl2分区
对于OpenWrt One,可以用nor flash里带的插U盘刷固件方法(请参考该型号OP wiki页面)
对于其他设备,请在刷之前一定要保证有救砖手段,例如亲自试试自己电脑用mtk_uartboot能正常工作后再刷
还可以在上传到/tmp系统里直接刷:
- opkg install mtd kmod-mtd-rw
- insmod mtd-rw.ko i_want_a_brick
- mtd write /tmp/openwrt-mediatek-filogic-openwrt_one-snand-preloader.bin bl2
- mtd verify /tmp/openwrt-mediatek-filogic-openwrt_one-snand-preloader.bin bl2
- reboot
复制代码
下面是我编译的bl2:
对于OpenWrt One,可以直接刷入;
对于其他spim-nand-ubi-ddr4且非NMBM机型,也可以尝试直接刷入;
对于NMBM机型,不要直接刷这个版本,请使用之前论坛里大佬发的超频bl2,也可以自己参考此方法编译;
免责声明:由于刷bl2和超频有不小风险,请在刷之前一定要保证有救砖手段(建议自己先亲自尝试确认一下);同时超频会导致功耗增加,会增加供电电路的负荷,有硬件损坏或者折寿的风险
潜水多年第一次发帖,排版不熟练请见谅
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|