среда, 18 октября 2017 г.

Сборка и установка ядра 4.1, u-boot, rootfs на BBB с поддержкой CapeMgr

У меня есть плата beagle bone black rev. C element 14 (еMMC размером 4GB) с предустановленной ОС (debian 8). Купить ее можно на алиэкспресс за 4250 рублей (04.02.2021) или, например, здесь за 6000 рублей (цены актуальны на 03.10.2017). На рабочей машине у меня установлена ОС Ubuntu 16.04 amd64. Beagle Bone Green на aliexpress стоит 4900 рублей (04.02.2021).

Питание платы BBB производится через USB. Подключение к BBB можно осуществить либо по RS-232 через плату-конвертор (подробнее), либо по USB (подробнее).
С рабочей машины под управлением Ubuntu 16.04 amd64 мы можем увидеть терминал следующим образом:

1) для RS232:

sudo screen /dev/ttyS0 115200,cs8

2) для USB:

sudo screen /dev/ttyUSB0 115200,cs8

Плата BBB подключена к локальной сети с действующим DHCP-сервером через коммутатор, к которому подключена рабочая машина. Дополнительно к плате я подключаю carpc-монитор с тачскрином либо через hdmi (примерно такой), либо через RGB-пины и дополнительную плату (примерно такой).

Собирать ядро, u-boot и rootfs будем по следующей инструкции https://eewiki.net/display/linuxonarm/BeagleBone+Black (версия страницы 125).

1. Скачиваем кросскомпилятор (версия 5.3.1-2016.05-x86_64_arm) отсюда, распаковываем и перемещаем в директорию /usr/local/tools/linaro-gnueabihf-5.3, настраиваем переменную окружения для сборки:

export CC=/usr/local/tools/linaro-5.3/bin/arm-linux-gnueabihf-

Проверить установленную переменную можно, выполнив echo $CC. Вывод должен соответствовать ( /usr/local/tools/linaro-5.3/bin/arm-linux-gnueabihf- ).

Для скачивания и сборки ядра, u-boot и rootfs нужна временная директория. Можно воспользоваться, как предложено в инструкции, домашней директорией(~), я же создам отдельную папку на общем диске (/media/Data/Kernel). 

2. Собираем U-boot. Переходим в папку, клонируем главную ветку репозитария, берем срез файлов коммита 2016.09-rc2скачиваем и применяем патчи, настраиваем сборку с помощью установленной переменной окружения $СС и собираем U-boot (после окончания сборки бинарник будет лежать в корне папки):

cd /media/Data/Kernel
git clone https://github.com/u-boot/u-boot
cd u-boot/
git checkout v2016.09-rc2 -b tmp


wget -c https://rcn-ee.com/repos/git/u-boot-patches/v2016.09-rc2/0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
patch -p1 < 0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch


make ARCH=arm CROSS_COMPILE=${CC} distclean
make ARCH=arm CROSS_COMPILE=${CC} am335x_evm_defconfig
make ARCH=arm CROSS_COMPILE=${CC}


3. Собираем ядро. Переходим в нашу папку, клонируем ветку репозитария разработчика, берем срез файлов для ядра 4.1 am33x-v4.1 и запускаем скрипт сборки build_kernel.sh:

cd /media/Data/Kernel
git clone https://github.com/RobertCNelson/bb-kernel

cd bb-kernel/
git checkout origin/am33x-v4.1 -b tmp
./build_kernel.sh

4. Скачиваем rootfs с набором утилит для Debian 8:

cd /media/Data/Kernel

wget -c https://rcn-ee.com/rootfs/eewiki/minfs/debian-8.5-minimal-armhf-2016-08-16.tar.xz
tar xf debian-8.5-minimal-armhf-2016-08-16.tar.xz

5. Записываем все это на microsd-карту (можно взять microsd-карту размером от 2GB,  у меня размером 4GB). Воспользуемся microsd-картридером или sd-картридером, предварительно вставим microsd-карту в sd-переходник. 

5.1. Вставим microsd-карту через переходник и удалим через gparted имеющиеся разделы. Выясним, выполнив команду lsblk, номер устройства, соответствующего вставленной microsd-карте (у меня это устройство /dev/sdc):

adil@adil:/media/Data/Kernel$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sr0     11:0    1  1024M  0 rom
sdc      8:32   1   3,7G  0 disk
sda      8:0    0 465,8G  0 disk
├─sda2   8:2    0   100M  0 part
├─sda5   8:5    0 229,6G  0 part /media/adil/Data
├─sda1   8:1    0   133G  0 part
└─sda6   8:6    0 103,1G  0 part /

