Beaglebone blackにQt5.5.1をインストール(2)

UbuntuにsambaでBBBをマウントしてソースから構築してみる

環境

HOST
Ubuntu 15.10 : 4.2.0-18-generic

BeagleboneBlack
Debian GNU/Linux 8 :  3.8.13-bone74

クロスコンパイル用ツール

gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux.tar.xz を/home/qt-bbb/optに展開

Ubuntu上にqt5.5のソースを用意

qt5.5.1のソースを/home/qt-bbb/qt5 に展開

qt5/qtbase/mkspecs/devices/linux-beagleboard-g++/ を
qt5/qtbase/mkspecs/devices/linux-bbb-g++ にコピーして
qt5/qtbase/mkspecs/devices/linux-bbb-g++/qmake.conf を編集

#
# qmake configuration for the BeagleBoard and BeagleBoard xM boards
# http://beagleboard.org/

MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib

include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)

load(device_config)

QT_QPA_DEFAULT_PLATFORM = eglfs

# modifications to g++.conf
QMAKE_CC = $${CROSS_COMPILE}gcc
QMAKE_CXX = $${CROSS_COMPILE}g++
QMAKE_LINK = $${QMAKE_CXX}
QMAKE_LINK_SHLIB = $${QMAKE_CXX}

# modifications to linux.conf
QMAKE_AR = $${CROSS_COMPILE}ar cqs
QMAKE_OBJCOPY = $${CROSS_COMPILE}objcopy
QMAKE_NM = $${CROSS_COMPILE}nm -P
QMAKE_STRIP = $${CROSS_COMPILE}strip

COMPILER_FLAGS = -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=hard # <-- ここを変更
#modifications to gcc-base.conf
QMAKE_CFLAGS += $${COMPILER_FLAGS}
QMAKE_CXXFLAGS += $${COMPILER_FLAGS}
QMAKE_CXXFLAGS_RELEASE += -O3

QMAKE_LIBS += -lrt -lpthread -ldl

# Extra stuff (OpenGL, DirectFB, ...)
QMAKE_INCDIR_EGL =
QMAKE_LIBDIR_EGL =
QMAKE_INCDIR_OPENGL_ES2 = $${QMAKE_INCDIR_EGL}
QMAKE_LIBDIR_OPENGL_ES2 = $${QMAKE_LIBDIR_EGL}
QMAKE_INCDIR_OPENVG = $${QMAKE_INCDIR_EGL}
QMAKE_LIBDIR_OPENVG = $${QMAKE_LIBDIR_EGL}

QMAKE_LIBS_EGL = -lEGL -lIMGegl -lsrv_um
QMAKE_LIBS_OPENGL_ES2 = -lGLESv2 $${QMAKE_LIBS_EGL}
QMAKE_LIBS_OPENVG = -lOpenVG $${QMAKE_LIBS_EGL}

# No need for any special EGL device integration.
# Prioritize the default, compiled-in integration over any plugins.
EGLFS_DEVICE_INTEGRATION = none

# Sanity check
deviceSanityCheckCompiler()

Configure

$ cd qt5
$ mkdir build-bbb
$ cd build-bbb
$  ../configure -opensource -confirm-license -no-pch -prefix /opt/qt5.5-bbb -hostprefix /mnt/bbb/opt/qt5.5-bbb -release -force-debug-info -device linux-bbb-g++ -make libs -nomake tests -nomake examples -device-option CROSS_COMPILE=/home/qt-bbb/opt/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/bin/arm-linux-gnueabihf- -sysroot /mnt/bbb -v

$ make -j 4

$ sudo make install

出来上がったホストの/opt/qt5.5-bbbをBBBの/optへコピーする
BBB上でldconfigを使ってライブラリを有効にする(下記参照)

エラーメッセージに対応してBBBに追加でインストールしたパッケージ

# apt-get install linux-headers-3.8.13-bone74 
# apt-get install libsdl-dev libxcb1-dev libxcb-image0-dev libxcb-icccm4-dev libxcb-keysyms1-dev

