Сборка Qt под процессорный модуль

Версия Qt использованная для сборки: 4.7.4

Описание на примере VAR-SOM-OM37. Также должно работать для VAR-SOM-AM35, VAR-SOM-OM35.

Рекомендуется сперва ознакомится со статьей Установка и настройка OpenEmbedded

Введение

Qt 4.7.4 может работать в двух режимах:

  • Как standalone приложение с собственной оконной системой QWS (Qt Window System), в этом случае любое Qt приложение пишет напрямую во фрейм буффер обходя даже X11 если он запущен. Если приложений несколько, то одно из них может быть QWS сервером, но в любом случае, все они будут писать во фрейм буффер напрямую. Этот способ применяется в Embedded Qt, он быстрее чем работа через X11 сервер, минус в том, что если X11 запущен, то QWS и X11 будут паралелльно писать во фрейм буффер и на экране будут появляться артефакты. Этот способ работы Qt больше подходит для embedded систем типа мобильных телефонов, где нет X11 и на экране всегда одно приложение развёрнутое на полный экран.
  • Как приложение, использующее X11. В этом случае для корректной работы Qt приложению нужен запущенный X11 сервер, приложение работает медленнее, но зато нет гонок за фрейм буффер и Qt приложение «вписывается» в окружение, его окна корректно отрисовываются и не мешают отрисовываться другим окнам. Такой способ работы больше подходит для Desktop или систем, где уже есть X11 сервер.

Т.к у нас на модуле X11 сервер уже работает, то будем собирать Qt с использованием X11.

Чтобы корректно собрать и установить Qt 4.7.4 на модуль необходимо проделать шаги, описанные ниже.

Настройка gcc toolchain

Снача необходимо скачать и настроить gcc toolchain.

О том, как это сделать написано здесь.

Сборка Angstrom помимо ARM toolchain содержит:

  • X11 headers and libraries, fontconfig headers and libraries
  • Qt 4.6.3 embedded headers and libraries

Этим toolchain'ом мы не только соберём Qt, но и будем собирать весь софт.

Qt, который входит в комлект, нам не нужен, он собран как embedded, а мы будем собирать Qt версии 4.7.4 под X11.

Этот toolchain хорош тем, что содержит готовый X11 и fontconfig, если планируется использовать другой toolchain, то X11 и fontconfig придётся собирать отдельно.

Очень важно использовать fontconfig, именно с его помощью Qt будет осуществлять anti-alias'инг шрифтов.

После установки toolchain, нужно выполнить:

cd TOOLCHAIN_DIR/usr/local/angstrom/arm/arm-angstrom-linux-gnueabi/usr/include
ln -s freetype2/freetype freetype

Чтобы Qt нашёл freetype и fontconfig.

Сборка Qt 4.7.4

Нужно скачать вот этот архив: ftp://ftp.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.7.4.tar.gz

и распаковать его куда-нибудь, допустим в $HOME/variscite/qt-4.7.4, далее этот каталог мы будем называть QT474_SOURCE_DIR.

Теперь нужно перейти в QT474_SOURCE_DIR/mkspecs и создать там каталог с именем «linux-arm-g++», каталог нужно назвать ИМЕННО ТАК И НЕ ИНАЧЕ.

внутри этого каталога нужно создать файл qmake.conf с содержимым:

#
# qmake configuration for linux-g++
#

MAKEFILE_GENERATOR	= UNIX
TARGET_PLATFORM		= unix
TEMPLATE		= app
CONFIG			+= qt warn_on release incremental link_prl
QT			+= core gui network
QMAKE_INCREMENTAL_STYLE = sublib

include(../common/g++.conf)
include(../common/linux.conf)

# modifications to g++.conf
QMAKE_CC                = arm-angstrom-linux-gnueabi-gcc
QMAKE_CXX               = arm-angstrom-linux-gnueabi-g++
QMAKE_LINK              = arm-angstrom-linux-gnueabi-g++
QMAKE_LINK_SHLIB        = arm-angstrom-linux-gnueabi-g++

# modifications to linux.conf
QMAKE_AR                = arm-angstrom-linux-gnueabi-ar cqs
QMAKE_OBJCOPY           = arm-angstrom-linux-gnueabi-objcopy
QMAKE_STRIP             = arm-angstrom-linux-gnueabi-strip

load(qt_config)

и файл qplatformdefs.h с содержимым:

#include "../linux-g++/qplatformdefs.h"

теперь нужно перейти в QT474_SOURCE_DIR и выполнить:

