找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

 火... [复制链接]
本帖最后由 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 收起 理由
ITd*** + 1 率全体恩山路由党以及党魁向你学习!
gatora*** + 1 我来恩山就是为了撩你!
laom*** + 5 兄弟,你肥皂又掉了…你是故意掉的?
夜的*** + 1 我来恩山就是为了看你!
v*** + 1 亲,你这么厉害,我想做你的经纪人!
yzh*** + 3 我来恩山就是为了看你!
枫木*** + 1 支付宝已转500w给你!
lr2*** + 1 支付宝已转500w给你!
zfuc*** + 1 这个厉害了。。。
win*** + 1 我来恩山就是为了看你!
xiangg*** + 1 亲,你这么厉害,我想做你的经纪人!
8123*** + 1 亲,你这么厉害,我想做你的经纪人!
yuni*** + 1 我来恩山就是为了看你!
破灭*** + 1 一看就是觉得高端、大气、上档次!
还是*** + 1 我来恩山就是为了看你!
lookin*** + 1 一看就是觉得高端、大气、上档次!
爱会*** + 3 我来恩山就是为了看你!
lon9*** + 1 支付宝已转500w给你!
lil*** + 5 亲,你太牛逼了,走,我请你吃鳇鱼头去~~~
svc*** + 1 支付宝已转500w给你!
zengho*** + 1 亲,你太牛逼了,走,我请你吃鳇鱼头去~~~
vi*** + 1 我来恩山就是为了看你!
flyy*** -1 我来恩山就是为了看你!
zh*** + 1 亲,你太牛逼了,走,我请你吃鳇鱼头去~~~
大漠*** + 1 我来恩山就是为了看你!
start*** + 1 我来恩山就是为了看你!
小*** + 1 一看就是觉得高端、大气、上档次!
sec*** + 1 支付宝已转500w给你!
失去*** + 1 我来恩山就是为了看你!
hill*** + 1 支付宝已转500w给你!
jea*** + 1 亲,你太牛逼了,走,我请你吃鳇鱼头去~~~
6413*** + 1 支付宝已转500w给你!
27111*** + 1 支付宝已转500w给你!
hm*** + 1 亲,你太牛逼了,走,我请你吃鳇鱼头去~~~
heav*** + 1 一看就是觉得高端、大气、上档次!
xuji*** + 1 亲,你这么厉害,我想做你的经纪人!
daoda*** + 1 我来恩山就是为了看你!
lcw*** + 2 哥,你这是搞事情哈,支持你,AC9就看你和黄页无灯了!
AN_*** + 1 亲,你太牛逼了
gas*** + 1 我来恩山就是为了看你!
xia*** + 3 我也只能加这么多了
35*** + 1 我来恩山就是为了看你!
RGY*** + 1 长知识了!
lwi*** + 1 希望abc大神能多为广大硬改手残党着想和造福,为AC9原机8兆闪存打造适配基于华
j4*** + 1 支付宝已转500w给你!
彬*** + 1 我来恩山就是为了看你!

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
A大,有8m的固件吗???
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

强势围观!!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

现在8M华硕固件装在AC9上,不够稳定。信号也不太好!希望能解决这个问题
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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

使用道具 举报

前排强力支持,感谢各位开发者的无私奉献!!!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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

使用道具 举报

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

使用道具 举报

赞一个。这几天都没人了。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

来自手机 | 显示全部楼层
哈哈,很强大!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

来自手机 | 显示全部楼层
支持一下 现在AC9还在吃灰
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

什么时候又出来了一个大神!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

感谢大神的教学贴
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 11:59

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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

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