пятница, 28 июля 2017 г.

Сборка Qt 4.8.6 для платы BBB с поддержкой библиотеки tslib

Собирать Qt для BeagleBone Black будем на ОС Ubuntu 16.04 amd64 с установленной системой кросскомпиляции Linaro Linux x86_64 (установка).

1. Собираем tslib. Скачиваем версию 1.11 отсюда. Распаковываем её в локальную папку (у меня /media/Data2/Libraries/bbb/tslib). Устанавливаем средства для построения мэйкфайлов (autotools):

sudo apt-get install autoconf automake gettext libtool

Запускаем генерирование файлов:

./autogen.sh

Делаем bash-скрипт для построения бинарника с установкой кросс-инструментов через переменные окружения (nano build.sh):

export CC=/usr/local/tools/linaro-gnueabihf-5.3/bin/arm-linux-gnueabihf-gcc
export CXX=/usr/local/tools/linaro-gnueabihf-5.3/bin/arm-linux-gnueabihf-g++
export CONFIG_SITE=arm-linux.autogen
ac_cv_func_malloc_0_nonnull=yes ./configure --host=arm-linux --target=arm --disable-inputapi --prefix=/usr/local/tools/tslib
make

Собираем и устанавливаем:

./build.sh 
sudo make install

Теперь мы получили статические, динамические либы в папке /usr/local/tools/tslib/lib и заголовочные файлы в папке /usr/local/tools/tslib/include. 

2. Скачиваем версию qt 4.8.6 отсюда и распаковываем в определенную папку для сборки (у меня папка /media/Data2/Libraries/bbb/qt_4.8.6_arm), создаем папку (sudo mkdir -p /media/Data2/Libraries/bbb/qt_4.8.6_arm) и копируем в неё содержимое архива с помощью mc.

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

cd /media/Data2/Libraries/bbb/qt_4.8.6_arm/mkspecs/qws
mkdir linux-arm-linaro-g++
cp linux-arm-g++/qmake.conf ./linux-arm-linaro-g++
cp linux-arm-g++/qplatformdefs.h ./linux-arm-linaro-g++


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

#
# qmake configuration for building with linux-arm-linaro-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 = -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=hard
QMAKE_CXXFLAGS_RELEASE = -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=hard

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

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

load(qt_config)

Собираем qt 4.8.6, указываем конфигурационному скрипту, что мы будем использовать драйвер линуксового фреймбуфера (-qt-gfx-linuxfb), включаем обработку сообщений от мышки и клавы в QtGui (-qt-kbd-linuxinput -qt-mouse-linuxinput), указываем, что будем использовать фильтрацию сообщений от тача через библиотеку tslib (-qt-mouse-tslib), указываем пути к заголовочным файлам (-I/usr/local/tools/tslib/include) и бинарникам (-L/usr/local/tools/tslib/lib):

cd /media/Data/Libraries/bbb/qt_4.8.6_arm
./configure -v -embedded arm -platform qws/linux-x86_64-g++ -xplatform qws/linux-arm-linaro-g++ -prefix /usr/local/tools/qt_4.8.6_tslib
 -little-endian -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 
-qt-gfx-linuxfb -fontconfig -no-sql-mysql -no-sql-odbc -no-sql-psql -no-sql-sqlite -no-sql-sqlite2 -no-webkit -no-qt3support -nomake translations -qt-freetype -qt-libjpeg -qt-libpng -qt-mouse-tslib -qt-kbd-tty -qt-kbd-linuxinput -qt-mouse-linuxinput -I/usr/local/tools/tslib/include -L/usr/local/tools/tslib/lib

make

sudo make install

При сборке проекта с использованием тулчейна linaro(/usr/local/tools/linaro-5.3) и qt-4.8.6 (/usr/local/tools/qt_4.8.6_tslib) у меня возникает ошибка: компилятор не находит заголовочный файл <QtDesigner/QDesignerCustomWidgetInterface>. Это произошло потому, что операция sudo make install не перекинула файлы дизайнера в установочную папку, надо сделать это за неё. Переписываем папки 
1) /media/Data/Libraries/bbb/qt_4.8.6_arm/include/QtDesigner -> /usr/local/tools/qt_4.8.6_tslib/include/QtDesigner
2) /media/Data/Libraries/bbb/qt_4.8.6_arm/tools/designer -> /usr/local/tools/qt_4.8.6_tslib/tools/designer

среда, 12 июля 2017 г.

Получение текущего содержимого фреймбуфера BBB в виде png

Подключаемся к устройству BBB (допустим в локальной сети работает dhcp-сервер и он дал плате beaglebone адрес 192.168.1.70) по ssh, переходим в домашнюю директорию и скидываем текущий буфер в файл:

ssh root@192.168.1.70
cd /root
cat /dev/fb0 > pic.data

Скидываем файл pic.data на комп с Ubuntu 16.04, подключившись через mc по ssh к BBB, и установленной прогой Gimp (opensource-аналог проприетарного Photoshop). Открываем файл pic.data как Raw Image Data (*.data).  В появившемся окне в поле "тип изображения" выбираем "RGB565". Для использующегося дисплея Lilliput 859GL-80NP/C с разрешением 640x480 выбираем в поле "ширина" - 640, "высота" - 480, всё остальное оставляем дефолтным ("палитра" - "R, G, B (normal)"). Теперь изображение можно открыть и экспортировать в любой удобный формат: png, jpg, gif.

Использованные материалы:
1) http://www.cnx-software.com/2010/07/18/how-to-do-a-framebuffer-screenshot/
2) http://talk.maemo.org/showthread.php?t=82559