export PATH=$PATH:TOOLCHAIN_DIR/usr/local/angstrom/arm/bin
./configure -fontconfig -no-webkit -no-accessibility -no-qt3support -no-xmlpatterns \
-no-multimedia -no-audio-backend -no-phonon -no-phonon-backend -no-svg -no-javascript-jit -no-script \
-no-scripttools -no-declarative -no-declarative-debug \
-no-rpath -little-endian -opensource -arch arm -xplatform linux-arm-g++ -prefix-install -prefix "QT474_CROSS_INSTALL_DIR"
make
make install INSTALL_ROOT="QT474_NATIVE_INSTALL_DIR"

где:

  • QT474_CROSS_INSTALL_DIR - ПОЛНЫЙ путь до каталога, в который планируется положить Qt на модуле, например /usr/local/Qt474
  • QT474_NATIVE_INSTALL_DIR - ПОЛНЫЙ путь до каталога, в который планируется скопировать результаты сборки, например $HOME/variscite/qt474-install

После этого в каталоге QT474_NATIVE_INSTALL_DIR будет лежать всё что нужно чтобы запускать Qt приложения, также туда будут скопированы файлы, необходимые для разработки, т.е headers, утилиты qmake, moc, uic, rcc и т.д. Кроме того, туда же будут установлены examples и demos, если они не нужны, то можно просто их удалить или собирать Qt с двумя дополнительными флагами:

-nomake demos -nomake examples

Для того чтобы разрабатывать приложения с Qt мы должны будем использовать headers, libraries и tools из QT474_NATIVE_INSTALL_DIR, но т.к у нас QT474_CROSS_INSTALL_DIR != QT474_NATIVE_INSTALL_DIR, то могут возникнуть проблемы с qmake, т.к он будет искать всё необходимое относительно QT474_CROSS_INSTALL_DIR, а нам нужно чтобы он искал относительно QT474_NATIVE_INSTALL_DIR, для этого нужно создать файл QT474_NATIVE_INSTALL_DIR/QT474_CROSS_INSTALL_DIR/bin/qt.conf с содержимым:

[Paths]
Prefix = QT474_NATIVE_INSTALL_DIR/QT474_CROSS_INSTALL_DIR

Т.е этот файл может выглядеть примерно так:

[Paths]
Prefix = /home/stas/variscite/qt474-install/usr/local/Qt474

Теперь всё готово для разработки.

Установка Qt 4.7.4 на модуль

Чтобы запускать приложения, использующие Qt, нам сперва нужно установить его на модуль, это делается достаточно просто, нужно содержимое каталога QT474_NATIVE_INSTALL_DIR скопировать в корень (»/») на модуле. В итоге должно получиться так, что если QT474_CROSS_INSTALL_DIR = /usr/local/Qt474, то Qt на модуле лежит в /usr/local/Qt474.

Далее, на модуле, нужно открыть или создать файл /etc/ld.so.conf и прописать туда:

QT474_CROSS_INSTALL_DIR/lib

Затем в консоли выполнить:

ldconfig

Установка X11 шрифтов на модуль

Чтобы текст в Qt приложениях отображался корректно необходимо установить X11 шрифты, самый простой способ - скопировать их с рабочей linux машины на модуль. В случае Ubuntu 10.10 шрифты лежат в каталоге /usr/share/fonts/X11, нужно скопировать каталоги «Type1», «75dpi» и «100dpi» на модуль в каталог /usr/share/fonts/X11.

Затем, на модуле, нужно открыть файл /etc/X11/xorg.conf и дописать в него:

Section "Files"
        FontPath "/usr/share/fonts/X11/misc"
        FontPath "/usr/share/fonts/X11/Type1"
        FontPath "/usr/share/fonts/X11/75dpi"
        FontPath "/usr/share/fonts/X11/100dpi"
EndSection

Затем нажать ctrl + alt + backspace - тем самым убив X11 server, затем ctrl + alt + F1, залогиниться и ввести:

/etc/init.d/xserver start && /etc/init.d/enlightment start

Эта комманда перезапустит X11 сервер и оболочку enlightment.

После этого всё должно заработать:

  • Qt приложения должны запускаться, во время запуска в консоли могут появляться сообщения типа «QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv failed», но это не страшно
  • Все шрифты должны корректно отображаться, не должно быть «пустых квадратиков»
  • Шрифты должны быть сглаженными
  • Русские символы должны отображаться корректно
howto/qt-build.txt · Последние изменения: 2015/05/29 14:45 (внешнее изменение)
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki