Установка Qt Embedded

На модерации Отложенный

 

Установка Qt Embedded

Руководство по установке инструментов для разработки и инсталляции разработанного приложения на целевую систему. Основной ПК работает под управлением Debian, а целевой машиной – mini2440 на основе процессора 400 MHz Samsung S3C2440A ARM920T. 

В руководстве рассматриваются работа с эмулятором QVFB, компиляция на рабочей машине для целевого устройства, компиляция и установка драйвера tslib, установка библиотек на целевую машину.

image



Короткий план действий
1. Установить Qt для X11 и скомпилировать QVFB.
2. Установить Qt для QVFB.
3. Установить компилятор для ARM.
4. Установить Qt для ARM.
5. Скомпилировать tslib.
6. Установить библиотеки Qt и tslib на целевую машину.

Установка Qt для X11

Для установки всех инструментов нам понадобится около 20Гб свободного места на рабочей машине и 20Мб на целевой машине.

Качаем Qt 4.6.3 libraries for Linux/X11.
По неизвестным причинам версии старше этой не работают на нашем целевом устройстве mini2440. Поэтому в качестве Qt для ARM нужно ставить только эту версию. В качестве Qt для X11 и Qt для QVFB можно ставить последнюю версию с официального сайта.

При установке следуем инструкции с официального сайта.

Вот набор команд которые были использованы в нашем случае.
Устанавливаем библиотеки. Если в результате выполнения команд configure и make появятся сообщения об ошибках, то нужно поставить дополнительные библиотеки, на которые ссылаются эти сообщения и повторить команды.

sudo aptitude install libxtst-dev
sudo aptitude install libxext-dev
sudo aptitude install x11protoxext-dev
sudo aptitude install libxrender-dev
sudo aptitude install xnest

Распаковываем архивы.

gunzip qt-everywhere-opensource-src-4.6.3.tar.gz 
tar xvf qt-everywhere-opensource-src-4.6.3.tar
mv ./qt-everywhere-opensource-src-4.6.3 ./qt-X11-src-4.6.3

Переходим в папку с Qt и запускаем конфигуратор (он выполняется несколько минут). При установке Qt для X11 никаких параметров передавать конфигуратору не нужно. Библиотеки будут установлены в папку /usr/local/Trolltech/QT-4.6.3

cd ./qt-X11-src-4.6.3
./configure 

Компилируем библиотеки. Требуется несколько часов!

make

Если в результате выполнения команд configure и make появятся сообщения об ошибках, то нужно поставить дополнительные библиотеки, на которые ссылаются эти сообщения и повторить команды.
Устанавливаем библиотеки. Библиотеки будут установлены в папку /usr/local/Trolltech/QT-4.6.3

sudo make install

Далее нужно скомпилировать утилиту QVFB и скопировать ее в /usr/local/Trolltech/QT-4.6.3/bin.

cd ./tools/qvfb/
make
sudo make install
cp ../../bin/qvfb /usr/local/Trolltech/QT-4.6.3/qvfb

Мы получили утилиту QVFB, которая является эмулятором экрана устройства.

Установка Qt для QVFB

Разархивируем наш архив qt-everywhere-opensource-src-4.6.3.tar в другую папку и переименуем ее.

tar xvf qt-everywhere-opensource-src-4.6.3.tar
mv ./qt-everywhere-opensource-src-4.6.3 ./qt-qvfb-src-4.6.3

Запускаем конфигуратор и передаем ему параметры, которые указывают место установки библиотек и использование QVFB. Без опции -embedded x86 работать не будет!

cd ./qt-qvfb-src-4.6.3
./configure -qvfb -embedded x86 -prefix /usr/local/Trolltech/Qt-qvfb 

Компилируем и устанавливаем.
make

sudo make install

Проверяем, как работает QVFB.

/usr/local/Trolltech/QT-4.6.3/qvfb

Запускаем приложение в QVFB, используя ключ –qws.

./examples/widgets/analogclock/analogclock –qws

Если все правильно то приложение запустится внутри окна QVFB. 

image

Установка компилятора для ARM
Далее нужно установить компилятор для нашего устройства. Для mini2440 подходит arm-linux-gcc 4.3.2.
Нужно распаковать.

gunzip arm-linux-gcc-4.3.2.tgz
tar xvf arm-linux-gcc-4.3.2.tar

Cкопировать все в паку /usr/local

cp –R ./usr/local/arm /usr/local/arm

И изменить переменную окружения PATH

export PATH=/usr/local/arm/4.3.2/bin:$PATH

Установка Qt для ARM

Ставим только Qt 4.6.3 libraries for Linux/X11. По неизвестным причинам версии старше этой не работают на нашем целевом устройстве mini2440. 

tar xvf qt-everywhere-opensource-src-4.6.3.tar
mv ./qt-everywhere-opensource-src-4.6.3 ./qt-arm-src-4.6.3

