пятница, 12 февраля 2010 г.

Как установить кросскомпилятор для Popcorn (Sigma 86xx) на Ubuntu 9.10

Продолжение. Начало здесь

Данная заметка является вольным переводом статьи CrossCompiling for the NMT с небольшими дополнениями и уточнениями.

Для того, чтобы собрать программу под Networked Media Tank (а собирать мы будем midnight commander) нам нужно сначала установить кросскомпилятор.

Можно загрузить уже собраный Lundman, но, поскольку он был собран в другой конфигурации, программы, скомпилированные с его помощью, могут создавать "Floating point error"

Поэтому соберем кросскомпилятор самостоятельно.

Это не сложно.

Tребуется соединение с интернет.


  1. Определимся с корневым каталогом, где будет находится кросскомпилятор и проекты.
    Я создал каталог /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

  2. Установить следующие приложения:
    $ sudo apt-get install flex genromfs bison libncurses5-dev ncurses-base
    Если указанные пакеты или пакет присутствуют в системе, то никаких действий производиться не будет. Если какой либо пакет отсутствует, то он будет установлен.

  3. Установить 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
    Порядок уствновки важен!

  4. Создать файл конфигурации.
    $ 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 >

  5. Запустить компиляцию 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$
  6. Проверка кросскомпилятора
    Для этого создадим тестовый каталог
    $ 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! #
Теперь наш кросскомпилятор готов для работы.

Если нет подходящей темы, открывайте новую.

16 комментариев:

  1. Спасибо!
    А каким образом можно безболезненно gcc-4.x заменить на gcc-3.4 для удачной компиляции?

    Антон.

    ОтветитьУдалить
  2. При этом должен быть установлен gcc-3.4 ведь?
    В стандартном репозитории ubuntu 9.10. только более старшая версия.
    Вы компилировали именно младшей версией или последней версией gcc?
    Если более младшей, то из какого дистрибутива?

    На ubuntu перешел значительно недавно, пока не разобрался, как это сделать при помощи apt-get

    Антон.

    ОтветитьУдалить
  3. А компиляция велась установленным gcc-3.4?
    А из какого репозитория?

    Антон.

    ОтветитьУдалить
  4. Я по соему специально никакого компилятора не устанавливал.
    В toolchain "умный" makefile. Он сам загружает недостающие пакеты.

    А для чего все эти "наводящие" вопросы? ;-)

    ОтветитьУдалить
  5. Хочу понять причина в 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

    Судя по ошибке не находит патчи.
    Было ли такое у вас?

    ОтветитьУдалить
  6. Такого не припомню.
    Ну так вот же ключевое сообщение:
    cat: toolchain/kernel-headers/linux-libc-headers-2.4.29*.patch: No such file or directory

    ОтветитьУдалить
  7. Спасибо. Значит что-то индивидуальное.
    Буду разбираться.
    А не компилировали ли вы mc версии 4.7 под popcorn?

    Кросскомпиляция мне необходима для сборки именно его.
    Если у вас есть уже скомпилированная версия, был бы рад ее установить.
    Не пришлось бы тогда компиляцией сейчас заниматься.

    ОтветитьУдалить
  8. Я тоже собираюсь этим заняться в ближайшее время.
    Предлагаю вместе...
    Я общаюсь с разработчиками по аське. Очень контактные и толковые ребята. К сожалению очень занятые...

    ОтветитьУдалить
  9. С удовольствием. :)
    Буду пока разбираться с тулчейном.

    ОтветитьУдалить
  10. Однако, какие бы умные не были 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 поставил из репозитариев, так проще же, ну а компиляцию отложил для более интересных задач.

    ОтветитьУдалить
  11. Ну, я даже не про защиту, я просто привык за сколько-то там лет администрирования к ssh. Как-то удобней мне с ним.

    g-mini 1000HD

    ОтветитьУдалить
  12. Shtucer, от кого мне внутри домашней сети защищаться протоколом ssh?

    Что за балалайка?
    Давай лучше в форуме продолжим, а то здесь как то неудобно...

    ОтветитьУдалить
  13. Ссылк на g-mini 1000HD не работает...

    ОтветитьУдалить
  14. Нет, работает. Там кавычка лишняя

    ОтветитьУдалить