пятница, 23 апреля 2010 г.

Устанавливаем toolchain для HDX BD-1 (Sygma 8642/8643)

Как я писал ранее софт HDX BD-1 собран тулчейном Sourcery G++ компании CodeSourcery

Компанией предлагаются интегрированные системы разработки созданные на основе открытого набора утилит разработки GCC, открытого IDE Eclipce и проприетарной связки, которая интегрирует два предыдущих продукта.

Кроме того с сайта можно бесплатно загрузить уже собранный toolchain для конкретного процессора и окружения.

Нам именно это и нужно.

Итак:
$ cd ~/Downloads $ wget http://www.codesourcery.com/sgpp/lite/mips/portal/package3548/public/mips-linux-gnu/mips-4.3-51-mips-linux-gnu.bin $ /bin/sh mips-4.3-51-mips-linux-gnu.bin

На вопрос "Where Would You Like to Install" я указал "~/SGPP".
Ответы на остальные вопросы я оставил по умолчанию.

После выполнения установки toolchain будет развернут в каталоге ~/SGPP.

Установка на этом закончена. Осталось только проверить как все работает.

Установим переменные окружения:
$ PATH=$HOME/SGPP/bin:$PATH $ export PATH

Скомпилируем тестовый пример:
$ cd ~/Staff/test
В редакторе создадим файл hello.c:
#include <stdio.h>
int main()
{
  printf ("Hello Popcorn!\nThis cool!\n");
  return 0;
}
и компилируем его

$ mips-linux-gnu-gcc -EL -march=74kc -fPIC -o hello hello.c

копируем на BD-1 и запускаем.
Вот и все.


