找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 127240|回复: 156

【固件改造】腾达AC9基于华硕RT-AC1200G+源码及梅林源码修改过程

 火... [复制链接]
发表于 2017-5-11 11:30 | 显示全部楼层 |阅读模式
本帖最后由 abccba94 于 2017-5-21 14:36 编辑

一、前言:开源固件的前世今生
-----------------------------------------------------------------------------------------------------------------------------------------------------
为何华硕固件开源?

2003年Linksys公司推出WRT-54G,一款基于MIPS架构的无线路由器,WRT-54G操作系统以Linux取代vXworks,哥伦比亚大学法学院教授Eben Moglen向Linksys提出开源要求。
2003年7月,Linksys迫于压力,开源了WRT54G的firmware。
2004年1月出现所谓的OpenWRT,第一个版本是基于Linksys源码及uclibc中的buildroot项目。
2005年初,BrainSlayer发布了一个新的发行版:DD-WRT。接着又有HyperWRT、Tomato。

从此以后,开源路由器系统蓬勃发展,并吸引了很多厂家的加入 。



华硕路由器固件(Asuswrt)就是基于Tomato-RT/Tomato-USB进行二次开发的版本,需遵守GPL开源协议,除了少部分比如 Broadcom/Ralink驱动以二进制格式闭源提供外,其他大部分模块都以源码格式开源提供。



何为梅林固件、padavan固件?

梅林固件基于华硕固件进行修改和增强,主要支持基于broadcom的设备,如ARM架构的平台(比如AC9):

原版梅林(Asuswrt-merlin)
https://asuswrt.lostrealm.ca
原始设备:
RT-N66U RAM (256Mb) FlashRAM (32Mb) CPU:BCM4706KPBG. Switch:BCM53125SKMML.

padavan也是基于华硕固件修改,padavan针对的是mips(如7620)架构的平台(比如K2)
原版padavan:
https://bitbucket.org/padavan/rt-n56u
原始设备:
RT-N56U RAM (128Mb) FlashRAM (8Mb) CPU:Ralink RT3662F. Switch:Realtek RTL8367M WLAN: Ralink RT3092L
由于开发人员为俄罗斯人,又称老毛子固件



国内常用的梅林、padavan修改版本:

koolshare上面是小宝修改版merlin,Koolshare改版梅林主要就是多了以软件中心为主的第三方应用功能,譬如迅雷快鸟,SS,阿呆猫,kms自建服务器,广告过滤。

恩山上常见的是hiboy修改版padavan



二、华硕原版固件编译
-----------------------------------------------------------------------------------------------------------------------------------------------------
编译环境:
Ubuntu 16.04 64位系统

1、下载源码

华硕3.0.0.4.380_4089源码:

http://dlcdnet.asus.com/pub/ASUS ... lus_30043804089.zip

2、安装依赖包

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

3、修改编译

解压源码到/opt/ac1200g目录

修改GPIO设置适配AC9
asuswrt\release\src-rt-9.x\src\router\rc\init.c,搜索case MODEL_RTAC1200GP,修改GPIO:
nvram_set_int("btn_rst_gpio", 7|GPIO_ACTIVE_LOW);
nvram_set_int("btn_wps_gpio", 9|GPIO_ACTIVE_LOW);
nvram_set_int("led_pwr_gpio", 15);
nvram_set_int("led_wps_gpio", 10);
nvram_set_int("led_usb_gpio", 1);

设置环境变量

export PATH=$PATH:/opt/ac1200g/asuswrt/release/src-rt-9.x/src/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3/bin

编译
cd /opt/ac1200g/asuswrt/release/src-rt-9.x/src/
make RT-AC1200G+

排错:
提示:
*** No rule to make target 'tcode.c', needed by 'tcode.o'。
解决:
修改src/router/shared/Makefile,将“%.o: prebuild/%.o”改变一下位置:

%.o: prebuild/%.o
@echo " [shared] cp $@"
@cp -f $< $@

%.o: %.c .%.depend
@echo " [shared] CC $@"
@$(CC) $(CFLAGS) -o $@ -c $<

.depend: $(OBJS:%.o=%.c)
@$(CC) $(CFLAGS) -M $^ > .depend
编译成功生成的固件在/opt/ac1200g/asuswrt/release/src-rt-9.x/src/image目录下


4、模块定制
修改/opt/ac1200g/asuswrt/release/src-rt-9.x/src/target.mak文件,搜索RT-AC1200G+:

可以看到,RT-AC1200G+是基于RT-AC1200G_BASE进行模块、特性增加,可以修改相应的特性=y或=n来增减特性

三、源码修改与特性增加
-----------------------------------------------------------------------------------------------------------------------------------------------------
【增加无线扫描功能】