QtcreatorでQtquickが使えないのでBBBからUbuntuに/opt/qt5.5-bbbをコピーしたら使えるようになった
上のconfigure option の -hostprefix /opt/qt5.5-bbbはどういう意味があるのだろうか?

Qt5のアプリケーションを実行できるようにBBBでqt5.5のライブラリを有効にする
環境変数 LD_LIBRARY_PATHに /opt/qt5.5-bbb/libを追加しても良いがシステムに設定する

# nano /etc/ld.so.conf.d/qt5.5.conf   <== 新規ファイル編集

/opt/qt5.5-bbb/lib     <== ファイルにこの行を追加

# ldconfig        <== ライブラリを追加
# ldconfig -v     <== 確認

 

 

 

 

 

 

Ubuntu上にBBBのファイルシステムをマウントする nfs ✖ samba ○

Beaglebone black(BBB) を jessie( Debian 8)にアップグレードしてBBB上でapt-getを使いqt5をインストールしようとしてみたが途中で挫折してホストのUbuntu上でクロスコンパイルをすることに方針変更。

参考サイトにBBBのSDカードをカードリーダーに挿してホストにマウントする方法が載っていて、その手順で作業を始めたがQt5.5.1のConfigure中に「環境が足りない」とエラーで止まってしまった

カードを抜いてBBBで環境をapt-getするのが面倒なのでnfsを使ってUbuntu上にBBBのファイルシステムをマウントしてみることにした。

BBB側の作業

nfsサーバーのインストール

# apt-get install nfs-kernel-server

nfsの設定

# nano /etc/exports

次の行を追加

/ 192.168.0.0/255.255.255.0(rw,sync,no_subtree_check)

再起動

Ubuntu側の作業

$ sudo apt-get install nfs-common

$ sudo mount -t nfs -o rw 192.168.0.218:/ /mnt/bbb

この後qt5のビルドをやっている途中でシンボリックリンクのライブラリが見つからないというエラーで中断してしまった。
nfsを使ったマウントではこの問題は解決できないようなのでsambaに変更した

BBB側

# apt-get install samba

設定ファイルに追加

# nano /etc/samba/smb.conf

ファイルに次の項目を追加

#======================= Global Settings =======================

[global]

unix extensions = no
wide links = yes

...

#======================= Share Definitions =======================

[rootfs]
path = /
browsable =yes
writable = yes
guest ok = yes
read only = no

...


# By default, \\server\username shares can be connected to by anyone
# with access to the samba server.
# The following parameter makes sure that only "username" can connect
# to \\server\username
# This might need tweaking when using external authentication schemes
; valid users = %S

Sambaユーザーを追加

# pdbedit -a root

パスワードの作成を求められるので適当に入力(マウント時に必要なので覚えておく)

再起動

HOST(Ubuntu)側

$ sudo apt-get install smbclient cifs-utils
$ sudo mount -t cifs //192.168.0.218/rootfs /mnt/bbb -o rw

Beaglebone blackにQt5.5.1をインストール(1)

Beaglebone black(BBB)でQt5.5.1ベースのアプリケーションを走らせるために環境インストールにトライ
Linux kernelの確認

# apt-get update
 ....
# apt-get upgrade
 ....
# uname -r
3.8.13-bone74

参考サイト
https://blog.guh.guru/tech/crosscompile-qt-5-2-1-for-bbb/

BBBにkernel-headerをインストール
参考サイトではソースをダウンロードするようになっているが、該当ソースが見つからなかったためapt-getを使ってインストール

# apt-get install linux-headers-`uname -r`
 .....

依存パッケージの導入

# apt-get build-dep qt5-default

Qt5-defaultが見つからないとのエラーが発生したため Debianのバージョンを jessieにアップグレードしてみる(かなり無謀 8-) )

バージョンアップ前の状態

root@beaglebone:~# cat /etc/debian_version
7.9
root@beaglebone:~# uname -r
3.8.13-bone74
root@beaglebone:~# df
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
rootfs 7177940 4683752 2164996 69% /
/dev/root 7177940 4683752 2164996 69% /
devtmpfs 254136 0 254136 0% /dev
tmpfs 254256 0 254256 0% /dev/shm
tmpfs 254256 460 253796 1% /run
tmpfs 254256 0 254256 0% /sys/fs/cgroup
tmpfs 102400 0 102400 0% /run/user
tmpfs 5120 0 5120 0% /run/lock

