Yoct & qt5.71 を使ってBeagleboneblack 用 linux imageを作る(まとめ)

Yoct projectを使ってBeaglebone black |Green (以下BBB)linux imageを作りqt5.71で作ったプログラムが走ることを確認したので散らばった記事へのリンクをまとめておきます。

成果

  • Qt5.7.1で作ったプログラムが走るようになりました。
  • QMLも多分使えます (まだテストしていません)8-) 
  • 起動時間が短くなりSplash画面を表示することが出来るようになりました。
1.Ubuntu 16.04のセットアップとYoct projectインストールからBBB linux 4.4.50イメージの作り方まで。
YoctoによるBeagleBone Blackシステムの構築(英語)
Yoct project を使ってBeagleboneblack 用 linux imageを作る

 

2.arm (qt5.7.1) ToolChainの作り方

Qt用ToolChainの準備

上のリンクを参考にarm(qt5.7.1)ToolChainを構築すると.dtsから.dtbを作るためのコンパイラdtcを走らせることが出来ます。
またqtcreatorのためのクロスコンパイル環境として使います。

QtCreatorのインストールと設定方法はQtCreator for Beaglebone black のインストールを参照してください。

3.BBBの設定

追加でコピーするファイル

qwt関連のライブラリ、実行でライブラリが無いとのエラーが出たファイルをToolChainのArmライブラリからコピーする。

4.アプリを自動起動する設定

update-rc.dでアプリケーションを自動スタートするよう設定
(1) /etc/init.d/にアプリケーションを実行するスクリプトを作成

(2)update-rc.d でスクリプトを登録

# update-rc.d startmyapp.sh start 90 2 3 4 5 .

オプション defaults を使うとシステム終了時にも startmyapp.sh stop の形でスクリプトが呼び出されるので開始・終了処理をきちんと書いたスクリプトが必要ですが、オプション start を使うとシンプルなスクリプトでOK

 

 

QtCreator for Beaglebone black のインストール

QtCreator3.5( Qt4.8)で作ったアプリをYoctoで作った Qt5.7.1ベースのシステムに転送して実行するとタッチスクリーンが正常に動作しない(反応はするけれどts_calibrateで校正してもカーソルの位置がでたらめになる。)のでQtCreatorの新バージョンを入れてみることにしました。

Qt用ToolChainの準備

参考URL:raspberrypi2 yoctoの開発環境の作成

yoctoプロジェクトは~/yocto-mortyに入っている。

~/yocto-morty/bbb/build/conf/local.confにSDKMACHINE = “x86_64″を挿入(コメントを外す)し、
qwtのインストールで必要となるopenglを追加する。

# i686 or x86_64
SDKMACHINE = "x86_64"

#DISTRO_FEATURES_BACKFILL_CONSIDERED += "pulseaudio opengl"  

DISTRO_FEATURES_append = " opengl x11"
bitbakeを実行しtoolchainのインストーラを作成する。
$ cd ~/yocto-morty
$ source poky-morty/oe-init-build-env ~/yocto-morty/bbb/build
$ bitbake meta-toolchain-qt5
インストール  (/opt/poky-qt5/2.2.1 にインストールした)
$ tmp/deploy/sdk/poky-glibc-x86_64-meta-toolchain-qt5-cortexa8hf-neon-toolchain-2.2.1.sh
Enter target directory for SDK (default: /opt/poky/2.2.1):

QtCreatorのインストール

参考URL:HIO Wiki:Set Up Qt Creator for Yocto Device

Qtの新しいバージョンをダウンロードする、現時点で最新版はQt5.8でしたがYocto-qt5のバージョンと合わせるために次の場所からQt5.7.1を選択してダウンロード。

Download QT Creator Linux X64

$ chmod +x qt-opensource-linux-x64-5.7.1.run
$ sudo ./qt-opensource-linux-x64-5.7.1.run

ダウンロードしたスクリプトに実行属性を与えて実行するとインストーラが起動するので指示に従ってインストールする。

QtCreatorの環境設定

 /opt/Qt5.7/1/Tools/QtCreator/bin/qtcreator.sh