Отключаем оптимизацию. Без этого на целевом устройстве mini2440 ничего не работает. Для этого в файле ./mkspecs/common/g++.conf находим в тексте опции –O2 и –O1 и заменяем на –O0. 

Запускаем конфигуратор и передаем ему параметры.
Параметр –qt-mouse-tslib указывает, что на целевом устройстве мы будем работать с драйвером tslib.

cd ./qt-arm-src-4.6.3
./configure –embedded arm –xplstform qws/linux-arm-g++ -prefix /usr/local/Trolltech/Qt-arm –qt-mouse-tslib –little-endian –no-webkit –no-qt3support –no-cups –no-largefile –optimized-qmake –no-openssl –nomake tools

Компилируем и устанавливаем.

make
sudo make install

Компиляция tslib

Tslib это драйвер тачскрина, который можно использовать на mini2440 с Qt. Загружаем библиотеку и распаковываем.

tar xjf tslib-1.0.tar.bz2
cd ./tslib-1.0

Устанавливаем пакеты необходимые для конфигуратора.

sudo aptitude install libtool
sudo aptitude install automake1.7
sudo aptitude install m4

Запускаем скрипты конфигуратора.

./autogen.sh
echo «ac_cv_func_malloc_0_nonnull=yes» > arm-linux.autogen 
export CC=/usr/local/arm/4.3.2/bin/arm-linux-gcc
export CXX=/usr/local/arm/4.3.2/bin/arm-linux-g++
export CONFIG_SITE=arm-linux.autogen
./configure --build=i386-linux --host=arm-linux --target=arm --disable-inputapi --prefix=$PWD/build

Компилируем.

sudo make
sudo make install

В папке ./build будут все файлы, которые нужно доставить на целевое устройство в соответствующие папки.

Установка библиотек на целевую машину

Целевую машину нужно підключить к сети и запустить telnet. На нашей mini2440 стоит Linux с установленной Qtopia. 

image

На рабочей машине поднимаем ftp-сервер.
В корневую папку сервера копируем папку build из tslib.
Также копируем библиотеки libQtCore.so.4.6.3, libQtGui.so.4.6.3, libQtNetwork.so.4.6.3 из /usr/local/Trolltech/Qt-arm/lib. Меняем расширения с *.so.4.6.3 на *.so.4 (на устройстве нужны эти файлы).
Копируем такие шрифты из папки /usr/local/Trolltech/Qt-arm/lib/fonts: DejaVuSans-Bold.ttf, DejaVuSerif-Bold.ttf, DejaVuSans.ttf, DejaVuSerif.ttf.
И копируем несколько программ из ./qt-arm-src-4.6.3/examples. Например /examples/qws/framebuffer/framefuffer и /examples/widgets/analogclock/analogclock.

Подключаемся через telnet на целевую машину (вместо telnet можно просто подключить клавиатуру и работать на mini2440). И скачиваем все с ftp с помощью команды wget.

Скачаные файлы распределяем следующим образом:
libQtCore.so.4.6.3, libQtGui.so.4.6.3, libQtNetwork.so.4.6.3 в папку /lib.
DejaVuSans-Bold.ttf, DejaVuSerif-Bold.ttf, DejaVuSans.ttf, DejaVuSerif.ttf в папку /usr/local/Trolltech/Qt-arm/lib/fonts
framefuffer, analogclock в /home.
Можно попробовать запустить analogclock

analogclock –qws

Должны появиться часы, но тачскрин пока не работает.
Дальше устанавливаем и настраиваем tslib.
На ftp сервере у нас есть папка ./build, которая содержит файлы tslib. Содержимое папки нужно скопировать в корень целевой машины.
Потом нужно отредактировать файл ts.conf для свого устройства. Для mini2440 содержимое такое

module_raw input
module pthres pmin=1
module variance delta=30
module dejitter delta=100
module linear

Создаем нужные переменные окружения

export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/lib/ts
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_CONSOLEDEVICE=none
export QWS_MOUSE_PROTO=tslib:/dev/input/event0

Не создавайте файл /etc/pointercal сами.
/dev/input/event0 это файл устройства тачскрина. На разных устройствах он может быть разный или отсутствовать. В таком случае его нужно создать.

mknod c 13 64 /dev/input/event0

Правильные числа для устройства (13 64) можно посмотреть тут 
/sys/device/virtual/input/mice/input1/event0/dev
Протестировать устройство можно так.

cat /dev/input/event0 | hexdump

Трогаем экран и получаем поток байтов.
Пробуем запустить приложение и проверяем взаимодействие с тачскрином.
Калибруем экран с помощью утилиты ts_calibrate из папки bin.

Можно попробовать запустить analogclock

analogclock –qws

image
  • Qt
  • , Qt Embedded
  • , mini2440
  • , tslib
  • , ARM