Данная заметка является вольным переводом статьи 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! #
Если нет подходящей темы, открывайте новую.
Спасибо!
ОтветитьУдалитьА каким образом можно безболезненно gcc-4.x заменить на gcc-3.4 для удачной компиляции?
Антон.
Пункт 3
ОтветитьУдалить$ export CC=gcc-3.4
При этом должен быть установлен gcc-3.4 ведь?
ОтветитьУдалитьВ стандартном репозитории ubuntu 9.10. только более старшая версия.
Вы компилировали именно младшей версией или последней версией gcc?
Если более младшей, то из какого дистрибутива?
На ubuntu перешел значительно недавно, пока не разобрался, как это сделать при помощи apt-get
Антон.
А компиляция велась установленным gcc-3.4?
ОтветитьУдалитьА из какого репозитория?
Антон.
Я по соему специально никакого компилятора не устанавливал.
ОтветитьУдалитьВ toolchain "умный" makefile. Он сам загружает недостающие пакеты.
А для чего все эти "наводящие" вопросы? ;-)
Хочу понять причина в gcc или нет.
ОтветитьУдалитьВываливается с ошибкой:
toolchain/patch-kernel.sh /home/neobht/smp86xx_toolchain.20080505/toolchain_build_mipsel_nofpu/linux toolchain/kernel-headers linux-libc-headers-2.4.29\*.patch
Applying toolchain/kernel-headers/linux-libc-headers-2.4.29*.patch using plaintext:
cat: toolchain/kernel-headers/linux-libc-headers-2.4.29*.patch: No such file or directory
toolchain/patch-kernel.sh: 44: patch: not found
Patch failed! Please fix toolchain/kernel-headers/linux-libc-headers-2.4.29*.patch!
make: *** [/home/neobht/smp86xx_toolchain.20080505/toolchain_build_mipsel_nofpu/linux/.patched] Ошибка 1
Судя по ошибке не находит патчи.
Было ли такое у вас?
Такого не припомню.
ОтветитьУдалитьНу так вот же ключевое сообщение:
cat: toolchain/kernel-headers/linux-libc-headers-2.4.29*.patch: No such file or directory
Спасибо. Значит что-то индивидуальное.
ОтветитьУдалитьБуду разбираться.
А не компилировали ли вы mc версии 4.7 под popcorn?
Кросскомпиляция мне необходима для сборки именно его.
Если у вас есть уже скомпилированная версия, был бы рад ее установить.
Не пришлось бы тогда компиляцией сейчас заниматься.
Я тоже собираюсь этим заняться в ближайшее время.
ОтветитьУдалитьПредлагаю вместе...
Я общаюсь с разработчиками по аське. Очень контактные и толковые ребята. К сожалению очень занятые...
С удовольствием. :)
ОтветитьУдалитьБуду пока разбираться с тулчейном.
AntiHaos, что у тебя нового?
ОтветитьУдалитьОднако, какие бы умные не были make файлы у тулчейна, скомпилиться с наскока не захотело. Пришлось поставить gcc-3.4. Взял их репозитариев 9.04 (jaunty) link, прошелся по зависимостям, у меня оказалось две неудовлетворенные: gcc-3.4-base и cpp-3.4. Скачал дебы, поставил с помощью dpkg, ну а дальше со слов: "export CC=gcc-3.4"
ОтветитьУдалитьПара вопросов не по теме поста. Почему такая любовь к телнету, а не к ssh? Неужели на Popcorn не работает optware? На моей балайке вполне себе заработало mc поставил из репозитариев, так проще же, ну а компиляцию отложил для более интересных задач.
Ну, я даже не про защиту, я просто привык за сколько-то там лет администрирования к ssh. Как-то удобней мне с ним.
ОтветитьУдалитьg-mini 1000HD
Shtucer, от кого мне внутри домашней сети защищаться протоколом ssh?
ОтветитьУдалитьЧто за балалайка?
Давай лучше в форуме продолжим, а то здесь как то неудобно...
Ссылк на g-mini 1000HD не работает...
ОтветитьУдалитьНет, работает. Там кавычка лишняя
ОтветитьУдалить