Определим вспомогательную переменную окружения для карты:

export DISK=/dev/sdc

5.2. Очистим карту и прошьем на неё бинарники u-boot:

sudo dd if=/dev/zero of=${DISK} bs=1M count=10
sudo dd if=./u-boot/MLO of=${DISK} count=1 seek=1 bs=128k
sudo dd if=./u-boot/u-boot.img of=${DISK} count=2 seek=1 bs=384k


5.3. Создадим раздел на карте при помощи утилиты sfdisk. Определим версию

adil@adil:/media/Data/Kernel$ sudo sfdisk --version
sfdisk из util-linux 2.27.1


У меня версия util-linux 2.27.1 - старше 2.26 (для версии младше 2.26 эта команда выглядит иначе):

sudo sfdisk ${DISK} <<-__EOF__
4M,,L,*
__EOF__


5.4. Создадим файловую систему с помощью утилиты mkfs.ext4. Определим версию:

adil@adil:/media/Data/Kernel$ sudo mkfs.ext4 -V
mke2fs 1.42.13 (17-May-2015)
Using EXT2FS Library version 1.42.13

У меня версия mkfs.ext4 1.42.13 (=1.42) и устройство /dev/sdX (для устройства  /dev/mmcblkX и старшей версии mkfs.ext4 следующие команды будут выглядеть иначе):

sudo mkfs.ext4 -L rootfs ${DISK}1

5.5. Создадим папку для монтирования и смонтируем microsd-карту (для устройства  /dev/mmcblkX следующие команды будут выглядеть иначе):

sudo mkdir -p /media/rootfs/
sudo mount ${DISK}1 /media/rootfs/

5.6. Сделаем backup файлов u-boot'а:

sudo mkdir -p /media/rootfs/opt/backup/uboot/
sudo cp -v ./u-boot/MLO /media/rootfs/opt/backup/uboot/
sudo cp -v ./u-boot/u-boot.img /media/rootfs/opt/backup/uboot/


5.7. Скопируем rootfs на примонтированный раздел карты:

