Saturday, 11. July 2009, 21:22:47
Сборка QT и "допилование" образа.Сейчас нужно будет скомпилировать библиотеку QT, записать тестовое приложение и довести до ума файловую иерархию в образе.
Установка библиотеки QT [1]
Убедитесь, что в PATH присутствует путь /usr/arm-unknown-linux-uclibc/bin
# cd /arm/source/
# wget http://get.qtsoftware.com/qt/source/qt-embedded-linux-opensource-src-4.5.2.tar.gz
# tar xvf qt-embedded-linux-opensource-src-4.5.2.tar.gz
# cd qt-embedded-linux-opensource-src-4.5.2
# mcedit mkspecs/qws/linux-arm-g++/qmake.conf
И отредактиваровать qmake.conf до такого состояния:
QMAKE_CC = arm-unknown-linux-uclibc-gcc
QMAKE_CXX = arm-unknown-linux-uclibc-g++
QMAKE_LINK = arm-unknown-linux-uclibc-g++
QMAKE_LINK_SHLIB = arm-unknown-linux-uclibc-g++
QMAKE_AR = arm-unknown-linux-uclibc-ar cqs
QMAKE_OBJCOPY = arm-unknown-linux-uclibc-objcopy
QMAKE_STRIP = arm-unknown-linux-uclibc-strip
Задаем опции для конфигурирование, архетектура arm, путь с конфами компилятора, статичная сборка. Отключаем всё по максимуму, впринципе оно для тестового приложения не понадобиться. А если что-то будет требоваться в вашем приложение - тогда включите эту опцию. Затем компилируем и ставим.
# ./configure -embedded arm -xplatform qws/linux-arm-g++ -qvfb -static -opensource -no-qt3support -no-svg \
-no-webkit -no-gif -qt-libpng -no-libjpeg -no-openssl -no-cups -no-iconv -qt-freetype -no-opengl \
-nomake examples -nomake demos -nomake docs -nomake translations -qt-mouse-pc -qt-mouse-bus
Qt is now configured for building. Just run 'gmake'.
Once everything is built, you must run 'gmake install'.
Qt will be installed into /usr/local/Trolltech/QtEmbedded-4.5.2-arm
To reconfigure, run 'gmake confclean' and 'configure'.
# gmake
# gmake install
Библиотеки Qt инсталируются в /usr/local/Trolltech/QtEmbedded-4.5.2-arm
Сборка тестового приложения.
Скопмилируем "аналоговые часы", исходники программы идут в поставке QT.
# cd /arm/source/
# cp -r /arm/source/qt-embedded-linux-opensource-src-4.5.2/examples/widgets/analogclock .
# cd analogclock/
# /usr/local/Trolltech/QtEmbedded-4.5.2-arm/bin/qmake -project
# /usr/local/Trolltech/QtEmbedded-4.5.2-arm/bin/qmake
Конечно, можно добавить в PATH - /usr/local/Trolltech/QtEmbedded-4.5.2-arm/bin
Теперь нужно подредактировать pro-файл.
# mcedit analogclock.pro
И добавить строчку для статично сборки:
CONFIG += static
Теперь можно собрать приложение
# make
На выходе получится бинарник analogclock
Создание образа initrd.
То, что делалалось в предыдушем пункте конечно можно использовать и далее, только если делать по хорошему - нужно определить устройства, загрузочные скрипты и т.д. Поэтому соберем initrd заново, из предыдущего пункта понадобятся Ядро (zImage) - без измения, непосредственно для запуска; busybox и библиотеки uclibc.
Выберем директорию для нашего нового образа: /arm/system/rootfs
# mkdir /arm/system/rootfs
# mkdir /arm/system/rootfs/boot
# mkdir /arm/system/rootfs/etc
# mkdir /arm/system/rootfs/tmp
# mkdir /arm/system/rootfs/proc
# mkdir /arm/system/rootfs/dev
Ставим BusyBox:
# cd /arm/source/busybox-1.13.3
# make ARCH=arm CC="arm-unknown-linux-uclibc-gcc -static" CROSS_COMPILE="arm-unknown-linux-uclibc-" CONFIG_PREFIX=/arm/system/rootfs install
Копируем библиотеки uclibc и gcc:
# cp -rv /usr/arm-unknown-linux-uclibc/lib /arm/system/rootfs/
# cp -v /usr/lib/gcc/arm-unknown-linux-uclibc/4.4.0/* /arm/system/rootfs/lib/
Копируем приложение analogclock:
# cp /arm/source/analogclock/analogclock /arm/system/rootfs/
Теперь нужно создать устройства.
# cd /arm/system/rootfs/dev
# MAKEDEV busmice
# MAKEDEV fb0
# MAKEDEV console
# MAKEDEV std
Скрипты загрузки.
# cd /arm/system/rootfs
# ln -s bin/busybox init
При запуске, ядро вызывает init скрип. В данном случае это бизибокс, который читает настройки инициализации из /etc/initab и выполняет указанные там скрипты инициализации (Можно почитать на странице
http://www.busybox.net/downloads/BusyBox.html, искать команду init), если /etc/inittab'a нет, используется свой встроенный формат загрузки. Опять же всё там написано. Единственно, что стоит отметить, busybox не поддерживает runlevels. Так что

Для запуска приложения понадобятся шрифты, как их вставить в бинарник я пока еще не понял.
# mkdir -p /arm/system/rootfs/usr/local/Trolltech/QtEmbedded-4.5.2-arm/lib/fonts
# cp -v /usr/local/Trolltech/QtEmbedded-4.5.2-arm/lib/fonts/* /arm/system/rootfs/usr/local/Trolltech/QtEmbedded-4.5.2-arm/lib/fonts/
Теперь опять можно собрать систему
# find . | cpio -o -H newc | gzip -9 > ../initrd.img
И запустить c ядром, полученным на первом этапе:
$ qemu-system-arm -M versatileab -kernel zImage -initrd initrd.img -append "root=/dev/ram"
После загрузки системы набрать:
/analogclock -qws