немного про то, как кросскомпилировать любой posix софт под этот модем тулчейном что выложен в архиве на фтп вместе с исходниками:
для кросскомпиляции необходимо предварительно установить некоторые переменные окружения, отвечающие за компиляцию. Удобно все это поместить в один файл, например environment следующего содержания:
Код:
TOOLCHAINS_HOME=/opt/toolchains/uclibc-crosstools
export LIBS="-L${TOOLCHAINS_HOME}/lib/gcc/mips-linux/3.4.2 -L/var/harddisk/lib"
export INCLUDES="-I${TOOLCHAINS_HOME}/include/c++/3.4.2 \
-I${TOOLCHAINS_HOME}/mips-linux/sys-include \
-I/home/user/build/dsl2650/kernel/linux/include \
-I/var/harddisk/include"
export CFLAGS="${INCLUDES} ${LIBS}"
export LDFLAGS=""
export CC="${TOOLCHAINS_HOME}/bin/mips-linux-uclibc-gcc"
export AR="${TOOLCHAINS_HOME}/bin/mips-linux-uclibc-ar"
export RANLIB="${TOOLCHAINS_HOME}/bin/mips-linux-uclibc-ranlib"
export PKG_CONFIG_PATH=/var/harddisk/lib/pkgconfig
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${TOOLCHAINS_HOME}/lib:/var/harddisk/lib"
export PATH="${PATH}:${TOOLCHAINS_HOME}/bin"
и при необходимости писать в терминале просто набирать:
Код:
. ./environment
после чего можно приступать к сборе стандартными методами
типичная строка ./configure для кросскомпиляции с данным тулчейном выглядит так:
Код:
./configure --build=i586-suse-linux --host=mips-linux --target=mips-linux --prefix=/var/harddisk
здесь и выше /var/harddisk это прификс, куда будет устанавливаться софт, изначально я собирался располагать весь кросскоммпилированный софт на флешке/жестком диске, который будет доступен на модеме в //var/harddisk, аналогично с прошивками asus, на своем компьютере я так же создал такой каталог и при выполнении make install для кросскомпилированного софта он просто устанавливался в этот каталог
даже при удачной кросскомпиляции при попытке запустить скомпилированный софт на модеме вы скорее всего получите ошибку unknown symbol: XXXX. Данная проблема вызвана тем, что при сборке прошивки из библиотек вырезается весь неиспользуемый код, для того чтобы его оставить необходимо устанавливать софт в катаог где подготавливается прошивка так. как это делается и для стандартного софта - через Makefile
Однако в этом случае, если все бинарники уже скопированы вы скорее всего получите ошибки на этапе сборки libcreduction - это решается правкой файла
userapps/opensource/libcreduction/Makefile
строку вида
Код:
python ./mklibs.py -D -L $(LIBDIR) -L $(INSTALL_DIR)/lib --target=$(CROSS_COMPILE) -d $(PLATFORM) $(BINARIES);
нужно привести к виду
Код:
python ./mklibs.py -D -L $(LIBDIR) -L $(INSTALL_DIR)/lib -L /var/harddisk/lib --target=$(CROSS_COMPILE) -d $(PLATFORM) $(BINARIES);
то есть добавить путь к библиотекам, с которыми был собран ваш софт на этапе кросскомпиляции
кросскомпилированный софт проще всего добавлять в прошивку через стандартный makefile, через который собирается все остальное, достаточно в районе описания целей стандартного софта вроде samba: вставить свои цели, например
Код:
transmission:
install -m 755 $(OPENSOURCE_DIR)/transmission-1.90/daemon/transmission-daemon $(INSTALL_DIR)/bin
$(STRIP) $(INSTALL_DIR)/bin/transmission-daemon
mkdir -p $(INSTALL_DIR)/usr/share
cp -R /var/harddisk/share/transmission $(INSTALL_DIR)/usr/share
и соответвенно добавить нашу цель в OPENSOURCE_APPS
Код:
OPENSOURCE_APPS = ipsec-tools pvc2684ctl pvc2684d brctl pppd udhcp iptables ebtables \
reaim tc libosip2 siproxd snmp zebra bftpd radvd dhcpv6 busybox oprofile dproxy pptp samba \
transmission vsftpd ntfs-3g