Qt for Beaglebone Black 開発環境の構築

参考にさせて頂いたサイト

http://embedded.von-kannen.net/2014/05/21/qt-4-8-6-on-beaglebone-black/#comment-13936

(1)Ubuntu 14.10 32bit版 のインストール

下記のリンクからUbuntu 14.10の32bit版isoイメージをダウンロードする
http://releases.ubuntu.com/14.10/ubuntu-14.10-desktop-i386.iso

VirtualBoxにインストールする

インストール中に砂嵐画面になった時の対処

1.Ctrl + Alt + F1 又は 右Ctrl + F1を押す ー> コンソール画面になる
2.Ctrl + Alt + F7 or 右Ctrl + F7 を押す ー> インストール画面に戻る

ユーザー qt-bbbを作成

コマンドライン・定義ファイルを変更無しでコピペ出来るようにユーザーqt-bbbでインストールする
コマンドラインに日本語のディレクトリ名が入ると入力が面倒なため。
下のコマンドを使って日本語環境の時はホームのディレクトリ名を英語に変更しておく

$ LANG=C xdg-user-dirs-gtk-update

1.環境の更新

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install linux-headers-$(uname -r)
$ sudo apt-get install build-essential
$ sudo apt-get install autoconf libtool git

VirtualboxのGuest Additionをインストール

2.ARM対応コンパイラのインストール

$ cd
$ cd Downloads
$ wget href=http://releases.linaro.org/13.04/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux.tar.xz
$ sudo tar –xz -xf gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux.tar.xz -C /opt

3.タッチパネルサポートライブラリtslibのソースをダウンロードしてコンパイル&インストール

※ インストール先がホームディレクトリ内でないとmake installがエラーになる

$ cd ~/Downloads
$ git clone href=”https://github.com/kergoth/tslib.git”>https://github.com/kergoth/tslib.git
$ cd tslib
$ export PATH=/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin:$PATH
$ ./autogen.sh
$ ./configure –prefix=/home/qt-bbb/tslib –host=arm-linux-gnueabihf
$ make
$ make install

4 Qt4.8.6 for Beaglebone Blackをインストール

$ cd ~/Downloads
$ wget http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.tar.gz
$ tar -xzf qt-everywhere-opensource-src-4.8.6.tar.gz
$ cd qt-everywhere-opensource-src-4.8.6
$ mkdir mkspecs/qws/linux-am335x-g++
$ cp mkspecs/qws/linux-arm-g++/qplatformdefs.h mkspecs/qws/linux-am335x-g++
$ nano mkspecs/qws/linux-am335x-g++/qmake.conf

 

nanoで開いたqmqke.conf(空のtext)に以下の内容を書き込んで保存する

Ctrl+O 書き込み, Ctrl+X  終了

======ここから=====

# qmake configuration for building for Beaglebone Black
#
include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/qws.conf)

#Toolchain
#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
QMAKE_CC =  /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-gcc
QMAKE_CXX = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-g++
QMAKE_LINK = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-g++

# modifications to linux.conf

QMAKE_AR = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-objcopy
QMAKE_STRIP = /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-strip
QMAKE_INCDIR += /home/qt-bbb/Downloads/tslib/src
QMAKE_LIBDIR += /home/qt-bbb/tslib/lib
load(qt_config)

======ここまで=====

コンフィグレーション

$ ./configure -v -opensource -confirm-license -prefix /opt/qt-arm -embedded arm -platform qws/linux-x86-g++ -xplatform qws/linux-am335x-g++ -depths 16,24,32 -no-mmx -no-3dnow -no-sse -no-sse2 -no-ssse3 -no-glib -no-cups -no-largefile -no-accessibility -no-openssl -no-gtkstyle -qt-mouse-pc -qt-mouse-linuxtp -qt-mouse-linuxinput -plugin-mouse-linuxtp -plugin-mouse-pc -fast -little-endian -host-big-endian -no-pch -no-sql-ibase -no-sql-mysql -no-sql-odbc -no-sql-psql -no-sql-sqlite -no-sql-sqlite2 -no-webkit -no-qt3support -nomake examples -nomake demos -nomake docs -nomake translations -qt-mouse-tslib -D QT_NO_QWS_CURSOR

コンパイル

