Сборка customized прошивки с компонентами из optware
За основу взяты следующие компоненты:
Для начала необходимо подготовить систему для сборки прошивки, я устанавливаю убунту в VirtualBox и необходимые пакеты следуя указаниям на http://code.google.com/p/wl500g/wiki...CustomFirmware
Code:
sudo apt-get install build-essential
sudo apt-get install libncurses5-dev
sudo apt-get install gawk
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install zlib1g-dev
sudo apt-get install subverion
mkdir -p ~/asus/downloads
cd ~/asus/downloads
wget http://dlsvr02.asus.com/pub/ASUS/wireless/WL-500g-03/GPL_1927.zip
wget http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.37.5.tar.bz2
wget http://wl500g.googlecode.com/files/hndtools-mipsel-uclibc-4.1.2-3.tar.bz2
sudo chown dvg /opt
запускаем скрипт в дире downloads который все распаковывает и подготавливает для сборки
Code:
#!/bin/sh
BASE_PATH="/home/dvg/asus"
SRC_PATH="/home/dvg/asus/downloads"
KERNEL="linux-2.4.37.5"
rm -rf $BASE_PATH/broadcom/*
tar -C $BASE_PATH -zxvf $SRC_PATH/GPL_1927.zip
rm -rf $BASE_PATH/broadcom/src/linux/linux
tar -C $BASE_PATH/broadcom/src/linux -jxvf $SRC_PATH/$KERNEL.tar.bz2
ln -sf $BASE_PATH/broadcom/src/linux/linux-2.4.37.5 $BASE_PATH/broadcom/src/linux/linux
rm -rf $BASE_PATH/broadcom/opt
svn checkout http://wl500g.googlecode.com/svn/trunk/ $BASE_PATH/broadcom/src/wl500g-1.9.2.7-d
svn co http://svn.nslu2-linux.org/svnroot/optware/trunk $BASE_PATH/optware
rm -rf /opt/brcm
mkdir /opt/brcm
tar -C /opt/brcm -jxvf $SRC_PATH/hndtools-mipsel-uclibc-4.1.2-3.tar.bz2
ln -sf /opt/brcm/hndtools-mipsel-uclibc-4.1.2 /opt/brcm/hndtools-mipsel-uclibc
Для удобства редактируем ~/.profile
Code:
export PATH=$PATH:/opt/brcm/hndtools-mipsel-uclibc/bin
На этом этапе у нас все готово для оригинальной 10-d сборки. Подготавливаем optware для сборки пакетов под платформу oleg.
Code:
cd ~/asus/optware
make oleg-target
Теперь нужно выкачать нужные нам исходники пакетов для интеграции в систему сборки firmware, в то время как патчи к сырцам у нас уже лежат в ~/asus/optware/sources
Code:
cd ~/asus/optware/oleg
make lzo-source
make openssl-source
make openvpn-source
make net-snmp-source
Теперь нужно положить патчи и архивы в ~/asus/broadcom/src/sl500g-1.9.2.7-d
Code:
cd ~/asus/optware/downloads
cp lzo-1.08.tar.gz ~/asus/broadcom/src/wl500g-1.9.2.7-d/
cp openvpn-2.1_rc15.tar.gz ~/asus/broadcom/src/wl500g-1.9.2.7-d/
mkdir ~/asus/broadcom/src/wl500g-1.9.2.7-d/openssl
cp openssl-0.9.7m.tar.gz /home/dvg/asus/broadcom/src/wl500g-1.9.2.7-d/openssl/
cd ~/asus/optware/sources/openssl && cp openssl-0.9.7m.tar.gz /home/dvg/asus/broadcom/src/wl500g-1.9.2.7-d/openssl/
mkdir ~/asus/broadcom/src/wl500g-1.9.2.7-d/net-snmp
cp net-snmp-5.4.2.1.tar.gz /home/dvg/asus/broadcom/src/wl500g-1.9.2.7-d/net-snmp/
cd ../sources/net-snmp/
cp SNMP_FREE-gcc4.patch /home/dvg/asus/broadcom/src/wl500g-1.9.2.7-d/net-snmp/
Осталось поправить файлик ~/asus/broadcom/src/wl500g-1.9.2.7-d/Makefile. Основываемся на ревизии 476 для прошивки 10-d, дифф в аттаче под именем Makefile1.diff
Теперь можно можно приступать к сборке:
Code:
cd ~/asus/broadcom/src/wl500g-1.9.2.7-d
make kernel
make
Теперь у нас появился каталог ~/asus/broadcom/src/gateway в котором лежит свой Makefile, собирающий непосредственно бинарники софта и в итоге trx файл. Этот Makefile тоже необходимо поправить для сборки дополнительных пакетов. Дифф в аттаче под именем Makefile2.diff
Далее в файле ~/asus/broadcom/src/gateway/.config указываем следующие опции
Code:
CONFIG_LZO=y
CONFIG_OPENSSL=y
CONFIG_OPENVPN=y
CONFIG_NETSNMP=y
Тут же можно закомментить пакеты которые не нужны в итоговой прошивке. Я лично убрал следующие:
Code:
upnp
jpeg6b
rcamd
lprng
bpalogin
waveserver
jetdirect
samba
nfsd
nfs
snmp
igmpproxy
scsiidle
Для подкладывания уже собранных бинарников, таких как например tcpdump, делаем следующее:
Code:
mkdir ~/asus/broadcon/src/router/Addon
cp tcpdump ~/asus/broadcon/src/router/Addon
Makefile который собирает прошивку сам заберет оттуда файлики и положит в прошивку в /usr/sbin
последний штрих
Code:
cd ~/asus/broadcom/src/gateway
make
make install
Принцип портирования
Нужно понимать несколько основных моментов, первое мы собираем софт используя тот же тулчейн которым собирается прошивка, а значит мы избавляемся от лишних библиотек, и второе, раз софт собирается через систему сборки optware значит его можно заставить собираться и тулчейном собирающим прошивку. Насколько я смог разобраться файл ~/asus/broadcom/src/wl500g-1.9.2.7-d/Makefile предназначен для подготовки исходников к компиляции, его задача создать в директории ~/asus/broadcom/src/ диру с именем пакета, например lzo. Здесь же можно использовать патчер в виде $(PATCHER) который накладывает патчи на исходники, а также запустить скрипт ./configure который подготовит исходники непосредственно к сборке через Make. Но мне показалось что использовать ./configure для крупных пакетов непосредственно в этом файле не совсем удобно. Поэтому здесь я запускал ./configure только для lzo который не требовал особых переменных окружения и параметров сборки. Все остальные проги я конфигал в другом мейкфайле - ~/asus/broadcom/src/gateway/Makefile и тут же происходит непосредственно компиляция исходников.
Вобщем основной принцип такой, смотрим в файл ~/asus/optware/make/packet-name.mk где packet-name.mk это один из нужных вам пакетов и находим секции с именем packet-name-unpack идем в ее цель и понимаем каким образом накладываются патчи и с какими параметрами запускается скрипт ./configure чаще всего необходимо правильно установить переменные окружения для указания правильного тулчейна типа как в ~/asus/broadcom/src/gateway/Makefile:
Code:
export CC := $(CROSS_COMPILE)gcc
export AR := $(CROSS_COMPILE)ar
export AS := $(CROSS_COMPILE)as
export LD := $(CROSS_COMPILE)ld
export NM := $(CROSS_COMPILE)nm
export RANLIB := $(CROSS_COMPILE)ranlib
export STRIP := $(CROSS_COMPILE)strip
export SIZE := $(CROSS_COMPILE)size
а также передаче правильных параметров --host, --target, --build скрипту ./configure. Далее смотрим секцию packet-name/.build и понимаем с какими параметрами запускается Make собственно больше нам ничего и нужно.
Итак в ~/asus/broadcom/src/wl500g-1.9.2.7-d/Makefile перетаскием секции по распаковке и накладыванию патчей по желанию конфигурирования, а в ~/asus/broadcom/src/gateway/Makefile перетаскиваем непосредственно секции сборки (ну и конфигурирования если еще не было).
Последний этап это секция install в которой основное место отведено утилите $(STIP) для удаления отладочной информации из бинарников, в свете уменьшения их размера.
Все это писалось на коленке и "под себя" поэтому "костылей" пока что много. Хотелось бы таким образом портировать с optware значительную часть софта и простым указанием в ~/asus/broadcom/src/gateway/.config необходимых пакетов собирать прошивку именно с тем софтом который нужен. Вот для доведения этой работы до ума, прошу народ откликнуться. В особенности хотелось бы услышать комментарии theMIROn