Компанией предлагаются интегрированные системы разработки созданные на основе открытого набора утилит разработки GCC, открытого IDE Eclipce и проприетарной связки, которая интегрирует два предыдущих продукта.
Кроме того с сайта можно бесплатно загрузить уже собранный toolchain для конкретного процессора и окружения.
Нам именно это и нужно.
Итак:
На вопрос "Where Would You Like to Install" я указал "~/SGPP".
Ответы на остальные вопросы я оставил по умолчанию.
После выполнения установки toolchain будет развернут в каталоге ~/SGPP.
Установка на этом закончена. Осталось только проверить как все работает.
Ответы на остальные вопросы я оставил по умолчанию.
После выполнения установки toolchain будет развернут в каталоге ~/SGPP.
Установка на этом закончена. Осталось только проверить как все работает.
Установим переменные окружения:
Скомпилируем тестовый пример:
В редакторе создадим файл 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 и запускаем.
Вот и все.
Как будем копилировать наши проекты
- Загрузить скрипты по управлению 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, копирования его в локальный репозиторий и переиндексации репозитория.
- Установить пути и переменные окружения. Делается каждый раз при открытии нового окна терминала.
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
- Компиляция программы:
$ 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.
- Создание установочного пакета:
$ 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) | |
Binary Utilities (PDF) | |
C Library (Newlib) (PDF) | |
Compiler (PDF) | |
Debugger (PDF) | |
Getting Started Guide (PDF) | |
Linker (PDF) | |
MIPS Toolchain (PDF) | |
Math Library (Newlib) (PDF) | |
Preprocessor (PDF) | |
Profiler (PDF) |
Полезные ссылки:
- Code Sourcery G++ Lite. - Command line options to choose the correct architecture
Откровенно говоря не нашел больших отличий от просто тулчейна. Ну, разве скомпилировано уже.
ОтветитьУдалитьВозможно это и так, но платформа syabas 200 компилировалась с помощью этого тулчейна.
ОтветитьУдалитьКроме того меня смутило, что не все программы скомпилированные для syabas 100 (hdx-1000) запускаются на hdx bd-1 (killed сразу после запуска)
Вероятно есть разница в библиотеках. Сейчас не упомню, но как будто CS переписала загрузчик.
Ну а в остальном все так. GCC он и в Африке GCC