※ -j オプションで複数のコアを指定すると速くなる

$ make -j<nbr of cores>

インストール

$ sudo make install

5.Qt4.8.6 for desktopをインストール

$ sudo apt-get install libqt4-dev

インストールディレクトリを確認しておく

$ dpkg -L libqt4-dev | less

Qt4-qmlviewerもついでにインストール、なくても影響がなさそうだがQtcreatorのQtバージョンのところに三角マークでワーニングが表示されるのを防ぐため

$ sudo apt-get install qt4-qmlviewer

Designer-pluginはデスクトップ版で動作するのでデザイン用とターゲット用のqwtをそれぞれ別にインストールする

-> デスクトップでqmake(qmake-qt4)を使うために上をインストール

6.Qt creator 2.8.1 をインストール

$ cd Downloads

$ wget https://download.qt.io/official_releases/qtcreator/2.8/2.8.1/qt-creator-linux-x86-opensource-2.8.1.run
$ chmod +x qt-creator-linux-x86-opensource-2.8.1.run
$ ./qt-creator-linux-x86-opensource-2.8.1.run

起動するインストーラの指示に従ってインストールする、インストール後Qt creatorが起動するので

ツールバーのアイコン上で右クリックしてランチャーに登録を選んでおくと以後ツールバーから起動できる

7.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

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

Qt Creatorを起動

Qwtプロジェクトを開く

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

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

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

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

(少し時間がかかる)

/home/qt-bbb/Downloads/build-qwt-デスクトップ-Debug/designer/plugins/designer/libqwt_designer_plugin.so

qtcreator-2.8.1/bin/plugins/designer

へコピーする

※qtcreator-2.8.1をhome以外の場所へインストールしている時は特権ユーザーでファイラーを起動すると便利

Qt Creatorを再起動すると qwtのウィジェットが使えるようになる

9.Beaglebone Black を接続する

USBコネクタに接続し、Windowsに表示されるBeaglebone Blackのデバイスを「取り出し」た後にVirtualBoxの下に表示されているUSBアイコンをクリックしてBeaglebone Blackを選択して接続。

Ethernet over USBが有効になっていれば 192.168.7.2 でBeagleboneにアクセスできる。

 

10.Qt Creator 上で Beaglebone Blackの環境設定

ツール > オプション ビルドと実行

コンパイラ

追加 > GCC
名前 : GCC ARM
パス : /opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/arm-linux-gnueabihf-gcc

Qtバージョン

追加
/opt/qt-arm/bin/qmake を選択する

キット

追加
名前 : Beaglebone Black
デバイス種類 : 一般的なLinuxデバイス
デバイス -> Manage
– 自動的にデバイスの設定になる
追加 -> 一般的なLinuxデバイス -> ウィザード開始
名前 : Beaglebone Black
IPアドレス : 192.168.7.2 (Beaglebone Blackのアドレスに合わせる)
ユーザー名 : root (or debian)
認証方法   : パスワード
パスワード : 無くてもOK When using debian: “temppwd”

-> 次へ -> 完了 -> デバイステストが成功しましたを確認

(make sure the Beaglebone Black is still connected)

-> 閉じる -> 適用

ビルドと実行のキットを開く

デバイス : Beaglebone  Black
コンパイラ : GCC ARM
デバッガ : GDB ARM (※Qt Creator 2.8.1 ではデバッガのタブがない)
Qt バージョン : Qt 4.8.6 (qt-arm)

-> 適用 -> Ok

※キットのタブで Beaglebone Blackを選びデバッガー>編集でARM用gdbを指定する

左のプロジェクトアイコンをクリックしてプロジェクトの設定を開く

ビルドと実行(キットを管理) -> Beaglebone Black タブの「実行」を選択

11.Beaglebone Black用にqwtを構築

Qwtプロジェクトを開く

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

左の「ようこそ」の下に並んでいるアイコンのプロジェクトをクリックして選択

-> 表示されたプロジェクトページでビルドと実行タブを開き、キットを追加からBeaglebone Blackを追加
-> Beaglebone Blackを選択
-> 中ほどの「実行」設定で 引数 に -qws を追加

左の「編集」アイコンをクリックし、表示されたqwtプロジェクトツリーで qwtconfig->qwtconfig.priをダブルクリックして編集する。