sudo tar xfvp ./*-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/

5.8. Установим вспомогательную переменную окружения для копирования ядра (версию ядра можно взять из вывода скрипта сборки ядра, у меня версия 4.1.38-bone24):

export kernel_version=4.1.38-bone24

5.9. Установим вывод uname и скопируем бинарник ядра, device tree base и модули ядра:

Для отображения версии в uname:
sudo sh -c "echo 'uname_r=${kernel_version}' >> /media/rootfs/boot/uEnv.txt"

Для HDMI дисплея 640x480:
sudo sh -c "echo 'optargs="consoleblank=0" video=HDMI-A-1:640x480@75' >> /media/rootfs/boot/uEnv.txt"

sudo cp -v ./bb-kernel/deploy/${kernel_version}.zImage /media/rootfs/boot/vmlinuz-${kernel_version}

sudo mkdir -p /media/rootfs/boot/dtbs/${kernel_version}/
sudo tar xfv ./bb-kernel/deploy/${kernel_version}-dtbs.tar.gz -C /media/rootfs/boot/dtbs/${kernel_version}/

sudo tar xfv ./bb-kernel/deploy/${kernel_version}-modules.tar.gz -C /media/rootfs/

5.10. Сформируем файл монтируемых при загрузке разделов (/etc/fstab), добавив туда раздел встроенного eMMC:

sudo sh -c "echo '/dev/mmcblk0p1 / auto errors=remount-ro 0 1' >> /media/rootfs/etc/fstab"

5.11. Настроим сеть. Отредактируем файл /etc/network/interfaces:

sudo nano /media/rootfs/etc/network/interfaces

Добавим:

auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet dhcp

Для того, чтобы у нас был один сетевой интерфейс eth0, отредактируем файл  /etc/udev/rules.d/70-persistent-net.rules:

sudo nano /media/rootfs/etc/udev/rules.d/70-persistent-net.rules


Добавим:

# BeagleBone: net device ()
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"


5.12 (может вам это не нужно). Дадим возможность root-го доступа через ssh. Для этого отредактируем файл /etc/ssh/sshd_config:

sudo nano /media/rootfs/etc/ssh/sshd_config

Поменяем значение PermitRootLogin со значения without-password на yes.

5.13 (может вам это не нужно). Настроим доступ по RS-232. Создадим файл /etc/init/serial.conf:

sudo nano /media/rootfs/etc/init/serial.conf

Добавим:

start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]

respawn
exec /sbin/getty 115200 ttyO0

6. Отмонтируем карту:

sync
sudo umount /media/rootfs


7. Загрузка BBB c нашей microsd-карты. Вставляем карту в BBB и, удерживая кнопку загрузки, подключаем к USB-разъему рабочей машины. Начинается загрузка с microsd-карты. После загрузки входим под пользователем debian пароль temppwd.

Если вы выполнили пункт 5.12, сейчас можно задать другой пароль для рута, выполнив:

sudo passwd root

7.1. Свой скрипт при загрузке. Если мы хотим, чтобы при загрузке BBB выполнялся наш скрипт (например, файл mystart.sh), нужно создать файл в папке /etc/init.d:

sudo nano /etc/init.d/mystart.sh

Например, со следующим содержимым:

#!/bin/sh
echo "My script started!"

Записываем файл и выполняем скрипт update-rc.d, который размещает ссылки на вызов нашего скрипта в системных папках запуска ядра в стиле SystemV:

sudo update-rc.d mystart.sh defaults

Даем скрипту права на исполнение:

sudo chmod +x mystart.sh

7.2. Скачаем из инета скрипт для записи содержимого microsd-карты на встроенную память eMMC и запустим:

wget https://raw.githubusercontent.com/RobertCNelson/boot-scripts/master/tools/eMMC/bbb-eMMC-flasher-eewiki-ext4.sh
chmod +x bbb-eMMC-flasher-eewiki-ext4.sh
sudo /bin/bash ./bbb-eMMC-flasher-eewiki-ext4.sh

После окончания прошивки вынимаем microsd-карту и загружаемся с eMMC, не нажимая кнопку загрузки.

7.3. Чтобы пересобрать ядро с изменениями в конфигурации или исходном коде, лучше запускать не скрипт build_kernel.sh, который коннектится к стабильной ветке репозитария kernel.org и скачивает fix'ы и обновления, а запустить ./tools/rebuild.sh :

cd /media/Data/Kernel/bb-kernel
./tools/rebuild.sh

После сборки надо заново залить измененные части ядра на установочную флешку (пункт 5.9), затем загрузиться с флешки (пункт 7) и перекинуть её содержимое на внутреннюю память eMMC (пункт 7.2).

Использованный материал:
1) https://eewiki.net/display/linuxonarm/BeagleBone+Black

четверг, 28 сентября 2017 г.

Сборка Qt 4.8.6 для платы Beagle Bone Black (linaro4.9)

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

1. Скачиваем стабильную старую версию кросскомпилятора Linaro Linux i686 arm little endianess 4.9. Создаем папку sudo mkdir -p /usr/local/tools/linaro-4.9. Распаковываем файлы в указанную папку (например простым копированием из архива с помощью mc). Если нет mc, ставим его с помощью sudo apt-get install mc. Вызываем mc с правами суперпользователя sudo mc, чтобы беспрепятственно копировать в /usr/local/tools/linaro-4.9.

Добавляем путь к бинарникам в общий путь поиска системы. Редактируем файл ~/.bashrc ( nano ~/.bashrc ). Добавляем в конец строку export PATH=$PATH:/usr/local/tools/linaro-4.9/bin. Теперь команда echo $PATH, вызванная для нового экземпляра терминала (gnome-terminal) должна включать /usr/local/tools/linaro-gnueabihf-4.9/bin.

2. Скачиваем версию qt 4.8.6 отсюда и распаковываем в определенную папку для сборки (у меня папка /media/Data/Libraries/bbb/qt_4.8.6_linaro4.9) и копируем в неё содержимое архива с помощью mc.

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

cd /media/Data/Libraries/bbb/qt_4.8.6_linaro4.9/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-4.9 :

#
# 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:

cd /media/Data/Libraries/bbb/qt_4.8.6_linaro4.9

make confclean


./configure -v -embedded arm -platform qws/linux-x86_64-g++ -xplatform qws/linux-arm-linaro-g++ -prefix /usr/local/tools/qt_4.8.6_linaro4.9 -little-endian -qt-gfx-transformed -static -confirm-license -opensource -no-accessibility -no-largefile -fast -no-phonon -no-phonon-backend -qt-zlib -no-qt3support -no-openssl -no-webkit -qt-sql-sqlite -no-dbus -nomake demos -nomake examples -nomake docs

make

sudo make install

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

пятница, 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

четверг, 2 февраля 2017 г.

Установка ELDK 4.0 на Ubuntu 10.04 x86 и сборка Qt 4.6.2 для custom-платы под управлением Digi Connect Core 9M 2443

Мне необходимо собрать проект, написанный под Qt 4.6.2, для выполнения на custom-плате под управлением микроконтроллера Digi Connect Core 9M 2443. Средства разработки и кросскомпиляции будем ставить на ОС Ubuntu 10.04 x86(обязательно, так как в 64-битной ОС ELDK отказывается ставиться), так как стандартная библиотека С++ этой версии совместима с библиотекой, используемой в ELDK. Ubuntu 10.04 - самая старшая версия Ubuntu, официально поддерживаемая ELDK, согласно документации.

Версия Ubuntu 10.04 уже не поддерживается, но старые пакеты можно скачать из резервного репозитория. Меняем в файле /etc/apt/sources.list строчку http://ru.archive.ubuntu.com/ubuntu/   на http://old-releases.ubuntu.com/ubuntu.

Для сборки qt надо установить пакет g++:

sudo apt-get install g++


1. Для сборки используются инструменты ELDK (Embedded Linux Development Kit) http://www.denx.de/wiki/DULG/ELDK. Я устанавливаю старую версию 4.0 (ftp://ftp.denx.de/pub/eldk/4.0/arm-linux-x86/iso/arm-2006-01-16.iso).

Я скачал файл в локальную папку /media/Data2/Downloads/Images/build-iso. Переходим в неё, создаем папку для монтирования (/mnt/iso) и монтируем исошник:

cd /media/Data2/Downloads/Images/build-iso
sudo mkdir /mnt/iso
sudo mount -o loop -o exec ./arm-2006-01-16.iso /mnt/iso

Переходим в директорию и запускаем установку в папку /usr/local/tools/eldk:

cd /mnt/iso

sudo ./install -d /usr/local/tools/eldk

Добавляем путь к бинарникам в общий путь поиска системы. Редактируем файл ~/.bashrc:

sudo nano ~/.bashrc

Добавляем в конец строку:

export PATH=$PATH:/usr/local/tools/eldk/usr/bin

После перезапуска терминала и инициализации его из обновленного скрипта ~/.bashrc вывод команды echo $PATH должен включать /usr/local/tools/eldk/usr/bin.

2. Кросскомпиляция Qt 4.6.2 производится на ОС Ubuntu 10.04 x86. Скачиваем версию qt 4.6.2 отсюда, распаковываем в локальную папку для сборки /media/Data2/Libraries/digi/qt_4.6.2_arm.

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

cd /media/Data2/Libraries/digi/qt_4.6.2_arm/mkspecs/qws
mkdir linux-arm-eldk-g++
cp linux-arm-g++/qmake.conf ./linux-arm-eldk-g++
cp linux-arm-g++/qplatformdefs.h ./linux-arm-eldk-g++


Собираем статические либы qt 4.6.2:

cd /media/Data/Libraries/digi/qt_4.6.2_arm
./configure -v -embedded arm -platform qws/linux-x86-g++ -xplatform qws/linux-arm-eldk-g++ -prefix /usr/local/tools/qt_4.6.2_arm -little-endian -qt-gfx-transformed -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

make
sudo make install

Устанавливаем QtCreator из репозитария:

sudo apt-get install qt-sdk

Использованный материал:
1) http://help.ubuntu.ru/wiki/old_ubuntu_versions
2) http://help.ubuntu.ru/wiki/%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B9

пятница, 13 января 2017 г.

Включение экрана Lilliput 859GL-80NP/C/T при появлении данных на VGA-входе

По умолчанию дисплей Lilliput 859GL-80NP/C/T включается при нажатии на кнопку "power" на передней панели. Нам нужно, чтобы он становился активным при появлении данных, передаваемых на VGA-вход с платы Beagle Bone Black.

Режим включения можно настроить через сервисное меню. Для перехода в него надо при включенном дисплее нажать кнопку "power" и удерживать ее секунд десять. Сервисное меню состоит из последовательности экранов тонкой настойки монитора:
1) язык
2) входные видеорежимы
3) режим включения питания
4) логотип
Дисплей автоматически переключается между ними при нажатии кнопки "m/e" (menu).

Нас интересует параметр "power state" на третьем экране. По умолчанию он стоит в режиме "0" - включение с кнопки. Режим "1" -  включение при подаче питания. Нам подходит режим "2" - включение при появлении видеоданных на VGA-входе.

Использованный материал:
1) http://compcar.ru/forum/showthread.php?t=5314
2) http://www.lilliputuk.com/monitors/vga/859gl/