|
本帖最后由 北北西 于 2020-11-5 19:52 编辑
20201104 同步更新官网最新代码 版本 3.0.0.4.382.52272
求购一台K2P BCM 版本开发测试(此固件按以往修改教程编译成功 未烧录测试。)
https://cloud.189.cn/t/ZF7ZZjaqyAzi
20190603
此贴根据@spoon教程修改,在次特别感谢 spoon!
spoon 原帖地址:https://www.right.com.cn/forum/thread-575973-1-1.html
本人根据spoon帖子搭建源码和修改代码,其中出现一些问题,现在在此记录。
官方源码下载:HTTPS:/ /www.asus.com/Networking/RT-AC1200G-plus/HelpDesk_Download/
本人 修改后的github: https://github.com/Beibeixi/K2PBCM
0X01:编译环境搭建:
系统:ubuntu 14.04 64位:
安装依赖:
- sudo apt-get install --no-install-recommends autoconf automake bash bison bzip2 diffutils file flex g++ gawk gcc-multilib gettext gperf groff-base libncurses-dev libexpat1-dev libslang2 libssl-dev libtool libxml-parser-perl make patch perl pkg-config python sed shtool tar texinfo unzip zlib1g zlib1g-dev
- sudo apt-get install lib32stdc++6 lib32z1-dev
- sudo apt-get --no-install-recommends install automake1.11
- sudo apt-get install libelf-dev:i386 libelf1:i386
- sudo apt-get --no-install-recommends install lib32z1-dev lib32stdc++6
- sudo apt-get install intltool autopoint vim imagemagick pngquant cmake
复制代码 注意:此处安装依赖安装如出现以下问题:1.sudo apt-get install libelf-dev:i386 libelf1:i386 出现如下错误时:
解决方法:
sudo dpkg --add-architecture i386
sudo apt-get update
安装完以上依赖后下载源码解压,
unzip GPL_RT_AC1200G*.zip
tar xvf GPL_RT-AC1200G*.tgz
我解压在/home目录下,
配置编译工具链:
export PATH=$PATH:/home/此处为你的系统用户名称/asuswrt/release/src-rt-9.x/src/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3/bin
或者直接修改
sudo vi /etc/profile 文件,在文件最末尾添加:
export PATH=$PATH:/home/此处为你的用户名称/asuswrt/release/src-rt-9.x/src/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3/bin
添加完成后执行source 命令使其生效 source /etc/profile
测试编译工具是否添加成功:
输入arm-brcm 然后按键盘tab键看是否会自动补全:
解压后进入编译目录执行编译,
cd asuswrt/release/src-rt-9.x/src
make clean
rm .config
make RT-AC1200G+
Q:为什么不修改源码直接就编译?
A:根据原教程,到此环境搭建完成,但根据每个人所使用的系统不一样,先编译测试环境搭建是否OK,再修改代码。
如果编译OK ,那么恭喜你,你的环境搭建OK,可以直接跳到下一步。
如果编译报错,极有可能就是你的依赖安装不完全,我也是在此步一直编译不过的。
解决方法:
在源码目录找到readme文件,按照里面的说明将依赖一一安装,
这是我测试14.04 中缺少的依赖,n 表示依赖未安装,e表示安装过程中出错。
安装完上诉N未安装的依赖后,编译通过 error的没有安装也通过了。你们最好一一测试下每个依赖。
至此环境搭建完成!
0X02 源码修改
上述github连接中以是修改好的源码,可直接下载!
如需要自己手动修改,请参照以下步骤:(本修改参考spoon 教程)
1. 修改GPIO
[size=0.875]在源码asuswrt / release / src-rt-9.x / src / router / rc / init.c中case MODEL_RTAC1200GP下配置GPIO值:
[size=0.875]line 7069
- nvram_set_int(“btn_rst_gpio”,9 | GPIO_ACTIVE_LOW);
- nvram_set_int(“btn_wps_gpio”,7 | GPIO_ACTIVE_LOW);
- nvram_set_int(“led_pwr_gpio”,3 | GPIO_ACTIVE_LOW);
- nvram_set_int(“led_wps_gpio”,10);
- nvram_set_int(“led_usb_gpio”,11 | GPIO_ACTIVE_LOW);
- 同时将add_rc_support(“mssid 2.4G 5G usbX1”); 中的“usbX1”去掉,就可以去掉首页的USB图标了
复制代码
2.修改wan lan 口顺序
[size=0.875]在源码asuswrt / release / src / router / rc / sysdeps / init-broadcom.c
[size=0.875]搜索案例MODEL_RTAC1200GP
[size=0.875] line 1492
- 修改 const int ports [SWPORT_COUNT] = {0,1,2,3,4,8};
- 为 const int ports [SWPORT_COUNT] = {4,0,1,2,3,8};
复制代码
[size=0.875]3.删除USB模块 否则会导致设备无限重启
[size=0.875]在源码 asuswrt/release/src/router/rc/watchdog.c 中 [size=0.875]
[size=0.875]#ifdef RTCONFIG_BCMARM ... #endif
[size=0.875]的代码块有三处,
[size=0.875]把其中的1、3处注释掉
[size=0.875]line 154 line 6933 附近
[size=0.875]
在文件 asuswrt/release/src/router/rc/Makefile 中
注释 //OBJS += $(if $(wildcard conn_diag.c),conn_diag.o,prebuild/conn_diag.o)
在 asuswrt/release/src/router/rc/ 中 rc.h 和 rc.c
注释 extern int conn_diag_main(int argc, char *argv[]); 和 { "conn_diag", conn_diag_main },
4.修改网页路由器型号显示
在 asuswrt\release\src\router\www\Makefile 可以修改管理页面显示的路由器型号
搜索 ifeq ($(RTCONFIG_AUTODICT), y)
- ifeq ($(RTCONFIG_AUTODICT), y)
- # now dict prep will generate necessary dict files to dest dir
- rm -f $(INSTALLDIR)/www/*.dict
- # Tool dir , dictctrl.txt , modem name , header mapping , src , dst , output msg file
- #此处修改 K2P
- $(ASUSWRTTOOLSDIR)/LnxDictPrep $(ASUSWRTTOOLSDIR) dictctrl.txt K2P HdrMapping.txt . $(INSTALLDIR)/www $(SRCBASE)/image/dictenum.txt $(SRCBASE)/image/dict_prep.txt # *changed
- # generate sh file for clear up html and dict auto enum
- # this is for compression
- $(ASUSWRTTOOLSDIR2)/genshfile.pl $(ASUSWRTTOOLSDIR2) $(INSTALLDIR)/www $(SRCBASE)/image/compress.sh $(SRCBASE)/image/dictenum.txt $(SRCBASE)/image/output2.txt $(BUILD_NAME) $(SRCBASE)/image/output3.txt
- chmod 777 $(SRCBASE)/image/compress.sh
- sh $(SRCBASE)/image/compress.sh
- else
- for F in $(wildcard *.dict); do \
- ./gendict.pl K2P $F $(INSTALLDIR)/www/$F; \ # *changed //此处修改
- done
- endif
复制代码 在 asuswrt/release/src/router/tools/Lnx_AsusWrtDictPrep/dictctrl.txt 新添加一个设备:
[MODEL]
K2P
EN,CN
5.频道重复bug:
源码 asuswrt/release/src/router/www/sysdep/RT-AC1200G+/www/chanspec.js
var _wl_channel = new Array();
for(i=0;i<wl_channel_list_5g.length; i++){
var _cur_channel = parseInt(wl_channel_list_5g);
for(j=0;j<wl1.channel_80m.length;j++){
if(wl1.channel_80m[j].indexOf(_cur_channel) != -1){ // 这里应该是 == 0 而不是 != -1
_wl_channel.push(_cur_channel+"/80");
}
}
}
wl_channel_list_5g = _wl_channel;
6.移除固件更新:
文件: asuswrt/release/src-rt-9.x/src/router/rc/init.c
case MODEL_RTAC1200GP: 注释下的 add_rc_support("update");
然后添加 add_rc_support("noupdate");
asuswrt/release/src/router/rc/watchdog.c:
if(!nvram_contains_word("rc_support", "noupdate")){
eval("/usr/sbin/webs_update.sh");
}
7.修复 2.4G 和 LAN MAC 地址重启后会变相同的问题
在 asuswrt/release/src/router/rc/sysdeps/init-broadcom.c 中
搜索 case MODEL_RTAC1200GP:
注释 //nvram_set("0:macaddr", nvram_safe_get("et0macaddr")); // (2.4GHz)
8.
- 调整了分区大小,不会再覆盖原厂分区,可以随意在原厂和该固件之间来回刷,免去备份恢复其他分区步骤。
- 得益于保留了原厂分区,现在开机即可获得正确的 MAC 地址,nvram erase 或者初始化都没问题,不用再辛辛苦苦去设置 MAC 地址了,还不用担心设置错。
- 调整了前端字体,修正了选项卡背景,修改默认的 ntp 服务器为 ntp1.aliyun.com,加入 nvram_set_int("webs_state_flag", 0) 以解决更新参数遗留问题,其他
- 在 asuswrt/release/src/router/rc/wan.c 中搜索 convert_wan_nvram 函数体,在其上方添加一个 my_inc_mac 函数:
- void my_inc_mac(char *mac, int plus)
- {
- unsigned char m[6];
- int i;
- for (i = 0; i < 6; i++)
- m[i] = (unsigned char) strtol(mac + (3 * i), (char **)NULL, 16);
- while (plus != 0) {
- for (i = 5; i >= 3; --i) {
- m[i] += (plus < 0) ? -1 : 1;
- if (plus > 0) {
- if ( m[i]!= 0) break;
- } else {
- if ( m[i]!= 0xFF) break;
- }
- }
- plus += (plus < 0) ? 1 : -1;
- }
- sprintf(mac, "%02X:%02X:%02X:%02X:%02X:%02X",
- m[0], m[1], m[2], m[3], m[4], m[5]);
- }
复制代码
再修改 convert_wan_nvram 函数中的 #ifdef CONFIG_BCMWL5 一段,改为:
- #ifdef CONFIG_BCMWL5
- #ifdef RTCONFIG_RGMII_BRCM5301X
- else{
- /* QTN */
- if(strcmp(prefix, "wan1_") == 0) {
- strcpy(hwaddr_5g, get_wan_hwaddr());
- inc_mac(hwaddr_5g, 7);
- nvram_set(strcat_r(prefix, "hwaddr", tmp), hwaddr_5g);
- logmessage("wan", "[%s] == [%s]\n", tmp, hwaddr_5g);
- } else {
- nvram_set(strcat_r(prefix, "hwaddr", tmp), nvram_safe_get("lan_hwaddr"));
- logmessage("wan", "[%s] == [%s]\n", tmp, nvram_safe_get("lan_hwaddr"));
- }
- }
- #else
- else {
- char hwaddr_eth1[18];
- strcpy(hwaddr_eth1, nvram_safe_get("et0macaddr"));
- my_inc_mac(hwaddr_eth1, -1);
- nvram_set(strcat_r(prefix, "hwaddr", tmp), hwaddr_eth1);
- }
- #endif /* RTCONFIG_RGMII_BRCM5301X */
- #else
- else nvram_set(strcat_r(prefix, "hwaddr", tmp), get_wan_hwaddr());
- #endif /* CONFIG_BCMWL5 */
复制代码
9.调整分区大小:[size=0.875]在 asuswrt/release/src-rt-9.x/src/linux/linux-2.6.36/arch/arm/mach-brcm-hnd/board_ns.c 找到 init_mtd_partitions 的函数体:
找到注释 /* Setup rootfs MTD partition */,在其上方加入修改 linux 分区的大小的代码:
- bcm947xx_flash_parts[nparts].size -= 0x130000;
- bcm947xx_flash_parts[nparts].offset = vmlz_off;
- knl_size = bcm947xx_flash_parts[nparts].size;
- offset = bcm947xx_flash_parts[nparts].offset + knl_size;
- nparts++;
- /* Setup rootfs MTD partition */
- bcm947xx_flash_parts[nparts].name = "rootfs";
- 将 linux part 的 size -= 0x130000,这个 0x130000 就是上面原厂分区表里 mtd3 - mtd6 分区加起来的大小。
复制代码
10.调整路由器后台页面字体:
[size=0.875]在 asuswrt/release/src/router/www/ 目录里,把几个 css 文件中的 font-family 替换一下,比如 index_style,form_style 以及 qis/qis_style.css 等等,具体哪些可以用浏览器的开发者模式工具去看元素字体定义所在的文件,
修改方法。使用vim 打开一个css文件,使用以下方式替换:
- :
- %s/font-family.\{-};/font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Arial', 'PingFang SC', 'Hiragino Sans GB', 'STHeiti', 'Microsoft YaHei', 'Microsoft JhengHei', 'Source Han Sans SC', 'Noto Sans CJK SC', 'Source Han Sans CN', 'Noto Sans SC', 'Source Han Sans TC', 'Noto Sans CJK TC', 'WenQuanYi Micro Hei', SimSun, sans-serif;/g
复制代码
11.LAN WAN 口显示顺序代码从后端改到前端了,比之前改后端要来的容易:
修改 asuswrt/release/src/router/www/device-map/router_status.asp 中的 get_ethernet_ports 函数中 parseStrToArray 函数:
- var parseStrToArray = function(_array) {
- var speedMapping = new Array();
- speedMapping["M"] = "100 Mbps";
- speedMapping["G"] = "1 Gbps";
- speedMapping["X"] = "Unplugged"; /*untranslated*/
- var parseArray = [];
- for (var prop in _array) {
- if (_array.hasOwnProperty(prop)) {
- var newRuleArray = new Array();
- var port_name = prop;
- if(wanCount != undefined) {
- if(port_name.substr(4, 1) == "4") { // 这里改一下
- if(parseInt(wanCount) > 1) {
- var port_idx = port_name.split(" ");
- port_name = port_idx[0] + " " + (parseInt(port_idx[1]) + 1);
- }
- else {
- port_name = "WAN";
- }
- } else { // 这里再改一下就 ok 了
- port_name = "LAN " + port_name.split(" ")[1];
- }
- }
- newRuleArray.push(port_name);
- newRuleArray.push(speedMapping[_array[prop]]);
- parseArray.push(newRuleArray);
- }
- }
- return parseArray;
- };
复制代码
ntp 服务器默认值在 asuswrt/release/src/router/shared/defaults.c 中修改,搜索 ntp_server0 即可知
12.修改编译参数
文件asuswrt\release\src-rt-9.x\src\target.mak
export RT-AC1200G+ := IPV6SUPP=y ARM=y BCM57=n AUTODICT=y BBEXTRAS=y EBTABLES=y PARENTAL2=y GRO=y APP="none" DNSMQ=y SHP=y NVRAM_64K=y RTAC1200G=y BCMWL6=y BCMWL6A=y TUNEK="n" BCM5301X=n DISK_MONITOR=n LANWAN_LED=n OPTIMIZE_XBOX=y MDNS=y DUMP_OOPS_MSG=y DEBUGFS=n BCM9=y TEMPROOTFS=y BTN_WPS_ALLLED=n REBOOT_SCHEDULE=y JFFS2=n JFFS2LOG=n HTTPS=y SSH=y ODMPID=y LAN50=y ATCOVER=y GETREALIP=y SW_HW_AUTH=y NATNL_AIHOME=y BUILD_NAME="RT-AC1200G+" MODEM=y ACCEL_p p t pD=y PRINTER=y WEBDAV=n SMARTSYNCBASE=n PROXYSTA=y NEW_USER_LOW_RSSI=y virtual**C=y YANDEXDNS=n REPEATER=y DISABLE_REPEATER_UI=y MULTICASTIPTV=y QUAGGA=y BTN_WPS_RST=y
注意:上诉virtual**C=y 会被系统屏蔽掉,注意复制后修改回去,还有
然后就可以编译了
编译后固件在src-rt-9.x/src/image/ 目录下,
说明:此代码还存在未修改LED灯颜色bug,本人为菜鸟一枚,只是在原帖SPOON修改的基础上添加了一些自己在搭建环境和过程中的截图,并在截图中体现了修改的行号。
希望能有大神进一步的更新此代码,修改后的源代码已提交至github 链接在文章开头。
20190617
在原基础上添加了无线扫描功能,待测试中...
附:刷机方法(备用)
刷机教程参考A大 梅林刷机帖
刷机工具在这里 刷机工具
【固件安装】
一、如果你已经是梅林固件,在“系统管理”-“固件升级”中刷入
二、老版官方固件(V21.5.23.258之前版本)刷写在CFE下用tftp刷入
tftp刷入方法:
1、计算机设置为固定IP:192.168.2.2
2、计算机接路由器LAN,按住复位键开电,按10秒左右松开
3、访问http://192.168.2.1,确认可以打开CFE的miniweb
4、计算机上启动tftp服务器(网盘有),将固件解压后放入tftp服务器根目录,tftp软件中选择192.168.2.2的网卡
5、在计算机浏览器上输入:
此时浏览器可能出现未找到页面的提示,这个是正常现象,关闭此页面,千万不要刷新此页面,会导致重复刷写
浏览器输入后,tftp软件会提示发送进度,发送完成后需继续等待刷写FLASH完成
上述命令对应的路由器IP为192.168.2.1,固件名为K2P.trx,如果不是,请修改对应部分
6、等待5分钟左右,断电复位(不会自动复位,也不会有完成提示,如提前断电,会造成固件刷写不完整,可重新刷写,不会变砖)
刷完后记得恢复计算机为自动获取IP
tftp判断刷写完成的小技巧:
用计算机一直ping路由器的IP地址:
ping 192.168.2.1 -t
刷写固件前是可以ping通的,刷写过程中是ping不通的,刷写完成后又可以ping通,重新ping通后表示刷写完成,可以断电重启或网页重新访问CFE页面重启
注:
1)如tftp软件没有提示发送进度,请检查:是否选中正确网卡、tftp目录路径不要有中文字符、关闭计算机防火墙
2)刷好固件后,请恢复计算机的IP地址为自动获取
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
查看全部评分
|