вторник, 26 мая 2015 г.

Установка средств кросскомпиляции (ELDK) для custom-платы на основе Digi ConnectCore 9m 2443 и сборка Qt 4.8.3

Мне необходимо собрать проект, написанный под Qt 4.8.3, для выполнения на custom-плате под управлением микроконтроллера Digi Connect Core 9M 2443. Средства разработки и кросскомпиляции будем ставить на ОС Ubuntu 10.04 (host), так как стандартная библиотека С++ этой версии совместима с библиотекой, используемой в ELDK. Ubuntu 10.04 - самая старшая версия Ubuntu, официально поддерживаемая ELDK, согласно документации.

Версия Ubuntu 10.04 уже не поддерживается, но старые пакеты можно скачать из резервного репозитория. Меняем в файле /etc/apt/sources.list строчку http://ru.archive.ubuntu.com/ubuntu/   на http://old-releases.ubuntu.com/ubuntu.

Для сборки qt надо установить пакет g++:

sudo apt-get install g++

У меня на компе установлена Ubuntu 16.04 amd64. Я устанавливаю virtualbox (sudo apt-get install virtualbox), создаю новую машину со стандартными настройками под 32-битный linux, скачиваю 32-битный iso'шник, примонтирую его в виде оптического диска и устанавливаю с него Ubuntu 10.04 x86 на виртуальную машину (подробнее).

1. Для сборки используются инструменты ELDK (Embedded Linux Development Kit) http://www.denx.de/wiki/DULG/ELDK. Я устанавливаю старую версию 4.2 (ftp://ftp-stud.hs-esslingen.de/pub/Mirrors/eldk/4.2/arm-linux-x86/iso/arm-2008-11-24.iso). В новых версиях ELDK, начиная с 5.0, изменилась система наименований, iso'шники сгруппированны по архитектуре ARM. В плате используется микропроцессор S3C2443 фирмы Sumsung ARM9. Группа микропроцессоров ARM9 может соответствовать либо архитектуре ARMv4T, либо ARMv5TE, либо ARMv5TEJ. Для последней доступной версии ELDK 5.3, по моему мнению, стоит остановиться на версии armv4t (ftp://ftp-stud.hs-esslingen.de/pub/Mirrors/eldk/5.3/iso/eldk-5.3-armv4t.iso), но я ее не проверял.

Я скачал файл на хост-машину и перекинул в общую папку /media/Data/Exchange, которая соответствует папке /media/Exchange гостевой ОС. Переходим в неё (/media/Exchange), создаем папку для монтирования (/mnt/iso) и монтируем исошник:

cd /media/Exchange
sudo mkdir /mnt/iso
sudo mount -o loop -o exec ./arm-2008-11-24.iso /mnt/iso

Переходим в директорию и запускаем установку в папку /usr/local/tools/eldk:

cd /mnt/iso

sudo ./install -d /usr/local/tools/eldk

Добавляем путь к бинарникам в общий путь поиска системы. Редактируем файл ~/.bashrc:

sudo nano ~/.bashrc

Добавляем в конец строку:

export PATH=$PATH:/usr/local/tools/eldk/usr/bin

После перезапуска терминала и инициализации его из обновленного скрипта ~/.bashrc вывод команды echo $PATH должен включать /usr/local/tools/eldk/usr/bin.

2. Кросскомпиляция Qt 4.8.3 производится на гостевой ОС Ubuntu 10.04 x86. Скачиваем версию qt 4.8.3 отсюда под хост-машиной, распаковываем в папку для сборки /media/Data/Exchange/qt_4.8.3_arm.

В проекте нет стандартных настроек для системы кросскомпиляции ELDK, поэтому надо будет создать файлы настроек. Переходим в папку mkspecs/qws, создаем папку и копируем файлы настроек:

cd /media/Data/Exchange/qt_4.8.3_arm/mkspecs/qws
mkdir linux-arm-eldk-g++
cp linux-arm-g++/qmake.conf ./linux-arm-eldk-g++
cp linux-arm-g++/qplatformdefs.h ./linux-arm-eldk-g++


Редактируем файл настроек nano ./linux-arm-eldk-g++/qmake.conf в соответствии с используемым средством кросскомпиляции /usr/local/tools/eldk:

#
# qmake configuration for building with linux-arm-eldk-g++
#

include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/qws.conf)

#Compiler Flags to take advantage of the ARM architecture

QMAKE_CFLAGS_RELEASE = -O0 -march=armv4t -mtune=arm920t -pipe
QMAKE_CXXFLAGS_RELEASE = -O0 -march=armv4t -mtune=arm920t -pipe

# modifications to g++.conf
QMAKE_CC = /usr/local/tools/eldk/usr/bin/arm-linux-gnueabi-gcc
QMAKE_CXX = 
/usr/local/tools/eldk/usr/bin/arm-linux-gnueabi-g++
QMAKE_LINK = /usr/local/tools/eldk/usr/bin/arm-linux-gnueabi-g++
QMAKE_LINK_SHLIB = /usr/local/tools/eldk/usr/bin/arm-linux-gnueabi-g++

# modifications to linux.conf
QMAKE_AR = 
/usr/local/tools/eldk/usr/bin/arm-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = /usr/local/tools/eldk/usr/bin/arm-linux-gnueabi-objcopy
QMAKE_STRIP = /usr/local/tools/eldk/usr/bin/arm-linux-gnueabi-strip

load(qt_config)


Мы прописали полный путь к кроссинструментам (например, /usr/local/tools/eldk/usr/bin/arm-linux-gnueabi-gcc вместо просто arm-linux-gnueabi-gcc ) потому, что версия QtCreator 1.3.1, которая идет в этой версии Ubuntu, почему-то не считывает путь поиска из переменной $PATH.

Собираем qt 4.8.3:

cd /media/Data/Libraries/bbb/qt_4.8.3_arm
./configure -v -embedded arm -platform qws/linux-x86-g++ -xplatform qws/linux-arm-eldk-g++ -prefix /usr/local/tools/qt_4.8.3_arm -little-endian -qt-gfx-transformed -static -confirm-license -opensource -no-accessibility -no-largefile -fast -no-phonon -no-phonon-backend -qt-zlib -no-qt3support -no-openssl -no-qdbus -no-webkit -qt-sql-sqlite -nomake demos -nomake examples -nomake docs

make
sudo make install

Устанавливаем QtCreator из репозитария:

sudo apt-get install qt-sdk

Использованный материал:
1) http://help.ubuntu.ru/wiki/old_ubuntu_versions
2) http://help.ubuntu.ru/wiki/%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B9

Комментариев нет:

Отправить комментарий