インプットデバイス

root@beaglebone:~# cat /proc/bus/input/devices
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="tps65217_pwr_but"
P: Phys=
S: Sysfs=/devices/ocp.3/44e0b000.i2c/i2c-0/0-0024/input/input0
U: Uniq=
H: Handlers=kbd event0 
B: PROP=0
B: EV=3
B: KEY=100000 0 0 0

I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="EP0980M09"
P: Phys=
S: Sysfs=/devices/ocp.3/4802a000.i2c/i2c-2/2-0038/input/input1
U: Uniq=
H: Handlers=mouse0 event1 
B: PROP=0
B: EV=b
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=2608000 3

デバイスの状態:P9_14->ブザー、P9_16->LCDのバックライトコントロール

root@beaglebone:~# cat /sys/devices/bone_capemgr.*/slots
 0: 54:PF--- 
 1: 55:PF--- 
 2: 56:PF--- 
 3: 57:PF--- 
 4: ff:P-O-- Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
 5: ff:P-O-- Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
 6: ff:P-O-- Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN
 7: ff:P-O-L Override Board Name,00A0,Override Manuf,BB-UART1
 8: ff:P-O-L Override Board Name,00A0,Override Manuf,BB-UART2
 9: ff:P-O-L Override Board Name,00A1,Override Manuf,BB-JSD-LCD7-01
10: ff:P-O-L Override Board Name,00A0,Override Manuf,am33xx_pwm
11: ff:P-O-L Override Board Name,00A0,Override Manuf,bone_pwm_P9_14
12: ff:P-O-L Override Board Name,00A0,Override Manuf,bone_pwm_P9_16
Page: 1/ 1 Mark: 0/ 46 Sort:名前順(昇り順) Find:
 Path:/sys/devices/ocp.3 
 ./ <DIR> 00-01-01 9:00
 ../ <DIR> 00-01-01 9:00
 44e07000.gpio/ <DIR> 00-01-01 9:00
 44e09000.serial/ <DIR> 00-01-01 9:00
 44e0b000.i2c/ <DIR> 00-01-01 9:00
 44e10448.bandgap/ <DIR> 00-01-01 9:00
 44e35000.wdt/ <DIR> 00-01-01 9:00
 44e3e000.rtc/ <DIR> 00-01-01 9:00
 47400000.usb/ <DIR> 00-01-01 9:00
 48022000.serial/ <DIR> 00-01-01 9:00
 48024000.serial/ <DIR> 00-01-01 9:00
 4802a000.i2c/ <DIR> 00-01-01 9:00
 48042000.timer/ <DIR> 00-01-01 9:00
 48044000.timer/ <DIR> 00-01-01 9:00
 48046000.timer/ <DIR> 00-01-01 9:00
 48048000.timer/ <DIR> 00-01-01 9:00
 4804a000.timer/ <DIR> 00-01-01 9:00
 4804c000.gpio/ <DIR> 00-01-01 9:00
 4819c000.i2c/ <DIR> 00-01-01 9:00
 481ac000.gpio/ <DIR> 00-01-01 9:00
 481ae000.gpio/ <DIR> 00-01-01 9:00
 48200000.interrupt-controller <DIR> 00-01-01 9:00
 48300000.epwmss/ <DIR> 00-01-01 9:00
 48302000.epwmss/ <DIR> 00-01-01 9:00
 48304000.epwmss/ <DIR> 00-01-01 9:00
 4830e000.fb/ <DIR> 00-01-01 9:00
 48310000.rng/ <DIR> 00-01-01 9:00
 49000000.edma/ <DIR> 00-01-01 9:00
 4a100000.ethernet/ <DIR> 00-01-01 9:00
 53100000.sham/ <DIR> 00-01-01 9:00
 53500000.aes/ <DIR> 00-01-01 9:00
 56000000.sgx/ <DIR> 00-01-01 9:00
 P9.23_gpio49.14/ <DIR> 00-01-01 9:00
 P9.27_gpio115.15/ <DIR> 00-01-01 9:00
 gpio-leds.8/ <DIR> 00-01-01 9:00
 mmc.5/ <DIR> 00-01-01 9:00
 nop-phy.6/ <DIR> 00-01-01 9:00
 nop-phy.7/ <DIR> 00-01-01 9:00
 panel.11/ <DIR> 00-01-01 9:00
 power/ <DIR> 15-11-19 18:02
 pwm_test_P9_14.12/ <DIR> 00-01-01 9:00
 pwm_test_P9_16.13/ <DIR> 00-01-01 9:00
 rstctl.4/ <DIR> 00-01-01 9:00
 subsystem/ <DIR> 00-01-01 9:00
 modalias 4096 15-11-19 18:02
 uevent 4096 00-01-01 9:00

