Данная заметка является вольным переводом статьи CrossCompiling for the NMT с небольшими дополнениями и уточнениями.
Для того, чтобы собрать программу под Networked Media Tank (а собирать мы будем midnight commander) нам нужно сначала установить кросскомпилятор.
Можно загрузить уже собраный Lundman, но, поскольку он был собран в другой конфигурации, программы, скомпилированные с его помощью, могут создавать "Floating point error"
Поэтому соберем кросскомпилятор самостоятельно.
Это не сложно.
Tребуется соединение с интернет.
- Определимся с корневым каталогом, где будет находится кросскомпилятор и проекты.
Я создал каталог /home/akhromov/Staff и загрузил в него toolchain.
$ mkdir /home/akhromov/Staff $ cd /home/akhromov/Staff $ wget http://www.networkedmediatank.com/download/firmware/nmt/gpl/smp86xx_toolchain.20080505.tar.bz2 $ tar -xjsf smp86xx_toolchain.20080505.tar.bz2 $ cd smp86xx_toolchain.20080505
- Установить следующие приложения:
$ sudo apt-get install flex genromfs bison libncurses5-dev ncurses-base
Если указанные пакеты или пакет присутствуют в системе, то никаких действий производиться не будет. Если какой либо пакет отсутствует, то он будет установлен.
- Установить GCC-3.4
Меня предупреждал AntiHaos, что необходим компилятор GCC-3.4, но я по лени не проверил это. А Shtucer уже явно указал на мой косяк. Спасибо. Инструкцию поправил.
$ wget http://ge.archive.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/gcc-3.4-base_3.4.6-6ubuntu5_i386.deb $ wget http://ge.archive.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/cpp-3.4_3.4.6-6ubuntu5_i386.deb $ wget http://ge.archive.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/gcc-3.4_3.4.6-6ubuntu5_i386.deb $ sudo dpkg -i gcc-3.4-base_3.4.6-6ubuntu5_i386.deb $ sudo dpkg -i cpp-3.4_3.4.6-6ubuntu5_i386.deb $ sudo dpkg -i gcc-3.4_3.4.6-6ubuntu5_i386.deb
Порядок уствновки важен!
- Создать файл конфигурации.
$ export CC=gcc-3.4 $ make menuconfig
Ничего не менять, а сразу выбрать пункт < Exit >.
Устанавливаем следующие параметры:
Toolchain Options -> Kernel Headers -> (X) Linux 2.6.11.0 kernel headers
Toolchain Options -> uClibc Version -> (X) uClibc 0.9.28.3
Toolchain Options -> Binutils Version -> (X) binutils 2.15.91.0.2
Toolchain Options -> GCC compiler version -> (X) gcc 4.0.4
Остальные параметры я не менял.
На вопрос: "Do you wish to save your new Buildroot configuration? "ответить < Yes >
- Запустить компиляцию toolchain
$ make
Система автоматически загрузит из интернет нужные пакеты и скомпилирует их.
Весь процесс на Thinkpad x200s (процессор SL9400, RAM - 3GB) и 2-х мегабитным каналом в интернет занимает около получаса.
Если все прошло правильно, то по завершении компиляции toolchain, Вы увидите в терминале следующее:
. . . . . . . . . strip /home/akhromov/Staff/smp86xx_toolchain.20080505/toolchain_build_mipsel_nofpu/gdbclient-6.3/gdb/gdb install -c /home/akhromov/Staff/smp86xx_toolchain.20080505/toolchain_build_mipsel_nofpu/gdbclient-6.3/gdb/gdb /home/akhromov/Staff/smp86xx_toolchain.20080505/build_mipsel_nofpu/staging_dir/bin/mipsel-linux-uclibc-gdb ln -s ../../bin/mipsel-linux-uclibc-gdb \ /home/akhromov/Staff/smp86xx_toolchain.20080505/build_mipsel_nofpu/staging_dir/mipsel-linux-uclibc/bin/gdb creating toolchain-path.env... akhromov@x200s:~/Staff/smp86xx_toolchain.20080505$
- Проверка кросскомпилятора
Для этого создадим тестовый каталог
$ cd .. $ mkdir test $ cd test
и в нем тестовый файл hello.c следующего содержания.
#include <stdio.h> int main() { printf ("Hello Popcorn!\nThis cool!\n"); return 0; }
компилируем его
$ source ../smp86xx_toolchain.20080505/toolchain-path.env $ mipsel-linux-gcc -static hello.c -o hello
загружаем на наш nmt и в терминале запускаем:
# ./hello Hello Popcorn! This cool! #
Если нет подходящей темы, открывайте новую.