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

Короткий план действий
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.

Установка компилятора для 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.

На рабочей машине поднимаем 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

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

Короткий план действий
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.

Установка компилятора для 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.

На рабочей машине поднимаем 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