我们首先参照梅林固件的源码来为AC9增加一个特性:搜索周围的无线网络
1、修改/opt/ac1200g/asuswrt/release/src/router/www/state.js,增加搜索页面
搜索“tabtitle[0]”,修改:
tabtitle[0] = new Array("", "<#menu5_1_1#>", "<#menu5_1_2#>", "WDS", "<#menu5_1_4#>", "<#menu5_1_5#>", "<#menu5_1_6#>", "Wi-Fi Proxy");
变为:
tabtitle[0] = new Array("", "<#menu5_1_1#>", "<#menu5_1_2#>", "WDS", "<#menu5_1_4#>", "<#menu5_1_5#>", "<#menu5_1_6#>", "Site Survey", "Wi-Fi Proxy");

搜索“tablink[0]”,修改:
tablink[0] = new Array("", "Advanced_Wireless_Content.asp", "Advanced_WWPS_Content.asp", "Advanced_WMode_Content.asp", "Advanced_ACL_Content.asp", "Advanced_WSecurity_Content.asp", "Advanced_WAdvanced_Content.asp", "Advanced_WProxy_Content.asp");
变为:
tablink[0] = new Array("", "Advanced_Wireless_Content.asp", "Advanced_WWPS_Content.asp", "Advanced_WMode_Content.asp", "Advanced_ACL_Content.asp", "Advanced_WSecurity_Content.asp", "Advanced_WAdvanced_Content.asp","Advanced_Wireless_Survey.asp", "Advanced_WProxy_Content.asp");

2、拷贝Advanced_Wireless_Survey.asp到/opt/ac1200g/asuswrt/release/src/router/www目录
从梅林源文件中拷贝Advanced_Wireless_Survey.asp到/opt/ac1200g/asuswrt/release/src/router/www目录

3、重新编译固件,并刷入AC9




【多语言支持】

如果想支持多语言,可以将tabtitle[0]中的Site Survey修改:

tabtitle[0] = new Array("", "<#menu5_1_1#>", "<#menu5_1_2#>", "WDS", "<#menu5_1_4#>", "<#menu5_1_5#>", "<#menu5_1_6#>", "<#menu5_1_7#>", "Wi-Fi Proxy");

然后在/opt/ac1200g/asuswrt/release/src/router/www/CN.dict中增加:

menu5_1_7=无线扫描

在/opt/ac1200g/asuswrt/release/src/router/www/EN.dict中增加:

menu5_1_7=Site Survey

修改后的界面如下:


【精简语言包】

修改/opt/ac1200g/asuswrt/release/src/router/tools/Lnx_AsusWrtDictPrep/dictctrl.txt,只保留中英文
[MODEL]
RT-AC1200G+
EN,CN

重新编译,固件由原来13M变为12M

【版本号及界面修改】

主版本号位于/opt/ac1200g/asuswrt/release/src-rt/version.conf

子版本号位于/opt/ac1200g/asuswrt/release/src/router/extendno.conf

型号在dict字典文件Web_Title和Web_Title2字段

图标在/opt/ac1200g/asuswrt/release/src/router/www/images/New_ui/asustitle.png

修改后的版本及界面如下:


【增加用户脚本功能】

用户脚本(User scripts)功能是梅林固件一个比较重要的特性,它支持在不同的事件触发下自动执行用户脚本。

脚本由用户自己建立,存放在/jffs/scripts目录,不同的脚本名称代表不同的触发条件,比如系统启动后自动执行脚本(init-start)、网络连接后执行脚本(wan-start)或者在所有服务启动后执行脚本(services-start)。脚本名称参考:
https://github.com/RMerl/asuswrt-merlin/wiki/User-scripts