pwm_test_P9_14.x 、P9_16.xが複数作成されることがありpwmコントロールができなくなる -> 原因不明

Page: 1/ 1 Mark: 0/ 11 Sort:名前順(昇り順) Find:
 Path:/sys/devices/ocp.3/pwm_test_P9_16.13 
 ./ <DIR> 00-01-01 9:00
 ../ <DIR> 00-01-01 9:00
 driver/ <DIR> 00-01-01 9:00
 power/ <DIR> 15-11-19 18:02
 subsystem/ <DIR> 00-01-01 9:00
 duty 4096 15-11-19 18:02
 modalias 4096 15-11-19 18:02
 period 4096 15-11-19 18:02
 polarity 4096 15-11-19 18:02
 run 4096 15-11-19 18:02
 uevent 4096 00-01-01 9:00

period,polarity等のファイルが作成されていない場合にコントロール不能

不要なパッケージを削除

 

# apt-get purge x11-common
 ...
# apt-get autoremove
 ...
# apt-get purge gnome-*
 ...

# df
ファイルシス 1K-ブロック 使用 使用可 使用% マウント位置
rootfs 7177940 4144804 2703944 61% /
/dev/root 7177940 4144804 2703944 61% /
devtmpfs 254136 0 254136 0% /dev
tmpfs 254256 0 254256 0% /dev/shm
tmpfs 254256 512 253744 1% /run
tmpfs 254256 0 254256 0% /sys/fs/cgroup
tmpfs 5120 0 5120 0% /run/lock
tmpfs 102400 0 102400 0% /run/user

 

下記コマンドで/etc/apt/sources.listをアップデート

# sed -i 's/wheezy/jessie/g' /etc/apt/sources.list

/etc/apt/sources.listの中身を確認

root@beaglebone:~# cat /etc/apt/sources.list
deb http://ftp.us.debian.org/debian/ jessie main contrib non-free
#deb-src http://ftp.us.debian.org/debian/ jessie main contrib non-free

deb http://ftp.us.debian.org/debian/ jessie-updates main contrib non-free
#deb-src http://ftp.us.debian.org/debian/ jessie-updates main contrib non-free

deb http://security.debian.org/ jessie/updates main contrib non-free
#deb-src http://security.debian.org/ jessie/updates main contrib non-free

#deb http://ftp.debian.org/debian jessie-backports main contrib non-free
##deb-src http://ftp.debian.org/debian jessie-backports main contrib non-free

#Kernel source (repos.rcn-ee.com) : https://github.com/RobertCNelson/linux-stable-rcn-ee
#
#git clone https://github.com/RobertCNelson/linux-stable-rcn-ee
#cd ./linux-stable-rcn-ee
#git checkout `uname -r` -b tmp
#
deb [arch=armhf] http://repos.rcn-ee.com/debian/ jessie main
#deb-src [arch=armhf] http://repos.rcn-ee.com/debian/ jessie main

次のコマンドでいくつか「独自の設定を書き換えますか?」という問い合わせが出るがすべて[N]デフォルト を選択

# apt-get update
# apt-get upgrade

完全アップグレードを開始

# apt-get dist-upgrade

再起動