V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  ymoti  ›  全部回复第 1 页 / 共 1 页
回复总数  16
2017-10-13 00:01:57 +08:00
回复了 ymoti 创建的主题 路由器 AdvancedTomato 固件编译步骤
重新做了合体版,如下。

https://www.v2ex.com/t/397209
2017-10-06 16:46:24 +08:00
回复了 ymoti 创建的主题 路由器 AdvancedTomato 固件编译步骤
@lekai63 已经完成了,可以看一下。
2017-10-06 16:46:00 +08:00
回复了 ymoti 创建的主题 路由器 AdvancedTomato 固件编译步骤
后记

以个人经验来看,编译路由器固件总的来说并不是很难,更多需要的细心和严谨。本人掉进去过的坑大家就不要再进了...

另外国外也有人在 advancedtomato 的源码上做过一些改动并且开源,我看 advancedtomato 的代码里有很多也来源于他的项目,链接如下。他的项目里有提供 R7000/R8000 的固件下载,并且都支持 TPROXY。 我之所以知道,是因为他是其中一个在论坛上帮我的人,他看到我问怎么编译 TPROXY,就问这个 TPROXY 说有啥用,另外一个人帮我回答了,然后他就在他自己的项目里把 TPROXY 也编译进去了。

https://bitbucket.org/AndreDVJ/advancedtomato-arm

另外,如果因为编译失败或者因为各种原因需要回到最开始刚下载完的一个比较干净的状态,可以运行下面的命令:
git clean -fdxq && git reset --hard
然后再 checkout 相应的版本。
2017-10-06 16:30:03 +08:00
回复了 ymoti 创建的主题 路由器 AdvancedTomato 固件编译步骤
编译中可能出现的问题

如果完全按照上面一步步做下来,编译中仍然会出现问题,我把我碰到列出来下:
1. 提示 xx 文件没有访问权。 这个是因为编译程序不能访问某个文件或者某个目录导致的。为什么呢? 原因大概为: 1) 安装 Linux 时为 root 权限,而运行编译时为普通用户,所以那些目录普通用户是不能访问的,比如 /usr/bin 目录。解决办法为把那些目录 /文件的所有者改为当前用户,用命令 chown [OPTION]... [OWNER][:[GROUP]] FILE。2)其他文件 /目录在创建时用了 root 权限,原因和解决方法同 1).

2. 提示 xx 文件找不到,但是查看后文件其实存在。比如下面的 aclocal.m4 文件。 解决方法是运行 touch aclocal.m4 configure。 这样做可以更新文件的 timestamp,告诉编译程序不需重新编译这个文件。

WARNING: 'aclocal-1.15' is missing on your system. You should only need it if you modified 'acinclude.m4' or 'configure.ac' or m4 files included by 'configure.ac'. The 'aclocal' program is part of the GNU Automake package: http://www.gnu.org/software/automake It also requires GNU Autoconf, GNU m4 and Perl in order to run: http://www.gnu.org/software/autoconf http://www.gnu.org/software/m4/ http://www.perl.org/ make: *** [aclocal.m4] Error 127
2017-10-06 16:10:43 +08:00
回复了 ymoti 创建的主题 路由器 AdvancedTomato 固件编译步骤
编译

编译需要做两个事情:
1. 选择需要编译 Linux 模块, TPROXY 就在这里选择
2. 选择需要编译的路由器型号。

1. 选择需要编译的 Linux 模块
在下面目录输入 make menuconfig,会进入一个编译菜单,可以选择需要编译的模块。
compile@ubuntu:~/tomato/release/src-rt-6.x.4708/linux/linux-2.6$ make menuconfig

在菜单里,*表示必选,[]表示可选,[M]表示作为单独模块编译。上下键移动光条,空格键做选择。
首先在第一层菜单里选择: General Setup -->, 在下一层菜单选上[*] Prompt for development and/or incomplete code/drivers。只有选上这个选项,那些 experimental 的模块才会显示出来,否则你是没法找到 TPROXY 的相应模块的。

TPROXY 相关的模块有两个,分别在如下位置

<M > Transparent proxying support (EXPERIMENTAL) (NEW)

│ Location: │
│ -> Networking support (NET [=y]) │
│ -> Networking options │
│ -> Network packet filtering framework (Netfilter) (NETFILTER [=y]) │
│ -> Core Netfilter Configuration │
│ -> Netfilter Xtables support (required for ip_tables) (NETFILTER_XTABLES [=m]) │


<M> "TPROXY" target support (EXPERIMENTAL)

│ Location: │
│ -> Networking support (NET [=y]) │
│ -> Networking options │
│ -> Network packet filtering framework (Netfilter) (NETFILTER [=y]) │
│ -> Core Netfilter Configuration

--------------或者不用菜单,直接编辑下面文件并添加 TPROXY 相应选项,效果也是一样的--------------