用户建立脚本后,还需赋予脚本可执行权限:
chmod a+rx /jffs/scripts/*

比如我要增加一个定时重启任务:
新建/jffs/scripts/init-start文件:
vi /jffs/scripts/init-start
输入如下语句:
#!/bin/sh
cru a ScheduledReboot "0 4 * * * /sbin/reboot"
保存退出后赋予文件执行权限,上述语句设置每晚4点重启路由器
chmod a+rx /jffs/scripts/*
重启路由器生效
cru是华硕固件中的定时任务程序,类似于crontab
# cru                                                                                                                                                                                                                                    
Cron Utility                                                                                                                        
add:    cru a <unique id> <"min hour day month week command">                                                                       
delete: cru d <unique id>                                                                                                           
list:   cru l   

要增加用户脚本功能,我们可以参照梅林固件的源码进行修改,主要是/opt/ac1200g/asuswrt/release/src/router/rc和/opt/ac1200g/asuswrt/release/src/router/share里面的部分c文件,修改后的文件打包如下:


【增加梅林工具箱】
首先要在界面上增加菜单,工具箱为一级菜单,里面有两个子菜单:系统信息和其他工具
参照梅林源码修改/opt/ac1200g/asuswrt/release/src/router/www/state.js
拷贝www目录下Tools_OtherSettings.asp、Tools_Sysinfo.asp文件
拷贝覆盖图标文件www/images/New_ui/icon_indexes.png,修改www/index_style.css文件

在Tools_Sysinfo.asp文件中调用了sysinfo命令,此命令由httpd进程处理,需拷贝/opt/ac1200g/asuswrt/release/src/router/httpd下的sysinfo.c、sysinfo.h,并修改web.c,映射WEB命令到处理函数。最后修改httpd的makefile进行重新编译。

增加的工具箱界面:


【移植ipset】
很多特性都需要ipset模块,而华硕固件缺省并没有集成ipset,因此我们需要进行移植

拷贝梅林源码目录/opt/ac1200g/asuswrt/release/src/router/ipset、ipset_arm、libmnl, libnfnetlink目录,并且修改router目录下的makefile及相关文件,开启dnsmasq的ipset特性

修改内核/opt/ac1200g/asuswrt/release/src-rt-9.x/src/linux下的相关文件(netfilter)

修改release/src/router/rom/rom/etc/modprobe.conf,加载ipset内核

修改完成后,重新编译、烧写,可以输入ipset creat test hash:net && ipset list来验证模块是否正常

【增加koolproxy】

下面我们在工具箱中增加koolproxy广告过滤特性

1、首先修改/opt/ac1200g/asuswrt/release/src/router/www/state.js文件,增加菜单

2、然后设计koolproxy的ASP页面

3、接下来是让页面上的元素和nvram中的参数对应,比如koolproxy使能按钮,它的id为koolproxy_enable,提交的表单一般为start_apply.htm,表单中有几个重要的参数
    <input type="hidden" name="action_mode" value="apply_new">
    <input type="hidden" name="action_wait" value="3">
    <input type="hidden" name="action_script" value="start_koolproxy">
指定操作方式、等待时间及执行的脚本名称等。action_mode可以为apply_new或apply,区别是apply_new只有在参数改变时才执行脚本,apply则都会执行脚本。
提交表单后在start_apply.htm中会执行一个重要命令:
update_variables();
我们可以在web.c文件中看到此命令:
{ "update_variables", ej_update_variables},
映射到ej_update_variables函数,在此函数中会调用validate_apply函数,此函数会遍历nvram中的各个参数
for (t = router_defaults; t->name; t++)
比较nvram中的参数与表单中的参数值是否一致,如不一致则将新的值写入nvram
注:router_defaults存放着nvram的各个参数,在share/default.c文件中定义,我们需要先将新增的koolproxy参数(如koolproxy_enable)也在此文件定义

nvram写入后,下面是action_script脚本执行的操作,会调用notify_rc函数
strncpy(notify_cmd, action_script, 128);
..
nvram_set("freeze_duck", "15");
notify_rc(notify_cmd);
在notify_rc的处理中,会先打印日志:
logmessage_normal("rc_service", "%s %d:notify_rc %s", p2, getpid(), event_name);
然后通知rc程序执行响应命令:
nvram_set("rc_service", event_name);
nvram_set_int("rc_service_pid", getpid());
kill(1, SIGUSR1);

如果要直接调用脚本,可以修改ej_update_variables函数,在适当位置调用sys_script执行脚本

完成后的koolproxy界面如下:


【增加S-S R】

首先第一步,你需要获得S-S R for arm 的可执行程序
可以参照此文进行交叉编译获得:
http://iytc.net/wordpress/?p=2286

其次我们需要设计S-S R的交互界面,由于S-S R需要设置多个服务器配置,因此我们参照家长控制页面(ParentalControl.asp)进行修改

修改后的界面如下:


最后我们要将界面和脚本进行关联,在提交页面后,会先保存服务器参数到nvram中,然后会调用指定脚本,在脚本中会读取nvram中的服务器参数,并启动S-S R程序及生成对应的防火墙规则。

未完待续...

原贴地址:
http://blog.iytc.net/wordpress/?p=2193

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

点评

我想请教下楼主, 如果是别的华硕官网源码,别的型号,一般情况下下载过来编译的命令有什么规律吗? 比如AC1200HP, 或者N14U,有什么文档可以参考吗?  发表于 2017-6-12 16:16
A大干活不占坑、不缩水,开贴分享已有一段时间,尚未完工,感觉已被抢去了不少风头。但,还是选择相信A大。加油!  发表于 2017-5-21 14:01
能出8M的固件吗,路由器没硬改,但是希望用上ASUS  发表于 2017-5-18 13:09
棒,加分支持  发表于 2017-5-11 22:14
终于看的移植梅林的曙光了!500万已转支付宝  发表于 2017-5-11 14:27

评分

参与人数 46恩山币 +59 收起 理由
ITdesk + 1 率全体恩山路由党以及党魁向你学习!
gatoradehuang + 1 我来恩山就是为了撩你!
laoma348 + 5 兄弟,你肥皂又掉了…你是故意掉的?
夜的第千章 + 1 我来恩山就是为了看你!
vov + 1 亲,你这么厉害,我想做你的经纪人!
yzhyjh + 3 我来恩山就是为了看你!
枫木林语 + 1 支付宝已转500w给你!
lr2000 + 1 支付宝已转500w给你!
zfucheng + 1 这个厉害了。。。
winter + 1 我来恩山就是为了看你!
xiangguangde + 1 亲,你这么厉害,我想做你的经纪人!
812366431 + 1 亲,你这么厉害,我想做你的经纪人!
yuning89 + 1 我来恩山就是为了看你!
破灭道人 + 1 一看就是觉得高端、大气、上档次!
还是我最好 + 1 我来恩山就是为了看你!
lookingliudi + 1 一看就是觉得高端、大气、上档次!
爱会回来 + 3 我来恩山就是为了看你!
lon91ong + 1 支付宝已转500w给你!
lily339 + 5 亲,你太牛逼了,走,我请你吃鳇鱼头去~~~
svc999 + 1 支付宝已转500w给你!
zenghongfei1 + 1 亲,你太牛逼了,走,我请你吃鳇鱼头去~~~
vios + 1 我来恩山就是为了看你!
flyysoft -1 我来恩山就是为了看你!
zhyoi + 1 亲,你太牛逼了,走,我请你吃鳇鱼头去~~~
大漠判官 + 1 我来恩山就是为了看你!
start2005a + 1 我来恩山就是为了看你!
小斌z + 1 一看就是觉得高端、大气、上档次!
secowu + 1 支付宝已转500w给你!
失去的记忆 + 1 我来恩山就是为了看你!
hillcool1 + 1 支付宝已转500w给你!
jeansc + 1 亲,你太牛逼了,走,我请你吃鳇鱼头去~~~
64139303 + 1 支付宝已转500w给你!
2711106269 + 1 支付宝已转500w给你!
hmhua + 1 亲,你太牛逼了,走,我请你吃鳇鱼头去~~~
heaven998 + 1 一看就是觉得高端、大气、上档次!
xujiakai + 1 亲,你这么厉害,我想做你的经纪人!
daodao0326 + 1 我来恩山就是为了看你!
lcw1009 + 2 哥,你这是搞事情哈,支持你,AC9就看你和黄页无灯了!
AN_drew + 1 亲,你太牛逼了
gasaiwu + 1 我来恩山就是为了看你!
xiaoboy + 3 我也只能加这么多了
35918 + 1 我来恩山就是为了看你!
RGYiii + 1 长知识了!
lwiibj + 1 希望abc大神能多为广大硬改手残党着想和造福,为AC9原机8兆闪存打造适配基于华
j4444 + 1 支付宝已转500w给你!
彬少 + 1 我来恩山就是为了看你!

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
发表于 2017-5-11 11:33 | 显示全部楼层
A大,有8m的固件吗???
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2017-5-11 11:38 | 显示全部楼层
强势围观!!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2017-5-11 11:40 来自手机 | 显示全部楼层
a大也来搞华硕固件了,真是重大利好,支持~
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2017-5-11 11:41 来自手机 | 显示全部楼层
期待,梅林AC9~~(≧▽≦)
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2017-5-11 11:49 | 显示全部楼层
现在8M华硕固件装在AC9上,不够稳定。信号也不太好!希望能解决这个问题
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2017-5-11 11:51 来自手机 | 显示全部楼层
支撑大神发力了
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2017-5-11 12:00 | 显示全部楼层
前排强力支持,感谢各位开发者的无私奉献!!!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2017-5-11 12:14 | 显示全部楼层
希望abc大神能多为广大硬改手残党着想和造福,为AC9原机8兆闪存打造适配基于华硕RT-AC1200G+的固件,衷心的感谢!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2017-5-11 12:33 来自手机 | 显示全部楼层
已经硬改了16m闪存,希望大神能加上自动中继
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2017-5-11 12:47 | 显示全部楼层
赞一个。这几天都没人了。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2017-5-11 12:55 来自手机 | 显示全部楼层
哈哈,很强大!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2017-5-11 12:55 来自手机 | 显示全部楼层
支持一下 现在AC9还在吃灰
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2017-5-11 13:05 | 显示全部楼层
什么时候又出来了一个大神!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2017-5-11 13:05 | 显示全部楼层
感谢大神的教学贴
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-3-29 10:00

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表