GrabDuck

Кросс-компиляция инструментарием optware — Энциклопедия Хаб.ру

:

Материал из Энциклопедия Хаб.ру

По отношению к роутеру кросс-компиляция - это процесс создания исполняемого кода для роутера за его пределами на ПК.
Наиболее распространёнными инструментариями (toolchain) в текущий момент выступают:

С помощью инструментария optware (gcc 4.1.1 + uClibc 0.9.28) собраны все пакеты основного репозитория.
Его использование рекомендуется при создании пакетов с многочисленными зависимостями, так как большинство популярных библиотек в нём уже есть.
Инструментарий энтузиастов (gcc 4.3.5 + uClibc 0.9.30.1) лучше использовать для сборки программ, которые будут работать без внешнего USB-носителя непосредственно во flash-памяти роутера или при компиляции ПО, каким-либо образом связанным с прошивкой, например модули ядра и программы, использующие общие с прошивкой библиотеки.

Использование инструментария Optware

Далее описаны шаги для создания среды для кросс-компиляции на основе последней Ubuntu.
Для сборки из Windows необходимо:

  1. Установить виртуальную машину VirtualBox.
  2. Скачать ISO-образ Ubuntu.
  3. Создать в VirtualBox новую виртуальную машину (VM) с диском в 16Gb и сетевым подключением "мост", затем установить на неё Ubuntu.
  4. Доустановить необходимые пакеты в VM, для чего открыть в Ubuntu меню "приложения>стандартные>терминал" и ввести:
sudo apt-get install autoconf automake bash bison bzip2 diffutils dropbear file flex g++ gawk groff 
libncurses-dev libtool libslang2 make mc patch perl sed shtool subversion tar texinfo zlib1g zlib1g-dev

Теперь графический интерфейс VM уже особо не нужен. В нём напоследок можно подсмотреть какой ip-адрес присвоен VM, введя
в открытом до этого окошке терминала ifconfig (в ответ получив ...inet addr:192.168.1.14 ). В дальнейшем можно подключаться
к VM с помощью putty - абсолютно так же, как к роутеру, только используя подсмотренный ip-адрес.

  • Подключаемся к VM с помощью putty, запускаем mc и правим файл ~/.profile, находящийся тут же,
    в домашней директории. В конец файла необходимо дописать эти строчки:
export LC_ALL='ru_RU.UTF-8'
export OPTWARE_TARGET=oleg

Отключаемся от VM командой exit и повторно подключаемся для того, чтобы ннастройки вступили в силу.
Теперь с русским языком и псевдографикой в mc будет порядок.

  • Настраиваем инструментарий optware, который будет в дальнейшем использоваться для компиляции:
$ cd ~
$ svn co http://svn.nslu2-linux.org/svnroot/optware/trunk optware
$ cd ./optware
$ make directories
$ make toolchain

Тулчейн будет собираться около часа.

  • Пробуем тулчейн на работоспособность, пробуя собрать какой-нибудь пакет, например:
$ cd ~/optware
$ make transmission-ipk

Если всё пройдёт успешно, то через пять минут в папке ~/optware/builds будет лежать пакет transmission_2.22-2_mipsel.ipk, готовый к установке на роутер. Его можно скопировать в Windows с помощью утилиты WinSCP или сразу отправить на роутер с помощью linux-утилиты scp.

Подробности создания собственных пакетов на основе шаблона optware описаны здесь, в разделе "Building the ipkg package".
Следует отметить, что скрипты автоматической сборки ПО в этом инструментарии предполагают использование в исходных кодах
GNU Build Tools, что легко определить по наличию скрипта ./configure в папке распакованных исходников.

Использование инструментария энтузиастов

Инструментарий время от времени подвергается модернизации, актуальную версию можно взять здесь.

Для создания среды сборки инструментарием энтузиастов необходимо выполнить п.п.1-5 как указано

выше, а затем скачать и распаковать в выбранную папку инструментарий энтузиастов:

$ cd ~
$ wget http://wl500g.googlecode.com/files/hndtools-mipsel-uclibc-4.3.5-K26-2.tar.bz2
$ tar -xvzf ./hndtools-mipsel-uclibc-4.3.5-K26-2.tar.bz2

Прошу обратить внимание на различия между доступными вариантами инструментария:

  • hndtools-mipsel-uclibc-4.3.5-K26-2.tar.bz2 - служит для сборки прошивки ветки 1.9.2.7-rtn или программ, использующих возможности ядра 2.6.

По мнению автора статьи, если нет никаких других предпочтений, то стоит пользоваться этим вариантом.

  • hndtools-mipsel-uclibc-4.3.5-K26-x86_64-2.tar.bz2 - то же самое, только для 64-битных ОС,
  • hndtools-mipsel-uclibc-4.3.5-3.tar.bz2 - служит для сборки прошивки ветки 1.9.2.7-d или программ, использующих возможности ядра 2.4.

В чём-то более универсален, чем предыдущий, так как полученный с его помощью код будет работать как на прошивках 1.9.2.7-d, так и на 1.9.2.7-rtn.
Конечно же, если программа использует специфические возможности ядра 2.6, то скомпилировать её этим вариантом инструментария не удастся.

  • hndtools-mipsel-uclibc-4.3.5-x86_64-3.tar.bz2 - то же самое, только для 64-битных ОС.

После распаковки инструментарий уже готов к работе.

Для удобства его использования совместно с GNU Build Tools предлагаю использовать следующий скрипт:

#!/bin/sh
AR=~/hndtools-mipsel-uclibc-4.3.5-K26-2/bin/mipsel-uclibc-ar \
AS=~/hndtools-mipsel-uclibc-4.3.5-K26-2/bin/mipsel-uclibc-as \
LD=~/hndtools-mipsel-uclibc-4.3.5-K26-2/bin/mipsel-uclibc-ld \
NM=~/hndtools-mipsel-uclibc-4.3.5-K26-2/bin/mipsel-uclibc-nm \
CC=~/hndtools-mipsel-uclibc-4.3.5-K26-2/bin/mipsel-uclibc-gcc \
CPP="~/hndtools-mipsel-uclibc-4.3.5-K26-2/bin/mipsel-uclibc-gcc -E" \
GCC=~/hndtools-mipsel-uclibc-4.3.5-K26-2/bin/mipsel-uclibc-gcc \
CXX=~/hndtools-mipsel-uclibc-4.3.5-K26-2/bin/mipsel-uclibc-g++ \
RANLIB=~/hndtools-mipsel-uclibc-4.3.5-K26-2/bin/mipsel-uclibc-ranlib \
STRIP=~/hndtools-mipsel-uclibc-4.3.5-K26-2/bin/mipsel-uclibc-strip \
LDFLAGS="-Wl,-rpath,/opt/lib-oleg " \
./configure \
--build=i386-pc-linux-gnu \
--host=mipsel-linux \
--target=mipsel-linux \

Полезные ссылки

http://code.google.com/p/wl500g/downloads/list