Как будем копилировать наши проекты


  1. Загрузить скрипты по управлению ipkg пакетами в директорию ~/bin. Эту операцию нужно сделать один раз. $ cd ~/bin $ wget http://axaru.opendrive.com/files/7348691_AlHrM_8dee/ipkg-build.sh $ wget http://axaru.opendrive.com/files/7348692_kbnnr_9794/ipkg-expand.sh $ wget http://axaru.opendrive.com/files/7348690_4DtrH_8256/ipkg-make-index.sh $ ln -s ipkg-build.sh ipkg-build $ ln -s ipkg-expand.sh ipkg-expand $ ln -s ipkg-make-index.sh ipkg-make-index $ cat > ipkg-repo.sh <<\EOF #!/bin/bash rm *.ipk ipkg-build install cp *rel2.ipk $REPO rm $REPO/Packages ipkg-make-index $REPO EOF $ chmod +x ipkg-repo.sh $ ln -s ipkg-repo.sh ipkg-repo
    Скрипт ipkg-repo.sh нужен для автоматического создания установочного павета ipkg, копирования его в локальный репозиторий и переиндексации репозитория.
  2. Установить пути и переменные окружения. Делается каждый раз при открытии нового окна терминала. export NODUS=~/stuff/bd/path-to-curent-project/ export PATH=~/SGPP/bin:~/bin:$PATH export REPO=~/stuff/bd/00__repo__00 export STAGE=~/SGPP/stage export PKG_CONFIG_PATH=~/SGPP/stage/lib/pkgconfig
    REPO - ссылка на локальный репозиторий. Он является копией репозитория, расположенного по адресу http://ipkg.sigmaplayer.com/optware/mipselr2/cross/

    STAGE - в это место устанавливаются библиотеки, необходимые для компиляции других программ.
    Например. Программа ххх требует при линковке библиотеку zlib. Я предварительно компилю библиотеку zlib с параметром --prefix=$STAGE
    Затем выполняю установку библиотеки ( обычно make install), и после указанных действий ссылки на билиотеку zlib при линковке программы xxx должны удовлетвориться.

    PKG_CONFIG_PATH - эта переменная окружения, которая часто требуется для правильной линковки программ.

    NODUS - место, где находятся дистрибутивы пакетов над которыми идет работа в данный момент. Ведь гораздо проще написать cd $NODUS, чем cd /home/user/stuff/bd/rutorrent

  3. Компиляция программы: $ CC='mips-linux-gnu-gcc -EL' \ CXX='mips-linux-gnu-g++ -EL' \ AR=mips-linux-gnu-ar \ LD=mips-linux-gnu-ld \ RANLIB=mips-linux-gnu-ranlib \ CFLAGS='-EL -mips32r2 -Wa,-mips32r2 -mtune=74kf2_1 -mdspr2 -pipe -fPIC -s' \ CXXFLAGS='-EL -mips32r2 -Wa,-mips32r2 -mtune=74kf2_1 -mdspr2 -pipe -fPIC -s' \ CPPFLAGS="-I${HOME}/CodeSourcery/stage/include" \ LDFLAGS="-L${HOME}/CodeSourcery/stage/lib" \ ./configure --prefix=/opt --host=mips-linux-gnu $ make $ make install DESTDIR=${PWD}/install $ tar -cvf chk_size_mipsel-rel2.tar -C install opt $ ls -la chk_size_mipsel-rel2.tar
    Первой длинной командой я осуществляю сонфигурирование пакета.
    --host - говорит, что будет выполнятся кросскомпиляция.
    --prefix - указывает куда будут инсталлироваться откомпилированные программы.
    Для репозитария указываем --prefix=/opt. Если компилируем библиотеку, необходимую для линковки пакета, то компилим и создаем установочный пакет с опцией --prefix=/opt, а затем снова компилим ее с опицей --prefix=$STAGE.
    Далее обычная компиляция и установка в директорию ~/install
    Команды tar и ls нужны для вычисления размера устанавливаемого пакета. Он нам пригодится при создании описания пакета необходимого для правильной работы ipkg.

  4. Создание установочного пакета: $ mkdir -p install/CONTROL $ cat > install/CONTROL/control <<\EOF Package: <name> Priority: optional Section: Utilities Version: <version> Architecture: mipsel-rel2 Maintainer: <address> Depends: Installed-Size: $lt;xxx> KB Description: <80 char>. EOF
    Здесь я создаю файл install/CONTROL/control, содержащий описание компилируемого пакета.
    Поля, выделенные угловыми скобками обязательны к заполнению.

    Если программа для работы требует установки других программ, то их нужно указать в поле Depends.

    Все правки файла install/CONTROL/control я выполняю редактором gedit Затем я запускаю скрипт $ ipkg-repo
    Он сам создаст пакет ipkg, поместит его в локальный репозиторий, проиндексирует локальный репозиторий и создаст (обновит) файл $REPO/Packages

    На этом все. Осталось только синхронизировать локальный репозиторий с ftp

Документация по Sourcery G++ MIPS

Title Format
Assembler (PDF) PDF
Binary Utilities (PDF) PDF
C Library (Newlib) (PDF) PDF
Compiler (PDF) PDF
Debugger (PDF) PDF
Getting Started Guide (PDF) PDF
Linker (PDF) PDF
MIPS Toolchain (PDF) PDF
Math Library (Newlib) (PDF) PDF
Preprocessor (PDF) PDF
Profiler (PDF) PDF

Полезные ссылки:
17/06/2011 - добавил описание процесса создания пакета для optware

2 комментария:

  1. Откровенно говоря не нашел больших отличий от просто тулчейна. Ну, разве скомпилировано уже.

    ОтветитьУдалить
  2. Возможно это и так, но платформа syabas 200 компилировалась с помощью этого тулчейна.

    Кроме того меня смутило, что не все программы скомпилированные для syabas 100 (hdx-1000) запускаются на hdx bd-1 (killed сразу после запуска)

    Вероятно есть разница в библиотеках. Сейчас не упомню, но как будто CS переписала загрузчик.

    Ну а в остальном все так. GCC он и в Африке GCC

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