воскресенье, 27 февраля 2011 г.

Сборка iftop для Acorp W422G v3

К сожалению, в стандартной прошивке нет очень полезной утилиты iftop. Попробуем добавить её самостоятельно. Для нетерпеливых:
сd /rwfs
wget http://cloud.github.com/downloads/w422g/wive-ng-iftop/iftop
chmod +x iftop
./iftop
Для сборки будем использовать Ubuntu-10.04 и gcc 4.4.3. Прошивка роутера - uClinux, собранный под MIPS (RTL8762/R3000), поэтому нам понадобится toolchain (набор утилит для кроссплатформенной сборки под нужную архитектуру). К сожалению, mips-бинарники iftop из dd-wrt/openwrt/debian не работают на данной платформе, но нам повезло - исходники wive-ng содержат всё, что необходимо. По аналогии с iftop мы сможем собрать и любые другие утилиты.

Сборка wive-ng

Можно скачать исходники wive-ng одним файлом (snapshot):
http://wive-ng.git.sourceforge.net/git/gitweb.cgi?p=wive-ng/wive-ng;a=tree (~90MB)

Или вытянуть через git:
git clone git://wive-ng.git.sourceforge.net/gitroot/wive-ng/wive-ng
По умолчанию вся сборка происходит в /opt/Wive. Кроме того придётся немного изменить исходники, т.к. они не учитывают наличие каталогов в /usr/local. Вот примерная последовательность действий:
sudo apt-get install flex bizon
mkdir -p /opt/Wive/toolchain/nonmips-tcb/toolchain_build_mips/ccache-2.4/cache

/opt/Wive/compile:
export PATH=/opt/Wive/toolchain/bin:$PATH
export CFLAGS=-D_FORTIFY_SOURCE=0

/opt/Wive/config:
REBUILDTOOLCHAIN=YES

/opt/Wive/kernel/Makefile:
CROSSPATH = /opt/Wive/toolchain/bin/

cd /opt/Wive
./compile
Прошивка должна собраться без ошибок, но не пытайтесь заливать её в роутер, она не предназначена для данного устройства. Cборка wive-ng нам нужна только для того, чтобы получить работоспособный toolchain и нужные зависимости под mips-архитектуру (в частности, libpcap).

Сборка iftop

Качаем последние исходники iftop и ncurses, кладём их в /opt/Wive/APP/iftop и /opt/Wive/APP/iftop/ncurses соответственно.

Исходники можно взять тут:
http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz
http://ftp.gnu.org/gnu/ncurses/ncurses-5.7.tar.gz
Дальше нужно создать правила для сборки.
sudo apt-get install libpcap-dev ncurses-dev
cd /opt/Wive/APP/iftop
./configure
cd /opt/Wive/APP/iftop/ncurses
./configure
Библиотеки придётся указать явно:
/opt/Wive/APP/iftop/Makefile:
DEFAULT_INCLUDES =  -I. -I$(srcdir) -I./ncurses/include -I../tcpdump/libpcap
LIBS = -lm -lpthread ./ncurses/lib/libncurses.a ../tcpdump/libpcap/libpcap.a
Также придется добавить свои настройки (в середину, так, чтобы перекрыть старые):
/opt/Wive/APP/iftop/Makefile, /opt/Wive/APP/iftop/ncurses/ncurses/Makefile:
include ../../.config # (для iftop) или include ../../../../.config для ncurses
KERNELSRC = $(WIVEROOT)/kernel
INCLUDEALL = $(CROSSPATH)/mips-linux-uclibc/include
export CFLAGS = -Os -g -Wall -Os -fPIC -Wall -g -D__MIPSEB__ \
-fPIC -fomit-frame-pointer -mno-memcpy -DLINUX -DUSE_KERNEL -I$(INCLUDEALL)
export CC = $(CROSS_COMPILE)gcc $(CFLAGS)
export LD = $(CROSS_COMPILE)ld
export AR = $(CROSS_COMPILE)ar
export STRIP = $(CROSS_COMPILE)strip
export OBJCOPY = $(CROSS_COMPILE)objcopy
export INCLUDEDIR=$(INCLUDEALL)
Пишем скрипт для сборки и собираем:
/opt/Wive/APP/iftop/compile:
export PATH=/opt/Wive/toolchain/bin:$PATH
export CFLAGS=-D_FORTIFY_SOURCE=0
cd ncurses/ncurses/
make
cd ../../
make
/opt/Wive/toolchain/bin/mips-linux-uclibc-strip ./iftop
Если будут проблемы с запуском вспомогательных утилит ncurses (make_hash/make_keys), соберите их x86 версии и закомментируйте их пересборку под MIPS. На всякий случай вот исходники со всеми изменениями: https://github.com/w422g/wive-ng-iftop. Там же лежит бинарник iftop для W422G (и, вероятно, любых big-endian мипсов).

Как его запустить? Самое простое - скачать его c помощью wget на пользовательский раздел (rwfs). Следуюшие команды нужно выполнить уже в консоли самого модема (в данном случае W422G_v3).
сd /rwfs
wget http://cloud.github.com/downloads/w422g/wive-ng-iftop/iftop
chmod +x iftop
./iftop
Iftop показывает нам текущую скорость для всех открытых соединений по всем клиентам, подключенным к роутеру, а также общую скорость канала. Можно использовать опцию -i <iface> для выбора интерфейса и ключ -B для показа скорости в килобайтах, а не килобитах.
/rfws/iftop -i br0 -B
Выглядит это примерно так:


Что касается кастомных прошивок, то собрать их довольно сложно, т.к. на сайте проекта выкладываются только бинарные сборки и исходники ветки LAN110v2/LAN410v2/USBv3. Исходников нужной версии wive-ng-dsl (для устройств W422G_v3/W530G/W532G) в настоящее время нет в публичном доступе (может быть даже никогда и не будет - из за проблем с проприетарными драйверами realtek).

Комментариев нет:

Отправить комментарий