compile@ubuntu:~/tomato/release/src-rt-6.x.4708/linux/linux-2.6$ gedit config_base

然后在带#的那几段下面分别添加 CONFIG 开头的那些代码。前两个是 TPROXY 相关的,最后那个 SOCKET 结尾是因为添加 TPROXY 后在编译过程中会暂停问用户需要不需要编译,所以一次添加完。

# Core Netfilter Configuration
CONFIG_NETFILTER_TPROXY=y

# Xtables targets
CONFIG_NETFILTER_XT_TARGET_TPROXY=y

# Xtables matches
CONFIG_NETFILTER_XT_MATCH_SOCKET=y

config_base 是默认配置文件,刚刚的菜单也是先载入 config_base,然后根据用户的选择会把配置保存到.config 文件中。

2. 选择需要编译的路由器型号。
选择对应的路由器型号,相对简单。在 src-rt-6.x.4708 目录下(其他目录不行)下输入 make help,可以查看支持的型号(部分型号如下,全部型号及命令请在自己的电脑上查看)。比如我要编译 R7000,就输入 make r7000z,编译就会开始了,然后就是愉快的等候了。

本人只编译过 r7000 的固件,其他型号请自行查看并选择。

compile@ubuntu:~/tomato/release/src-rt-6.x.4708$ make help
ASUS ARM Builds - RT-N18U, RT-AC56U, RT-AC68U, RT-AC68R, RT-AC68P
ac68e RT-N18U/AC56U/AC68U(R/P) build VPN
ac68z RT-N18U/AC56U/AC68U(R/P) build AIO
n18e RT-N18U/AC56S without SMP build VPN
n18z RT-N18U/AC56S without SMP build AIO
DLINK ARM Builds
dir868l DLINK DIR868L
NETGEAR ARM Builds
r7000e R7000/R6300v2/R6250 build VPN
r7000z R7000/R6300v2/R6250 build AIO
r6400e R6400 build VPN - 128K NVRAM
r6400z R6400 build AIO - 128K NVRAM
.
.
.
2017-10-06 15:43:51 +08:00
回复了 ymoti 创建的主题 路由器 AdvancedTomato 固件编译步骤
编译前最后准备

Tomato 系源码编译前需要做两件事:
1. 建立交叉编译目录的连接
2. 把上面建立的连接放到系统路径中,告诉编译工具在哪里可以找到交叉编译需要用到的工具在哪里。

1. 建立交叉编译工具目录的连接

交叉编译用的工具目录如下。
compile@ubuntu:~/tomato/release/src-rt-6.x.4708$ cd toolchains
compile@ubuntu:~/tomato/release/src-rt-6.x.4708/toolchains$ ls
hndtools-arm-linux-2.6.36-uclibc-4.5.3

连接命令如下,作用为: 把那一长串的目录连接到 /opt/brcm-arm 这个地方来,然后可以通过 /opt/brcm-arm 就和访问那一长串的目录是一样的。
sudo ln -s /home/compile/tomato/release/src-rt-6.x.4708/toolchains/hndtools-arm-linux-2.6.36-uclibc-4.5.3 /opt/brcm-arm
如果目录名没有敲错的话,连接会成功,ls /opt 显示的目录名会是蓝绿色。如果显示是红色的话,说明目录名有误。

注意!!!务必使用绝对目录, 比如 /home/compile/tomato/release/等等,不要使用~/tomato/release/这样的写法,虽然在 Linux 里看起来他们是效果是一毛一样的,但是在编译中会有很多问题是因为使用了~/tomato 这样的写法导致的。 我因为这个写法碰到的坑实在是多的不能再多了....... 务必使用绝对路径!!! 原因大概是因为编译过程的命令调用错综复杂,一层套一层,导致~/tomato 这样的写法会产生问题。总之为了避免不必要的麻烦,吸取我的前车之鉴吧。

2. 把目录连接加入系统路径。

命令如下:
PATH=$PATH:/opt/brcm-arm/bin
或者编辑~/.profile 文件,把上述命令加到最后一行。区别是放在~/.profile 后,每次重启都会把目录自动加到系统路径。
命令的作用是把 /opt/brcm-arm/bin 这个目录加到现有路径里。

完成后用 echo $PATH 检查,显示结果应该和下面相同。
compile@ubuntu:~/tomato/release/src-rt-6.x.4708/toolchains$ echo $PATH
/home/compile/bin:/home/compile/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/brcm-arm/bin

注意!!! /opt/brcm-arm/bin 务必放在现有路径后面,不要用 PATH=/opt/brcm-arm/bin:$PATH 这样的写法,这样的话会把交叉编译工具的目录放在前面,编译时没有先去找系统路径也会导致一些意想不到的问题。 我当时编译失败的其中一个原因就是这个,还在论坛被人给教育了不要自己乱来...