102行: QWT_CONFIG += WwtOpenGL の前に #を挿入してこの行を無効にする
121行: QWT_CONFIG += QwtDesigner の前に #を挿入してこの行を無効にする

Qwtconfig.priを保存する

ビルド > プロジェクト”qwt”をビルド を実行

(少し時間がかかる)

12.Beaglebone Blackの環境設定

Qtのライブラリを転送

$ ssh root@192.168.7.2
# mkdir /opt
# mkdir /opt/qt-arm
# nano /etc/profile
-> add qt to path: PATH=”…:/opt/qt-arm/lib”
-> Ctrl + O, Ctrl + X
# exit

$ scp -r /opt/qt-arm/lib/ root@192.168.7.2:/opt/qt-arm
$ scp -r /opt/qt-arm/plugins/ root@192.168.7.2:/opt/qt-arm

tslibのライブラリを転送

$ cd /home/qt-bbb/tslib
$ scp -r lib root@192.168.7.2:/usr/
$ scp -r bin root@192.168.7.2:/usr/
$ nano etc/ts.conf

-> Remove the leading “#” in line two (module_raw input), save with Ctrl + O and exit with Ctrl + X

$ scp -r etc root@192.168.7.2:/

Qwtのライブラリを転送

$ cd /home/qt-bbb/Downloads/build-qwt-Beaglebone_Black-Debug
$ scp -r lib root@192.168.7.2:/usr/

13.サンプルアプリケーションの作成とテスト

新規プロジェクトの作成

File -> New File or Project -> Applications -> Qt Widgets Application -> Choose

Name: HelloWorld
Path: /home/<user>/qt-bbb/projects/helloworld (You have to create the folders manually, using “browse”. Otherwise he comes up with an error)
-> Next

Beaglebone Black should be selected (debug and release)
-> Next -> Next -> Finish

プロジェクトファイル (*.pro)に下記の行を挿入すること

target.files = HelloWorld
target.path = /home/debian
INSTALLS = target

プロジェクトtslib等のライブラリを追加する方法

プロジェクトファイル(*.pro)を開き、編集画面の上でマウスの右クリックで「ライブラリの追加」を実行

-> プロジェクトファイルにライブラリが追加される、削除する時は追加されたテキストを削除

インクルードパスを追加する時は直接 INCLUDEPATH += …. をプロジェクトファイルに挿入してもOK

Beaglebone Black上でのアプリケーション実行

Qtのウィンドウシステムを使うために-qwsオプションをつけて実行する

(例) # ./HelloWorld -qws

オプション

14.タッチスクリーンの設定とキャリブレーション

インプットデバイスの確認

# cat /proc/bus/input/devices


N: Name=”ti-tsc”
P: Phys=
S: Sysfs=/devices/ocp.3/44e0d000.tscadc/tsc/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=1000003

Name=ti-tscがタッチスクリーンらしい、event1に割り当てられている

設定ファイルの編集

# nano /etc/environment

-> add the following lines

QWS_MOUSE_PROTO=tslib:/dev/input/event1
TSLIB_CALIBFILE=/etc/pointercal
TSLIB_CONFFILE=/etc/ts.conf
TSLIB_PLUGINDIR=/usr/lib/ts

-> Save (Ctrl + O) and exit (Ctrl + X)

# reboot

動作の確認

# cat /dev/input/event1 | hexdump

このコマンドを実行し画面を押してデータが表示されれば動作しているー>OK

キャリブレーション

# ts_calibrate を実行

15.その他

ターゲットにファイルコピーするコマンド(scp)rootのパスワードが認証されない

(解決方法)

ホスト(Ubuntu)側のホームディレクトリ下 .ssh/known_hostsを削除する
->一度 Are you sure want to continue connecting (yes/no)? という
メッセージが表示されるので yesと入力すれば次から自動的に接続される。

Beaglebone Black側の設定等

sysv-rc-conf でXwindow等の不要なサービスを停止する
-qwsオプションをつけてQtアプリを起動しQt Windows System を有効にする

枠無ウィンドウの表示

Main.cppにsetWindowFlagsを追加

MainWindow w;
w.setWindowFlags(Qt::FramelessWindowHint);
w.show();