を編集して次の行を最初に挿入する(#!/bin/shの前)

source /opt/poky-qt5/2.2.1/environment-setup-cortexa8hf-neon-poky-linux-gnueabi

QT Creatorを起動

QtCreator インストールディレクトリ /opt/Qt5.4.0/Tools/QtCreator/bin に移動して 起動する

$: sudo sh qtcreator.sh

QT Creatorの設定

デバイスを追加する

コンパイラを追加する
/opt/poky-qt5/2.2.1/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi/arm-poky-linux-gnueabi-g++

Qtバージョンを指定する(qmakeのパスを指定)
/opt/poky-qt5/2.2.1/sysroots/x86_64-pokysdk-linux/usr/bin/qt5/qmake

キットにbbbを追加する。
デバイス、Sysroot、コンパイラ、Qtバージョンを追加する
Qt mkspecにはエラー対策として linux-oe-g++ を追加

qwtを使う場合、追加でインストールする

1.Qwt6.1.2をダウンロードして解凍

ダイレクトリンクが見つからないため下のリンクからブラウザでダウンロードして~/qt-bbb/downloadsに保存。

http://sourceforge.net/projects/qwt/files/qwt/6.1.2/

$ cd ~/Downloads
$ tar -jxf qwt-6.1.2.tar.bz2

2.Qwt-6.1.2のデザイナーをインストール

Qt Creatorを起動

Qwtプロジェクトを開く

ファイル -> ファイル・プロジェクトを開く から Downloads/qwt-6.1.2/qwt.pro

プロジェクトを構成 ウィンドウが開く

デスクトップにチェックが入っていることを確認して 「プロジェクトを構成」ボタンをクリック

ビルド > 全てビルド を実行

(少し時間がかかる)

myapp.proのエディタ画面で右クリックしてライブラリ追加すると使えるようになる。

designer用ライブラリは認識されない(調査中)

 

ターゲット BBBに転送するファイル

~/Downloads/build-qwt-bbb-Debug/lib/libqwt* -> /usr/libへ
/opt/poky-qt5/2.2.1/sysroots/cortexa8hf-neon-poky-linux-gnueabi/usr/lib/libQt5Svg*  -> /usr/libへ

Project移行時に発生したエラー

Qt requires C++11 support error.

プロジェクトファイル .pro に
QMAKE_CXXFLAGS += -std=c++11
を追加して解決。

BeagleBone black に NHD-5.0-800480TF-ATXLを接続

目標

Yoctで構築したKernel 4.4 で5インチLCDのNHD-5.0-800480TF-ATXLを動作させる。
表示は出来るがタッチスクリーンの入力が動作しない。

構成

タッチパネルはi2c2-1を使用
  SDA : P9.18   gpio 0[4]
  SCL : P9.17    gpio 0[5]
  INT : P9.23   gpio  1[17]

  UART1
    TX : P9.24   gpio 0[15]
    RX : P9.26   gpio 0[14]

  UART4
    TX : P9.13    gpio 0[31]
    RX : P9.11    gpio 0[30]

※このトピックは作業途中の備忘録で、随時情報を追加します。 

解決しました :-D 

カーネルコンフィグレーションの設定が出来ていなかった模様

bbb/meta-bbb/recipes-kernel/linux/linux-stable-4.4/beaglebone/defconfig で次の設定がコメントになっていた。

CONFIG_TOUCHSCREEN_FT5X06=y
TSLIB_CONSOLEDEVICE=none
TSLIB_FBDEVICE=/dev/fb0
TSLIB_TSDEVICE=/dev/input/touchscreen0
TSLIB_CALIBFILE=/etc/pointercal
TSLIB_CONFFILE=/etc/ts/conf

Yoctを使ってdtbをコンパイルする

(ツールの準備)
上のリンクでWorking outside of Yocto のところを参照してツールを構築する

workdir/bbb/build/conf/local.conf を編集して SDKMACHINE = “x86_64” のコメントを外して有効にする

workdir$ source poky-morty/oe-init-build-env ~/workdir/bbb/build
workdir/bbb/build$ bitbake -c populate_sdk console-image

構築(1~2時間かかる)が終わったら次のスクリプトでインストールする

$ workdir/deploy/sdk/poky-glibc-x86_64-console-image-cortexa8hf-vfp-neon-toolchain-2.1.sh

ツールは /opt/poky/2.xに出来る

(カーネルソースを取ってくる)

$ cd workdir/bbb 
$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
$ cd linux-stable
$ git checkout -b linux-4.4.y origin/linux-4.4.y

パッチをあてる

~$ cd workdir/bbb/linux-stable
workdir/bbb/linux-stable$ checkout -b work
workdir/bbb/linux-stable$ git am ../meta-bbb/recipes-kernel/linux/linux-stable-4.4/*.patch

Kernel configをコピー

cp workdir/bbb/meta-bbb/recipes-kernel/linux/linux-stable-4.4/beaglebone/defconfig workdir/bbb/linux-stable/.config

dtsからdtbを作る

workdir/bbb/linux-stable$ make bbb-xxxx.dtb
  DTC     arch/arm/boot/dts/bbb-xxxx.dtb

最初はKernel configの確認メッセージがたくさん出てくるが全てEnterでOK(たぶん?)、次からはDTCが直ぐに終わる。

ソースファイル bbb-xxxx.dts はworkdir/bbb/linux-stable/arch/arm/boot/dts にあるものが対象、dtbも同じところに出来る。 dtbが出来たら scpコマンドでBBBへコピーする

$ scp bbb-xxx.dtb root@192.168.0.xxx:/boot

BBBのuEnv.txtを書き換えてリブートすれば変更が反映される

i2c1が inputに反映されないので 比較検討用にKernel Ver3.8でうまく動作しているものの状態を記録

/dev/input/by-path にi2c-0, i2c-1に対応するデバイスが出来ている

 

画面にタッチしたときに/dev/input/event1から吐き出されるデータ

root@beaglebone:~# cat /dev/input/event1 | hexdump
0000000 e7e8 58b7 08ba 0005 0003 0039 0195 0000
0000010 e7e8 58b7 08ba 0005 0003 0035 01b7 0000
0000020 e7e8 58b7 08ba 0005 0003 0036 00f1 0000
0000030 e7e8 58b7 08ba 0005 0001 014a 0001 0000
0000040 e7e8 58b7 08ba 0005 0003 0000 01b7 0000
0000050 e7e8 58b7 08ba 0005 0003 0001 00f1 0000
0000060 e7e8 58b7 08ba 0005 0000 0000 0000 0000
0000070 e7e8 58b7 920b 0005 0003 0039 ffff ffff
0000080 e7e8 58b7 920b 0005 0001 014a 0000 0000
0000090 e7e8 58b7 920b 0005 0000 0000 0000 0000

.

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

.

root@beaglebone:~# cat /proc/bus/input/handlers
N: Number=0 Name=kbd
N: Number=1 Name=sysrq (filter)
N: Number=2 Name=mousedev Minor=32
N: Number=3 Name=joydev Minor=0
N: Number=4 Name=evdev Minor=64

.