总之,在这两个方面务必严谨,可以给自己少很多不必要的麻烦....
2017-10-06 15:10:55 +08:00
回复了 ymoti 创建的主题 路由器 AdvancedTomato 固件编译步骤
源码介绍 - 2

ARM 系源码下有两个分支,这个要注意一下。两个分支的开发进度及对应机型是不同的。下面列表是从 Tomato By Shibby 的网站( http://tomato.groov.pl/?page_id=164)粘贴过来的,大家看了应该就明白。Again,AdvancedTomato 是基于 Tomato By Shibby 的。

我开始时不知道,然后在 ARM7 的分支下面编译了半天 R7000 的固件,一直过不了(惨痛教训 again),后来只好跑去国外的论坛上问,很快有好心人帮我指出问题所在....

K26RT-AC – MIPSR2 – SDK6.x, special builds for RT-N66U, RT-AC66U, R6300v1 and Tenda W1800R only

K26ARM – ARM – only for Broadcom-ARM based routers like: Asus RT-N18U, RT-AC56U, RT-AC68U (except HW Rev C1), RT-AC68R, D-Link DIR868L, Huawei WS880, Netgear R7000, R6400, R6300v2, R6250, Linksys EA6900, EA6700, EA6500 v2

K26ARM7 – ARM – only for Broadcom-ARM based routers: Netgear R8000 and Asus RT-AC3200

如何查看和切换要编译的分支?
git branch -r <---显示分支
git checkout <--- 检出分支, 相当于切换到相应分支,也就是用当前的分支做编译。

下面是具体操作命令和结果(注意*号的变化

compile@ubuntu:~/tomato/release$ git branch
* arm
arm7

compile@ubuntu:~/tomato/release$ git checkout arm7
Checking out files: 100% (39253/39253), done.
Switched to branch 'arm7'
Your branch is up-to-date with 'origin/arm7'.

compile@ubuntu:~/tomato/release$ git branch
arm
* arm7

compile@ubuntu:~/tomato/release$ git checkout arm
Switched to branch 'arm'
Your branch is up-to-date with 'origin/arm'.

compile@ubuntu:~/tomato/release$ git branch
* arm
arm7

git 是一个源码管理工具,个人懂得不多。我的认知是,它会跟踪所有的文件变化。看介绍,他的工作原理是把工作指针指到相应版本,比如 git checkout arm7 是把指针指到 arm7 的分支版本,这样我们看到和用到的就是 arm7 的文件了。

请大家根据实际情况做好设置。
2017-10-06 14:50:31 +08:00
回复了 ymoti 创建的主题 路由器 AdvancedTomato 固件编译步骤
源码介绍 (ARM 系为例)

advancedtomato 的源码容量很大,应该有大于 1G。具体下载时间视网速。下载完后,目录下会有若干文件及目录,具体如下。att 是我自己建的目录名

compile@ubuntu:~$ cd att
compile@ubuntu:~/att$ ls
CHANGELOG COPYING README.md README.TXT release VERSION

compile@ubuntu:~/att$ cd release
compile@ubuntu:~/att/release$ ls
dhd src-rt-6.x.4708 src-rt-7.x.main

compile@ubuntu:~/att/release$ cd src-rt-6.x.4708
compile@ubuntu:~/att/release/src-rt-6.x.4708$ ls
bcm57xx cfe cy_conf.h include Makefile rts tools
bcmcrypto common cy_conf.mak linux makefiles shared wl
bcm_tools ctf emf lzma ntools target.mak wnrtool
btools ctools et lzma-loader router toolchains

编译时在 src-rt-6.x.4708 这个目录下执行命令 (RT-N/AC 系的目录名稍有不同)。有兴趣的同学可以自己每个目录看一下。
2017-10-06 14:42:38 +08:00
回复了 ymoti 创建的主题 路由器 AdvancedTomato 固件编译步骤
源码下载

AdvancedTomato 的源码在下面链接可以下载 (AdvancedTomato 作者的官网),根据 Broadcom 路由器架构不同分成两个大类,RT- N/AC 的是比较老的系列了,像 WNDR3700。ARM 的是像 R6300V2, R7000 这些相对较新的路由器。下载源码时注意区别。

https://advancedtomato.com/faq#source-code

AdvancedTomato ARM Repository <---- ARM 系路由器固件源码
AdvancedTomato RT-N/AC Repository <---- RT-N/AC 系路由器固件源码
AdvancedTomato GUI Repository <---- 据作者说 AdvancedTomato 其实只是在 Tomato By Shibby 上添加一个图形界面(GUI),所以本质上还是固件还是 Tomato By Shibby。所以他也提供了单独的 GUI 的源码。没有具体研究过这部分。


源码下载方式为: 在 Linux 里开一个 Terminal - 找个地方建个目录,一般在~/home 下面 (这里有个坑,后续会说)。命令如下(以下载 ARM 系源码为例)
mkdir tomato #建目录
git clone https://github.com/Jackysi/advancedtomato-arm # git 是一个软件,在刚才编译环境准备 - 2 中已经安装,如果跳过那一步的话,在这里会报错。git clone 做的就是是把后面那个链接里的代码复制到当前目录。
2017-10-06 14:22:49 +08:00
回复了 ymoti 创建的主题 路由器 AdvancedTomato 固件编译步骤
编译环境准备 - 补充

固件编译涉及一个概念叫做交叉编译。正常我们用的电脑为 x86 架构,和路由器的硬件是不同的,所以直接在电脑上编译出来的东西是没法在路由器上运行的。但是直接在路由器上编译,要么是速度太慢,要么是空间不够,所以就有了这个交叉编译。 通过交叉编译在电脑上就可以直接编译出在路由器上可以运行的固件。Tomato 系开源项目里应该都自带交叉编译工具,目录名一般是 toolchains 之类的名字。
2017-10-06 14:16:34 +08:00
回复了 ymoti 创建的主题 路由器 AdvancedTomato 固件编译步骤
编译环境准备 - 2

除了 Linux 系统本身,编译固件需要用到一系列的软件,不同的固件用到不同,但是开源作者一般都会注明怎么编译。AdvancedTomato 需要的安装的软件以及命令可以参考下面链接,直接 copy/paste 就可以了。如果一定要用 32 位的系统,里面有些软件不用安装(或者会显示找不到软件的错误信息)。不过就我个人的惨痛教训,真的没必要自找麻烦...

https://advancedtomato.com/faq#compile-packages
2017-10-06 14:08:04 +08:00
回复了 ymoti 创建的主题 路由器 AdvancedTomato 固件编译步骤
编译环境准备 - 1

现在开源的第三方路由器固件,OpenWRT/LEDE 也好,Tomato 也好还是 DD-WRT,全部都是基于 Linux 内核的。所以固件的编译一般也在 Linux 下进行,Windows 下直接编译也许可以,不过不在本文探讨范围(说白了就是没试过,也不会)。

Linux 的环境要建立成本其实很小,只需要安装虚拟机然后在虚拟机里安装 Linux OS 即可。虚拟机可以用 VMWare 的 VMWare Workstation Player, Linux 可以用 Ubuntu。两者都是免费的。Ubuntu 建议安装 64 位的。为啥? 额... AdvancedTomato 的作者用的就是 Ubuntu 64 位的,为了减少不必要的麻烦,so...。
2017-09-11 22:27:19 +08:00
回复了 bilibilifi 创建的主题 路由器 WRT3200AC 值得购买吗? 跟 WRT1900AC 相比
因为 MU-MIMO,我曾经种草要买 WRT3200,不过太贵了。不过貌似 LEDE 还不支持 MU-MIMO。

现在用的是 R6900,对 USB 没有需求的可以考虑 R6900。后面当 R7000 用:).
2017-09-11 22:22:14 +08:00
回复了 icecard7 创建的主题 UBNT UBNT TPROXY 支持能力
哦 查了下啥是 UBNT。 我编译的是 Tomato 的,希望到时能帮上你。
2017-09-11 22:15:25 +08:00
回复了 icecard7 创建的主题 UBNT UBNT TPROXY 支持能力
TPROXY 确实是需要内核重新编译才可以。

我也是用了 V2ray,然后开始折腾编译路由器固件,为的就是能够使 iptables 支持 TPROXY。之前试了很多方法,但是都没有成功,TPROXY 应该是唯一的出路。 不默认支持的原因应该是由于 TPROXY 还是属于 EXPERIMENT 的原因(在固件编译时看到的),据说是因为路由器用的 Linux 版本太低。

历经艰辛,下午终于编译成 AdvancedTomato 的固件,刚刷好,测了下 TPROXY 没有报错。 后续放个小白教程(本人其实是小白),编译固件说简单是简单,但是就是有那么几个不显眼的坑.... 不过我用的不是 IBNT,但是还是希望能帮到你。
2016-10-28 23:31:33 +08:00
回复了 Gothack 创建的主题 问与答 有没有人用过 RollerMouse 鼠标?
Rollermoiuse 没有用过,不过用过山寨版的,在淘宝里搜 RollerMouse 就可以看到。用起来很舒服,开始时候确实需要换 1-2 天适应下。

最近买的那个山寨版的坏了,正考虑是不是真的要换个正版的 rollermouse....就是太贵了。你可以先买个山寨的试试。个人觉得如果真用了这种设计的鼠标的不会想用回普通鼠标的...
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3556 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 18ms · UTC 04:57 · PVG 12:57 · LAX 21:57 · JFK 00:57
Developed with CodeLauncher
♥ Do have faith in what you're doing.