「 2014年10月 」一覧

ARMのプログラムを作成してデバッグする 第3回

前回までにおおよそ必要な物は準備できたので、今回はそれらの設定を行っていきます。

sshログインの設定

eclipse にプラグイン (Remote System Explorer) を導入したことで、ssh のターミナルや sftp を eclipse から操作することができるようになります。
ファイルの転送について、GUI上でドラッグアンドドロップで操作できるのはすごく楽になると思います。今までならWinScpを別途立ち上げるとかだったと思います。

メニューから Window / Open Perspective / Other と選択し、Remote System Explorer を選びます。
新しく、Remote Systems というタブ(ウィンドウ)が開くと思います。
この開いたウィンドウで、新規にコネクションの作成を行います。
ウィンドウ上で右クリックし、New/Connection… を選んで下さい(あるいは追加のボタンを押しても可).

以下のようなウィンドウが開くと思います。ここでは対象がLinuxを選びます(Jetson TK1がそうなので)

select_remote_system_type

続いて対象のIPアドレスを入力します。そしてNextボタンを押します。

remote_linux_system_connection
その後のウィンドウでは、ssh.files、processes.shell.linux、ssh.shells, ssh.terminals と順番に選んで設定を完了させます。
設定が完了した後では、以下のように登録されていると思いますが、ここで右クリックしてプロパティを開きます。

remote_system_tab_add

そして、デフォルトのエンコーディングを UTF-8 にしておきます(おそらく最近はこちらのケースが多いでしょう)

remote_system_property

あとは、右クリックして Connect でターゲットに対して接続を行います。また Sftp Files ではターゲットのディレクトリツリーを確認できますし、Ssh Terminals で右クリックして Launch Terminal を選ぶとsshのシェルを開くことが出来ます。

もう、ちょっとしたシェルのために別アプリを開かなくていいので大変楽になります~。

C,C++のプロジェクトを作ってクロスコンパイル

eclipseで C/C++ のサンプルを作って動作の確認および設定を行っていきます。
まずは、簡単なプログラムHello,worldを作ってみます。

メニューから File / New / Project と辿り、C/C++の C++ Project を選択します。
すると詳しい情報を入力するウィンドウが開くので、ここでは以下のように設定してみます。

  • Project Name: HelloWorldArm
  • Executable は Cross-Compile Project

cpp_project_cdt

続いてクロスコンパイル用のツールに関して以下のように入力します。
今回のターゲット Jetson TK1 は Linaro の eabihf のものを使用しているのでこんな感じになります。

  • Tool command prefix: arm-linux-gnueabihf-
  • Tool command path: D:\Linaro\gcc-linaro-arm-linux-gnueabihf-4.8-2014.04\bin

cross_gcc_config
もし他のツールチェインを使う場合にはこれらの設定を対象の物に変えてあげればうまくいくかなと思います。

プロジェクトを作成したら、プロジェクトを右クリックして New / Other を選択してダイアログを開き、「Source File」を選択します。
ファイル名には適当に、main.cppとでもしておきます。

こうして作成したファイルに、以下のように適当なプログラムコードを記述します。

作成したら、プロジェクトを右クリックして、「Build Project」を選択します。するとコンパイルが開始されます。
以下のようになると思いますが、エラーが出ている場合には make コマンドが実行できているか確認するところから調査します。Msysで入れ忘れているか、パスが通っていないかだと思います。

cdt_build_log

ソースコードのビルドまで、たどり着きました!
メニューから Project / Build Configurations / Set Active と辿ることで、デバッグビルドとリリースビルドの選択切り替えができるようです。

次回は、デバッグについて設定していきたいと思います。


ARMのプログラムを作成してデバッグする 第2回

前回から随分と時間が経ってしまいましたが、ターゲットを Jetson TK1 として環境を構築していきたいと思います。
同じことが Raspberry Pi や似たようなARMボードでも通用するんじゃないかと思います。まあなんといいますか、最近そういうのが流行ってるらしいので。組込用のボードで遊ぶっていうかクロスコンパイルってやつが。

実現することは、『Windows環境でクロスコンパイルおよびリモートのデバッグを可能とすること』です。
VMware の VMPlayer に UbuntuなどのLinux環境を入れて実現というのは、既によく語られている方式で安定して動くのでしょうが、割と動作が重くなりがちです。今回は仮想環境を使わないで環境を準備するというのを目標としています。

準備(ターゲット)

とりあえずリモートからのデバッグということで、ターゲット機には gdbserver をインストールしておきます。
gdbserverをターゲットでコンパイルして、パスの通った場所においておくか、Jetson TK1 なら apt-getでのインストールも可能です。

あとは既に動いているかと思いますが、ssh server(sshd)もサービス起動できるようにしておきます。
また、IPアドレスの取得なども正常にできていることは確認しておいてください。

準備(Windows)

開発環境としてはやはりeclipseを使用します。
他には Linaro のサイトから Windows用のクロスコンパイラなどツールチェインを取得しておきます。
またmakeが必要になるので、MinGWの環境もインストールしたいと思います。確認はしていないですが、cygwinのmakeでも流用可能かもしれません。

eclipseは、ちょっと古いですが eclipse-SDK-3.7-win32.zip を使用しました。他のものでも問題ないと思います。
Linaroからのツールチェインは、gcc-linaro-arm-linux-gnueabihf-4.8-2014.04-20140416_win32.exe をダウンロードしました。
ダウンロードのサイトは、http://www.linaro.org/downloads/です。ここからダウンロードして下さい。見た感じインストーラー付属のものしかなさそうです。ここでは、D:\Linaro にインストールしてみました。
インストールすると、D:\Linaro\gcc-linaro-arm-linux-gnueabihf-4.8-2014.04 以下に色々とツールがインストールされました。

linaro-gcc
続いて MinGWのインストールです。
MinGWは http://www.mingw.org/ から取得できます。ですが、このサイトからダウンロードするべき物がわかりづらいです。
mingw-get-setup.exe というものが見つかると思うので、これをダウンロードして実行し、ここからMinGW と MSYS とをインストールしてください。このとき、MSYSに含まれる make がインストールされるように、パッケージの確認をおこなっておきます。

ここでは、D:\MinGW にインストールを行いました。
そして、D:\MinGW\msys\1.0\bin に色々とツールが入っているので、ここにPATHを設定しておきます。
(環境変数 PATH の値に、D:\MinGW\msys\1.0\bin を末尾にでも追加しておいて下さい)

eclipseにプラグインを導入

以下のプラグインをインストールします。

  • C/C++ Development Tools
  • C/C++ Development Tools SDK
  • C/C++ GCC Cross Compiler Support
  • C/C++ Memory View Enhancements
  • C/C++ Remote Launch
  • Remote System Explorer End-User Runtime
  • Remote System Explorer User Actions

メニューのヘルプから Install New Software を選択し、利用可能なサイト全ての項目を選んで、上記項目をいれていけば見つかると思います。

eclipse-cdt

必要な物はこれでそろったので、次回はこれらを設定して環境を組み上げていきます


Cardboard用プログラムの公開

Cardboard で MMD のプログラムについて、mikuboard というプロジェクト名で、Githubにソースコードを公開することにしました。

https://github.com/techlabxe/mikuboard

今後の予定としては、もっとやりたいことがあるのでJavaではなくネイティブプログラムに書き換えて、表情だとかレンダリングなどについて強化していきたいなと思っています。

なお即インストールできる APKファイルもこちらに配置しておきます。
よろしければ、こちらもご利用下さい。

Mikuboard.Apk をダウンロードする

cardboard_vr_miku


Cardboard VR のアプリ作ってみました(MMD)

没入タイプのVRとして Oculus Rift が割と有名になっていますが、
AndroidスマートフォンでVRを体験できる Google製の Cardboard というものがあります。
今年の初めに既に発表&配布されたようで、知る人ぞ知る状態だったのですが、最近イベント等でGoogleが段ボールのキットを割と広く配布してくれるようになって目にする機会&試す機会が増えました。

でも、このCardboardは設計図情報を公開してくれているため、がんばれば自作することが可能です。入手方法は Cardboardのページで、”Cardboard Design Files”と書かれたボタンから、Cardboard の設計図を入手することが出来ます。

そんなCardboardで、動くアプリを試しに作ってみました。既に誰かがやられてるかもしれませんが、MMDのモデルとモーションを読み込ませて、VRでちゃんと立体的に見てみよう!と思って作ってみました。
現時点ではMMDらしいレンダリングではありませんし、ステージデータも読めない、MMDとしては不完全なものではありますが、ちゃんとキャラは立体感をもって見ることが出来ました。

これらのプログラムコードおよびApkファイルは近日中に公開したいと思います。

現時点での様子

MMDの標準付属の初音ミクさんです
cardboard_vr_miku

追記

ソースコード類の公開準備が整いました。GitHubで公開です。

https://github.com/techlabxe/mikuboard

また即インストールできる APKファイルもこちらに配置しておきます。よろしければ、こちらもご利用下さい。

Mikuboard.Apk をダウンロードする


Gitblit でユーザー認証をドメインサーバーに任せる

GitblitがQNAPで動作できたという記事を以前に書きましたが、GitblitはWindows上でも簡単に動かすことが出来ます。公式ページで Gitblit GO というパッケージを配布しており、ダウンロード後は中に入っているバッチファイルを実行するだけで、サービスのホスティングが可能となります。

このGitblitの認証は割とたくさんの方式をサポートしています。通常だと管理者が1つずつユーザーを追加する状態ですが、これをWindowsドメインに任せることができます。GitblitはLDAP認証をサポートしています。日本語での記事が見つからないようなので、記事にしてみました。

早速設定方法です。
gitblitを展開した中に、data/gitblit.properties という設定ファイルがあります。
この中の項目を書き換えていきます。

ウィンドウズドメインサーバー(LDAP)を使うための設定

LDAP用の設定

ここからは各自の環境に合わせて適宜変更してください。
ここではサーバーを 192.168.0.1 とし、ドメイン名を mydomain.com (ユーザーはMYDOMAINに参加)と仮定して設定方法を下記に示します。

ドメインの中を検索するユーザーとして、searchUser というユーザーを準備して、パスワードを password としておきます。

これらの設定をしたうえで、gitblitを起動し直して、ユーザーがログインしようとするとWindowsドメインに認証にいくと思います。
うまくいかない場合にはサーバーのアドレスや、usernameが間違っていないかチェックしてみて下さい。またユーザー名の前にはドメイン名を付加させることもお忘れ無く。

企業などで、細かくグループが分かれている場合には、accountBase, groupBase らを変更するだけでなく、
realm.ldap.bindpattern といった項目も変更が必要になるかもしれません。

問題点

試したバージョンが 1.6.0 です。この場合 LDAP認証されたユーザーはデフォルトで様々な権限を持たないようです。そのため、リポジトリの作成権限すらありませんのでちょっと使いづらいかもしれません。パブリックなリポジトリがあればそれらに対してコードの取得程度は出来るんでしょうが・・・。
このあたりは改善される気配があるので、様子見です。せめてグループ単位でデフォルトの設定を適用できるような改良が望まれます。


Jetson TK1をSDカード起動にする

Jetson TK1のシステムや作業領域としてSDカードを使用するように切り替えました。
容量の問題とか書き換え回数制限とか気にしてです。SDカードならシステム破壊するようなことをしても、交換可能ですし、バックアップもやりやすそうですし、メリットが多くあると思います。

準備

ここではVMware上の Ubuntu 14.04 で作業しました。
必要なファイル群をNVIDIAから入手します.

Tegra124_Linux_R19.3.0.armhf.tgz2
Tegra_Linux_Sample-Root-Filesystem_R19.3.0_armhf.tbz2

そしてこれを適当なところに展開して、コマンドを実行します。
これらの作業コマンドを以下に示しておきます。

$ wget https://developer.nvidia.com/sites/default/files/akamai/mobile/files/L4T/Tegra124_Linux_R19.3.0_armhf.tbz2
$ wget https://developer.nvidia.com/sites/default/files/akamai/mobile/files/L4T/Tegra_Linux_Sample-Root-Filesystem_R19.3.0_armhf.tbz2
$ tar xpf Tegra124_Linux_R19.3.0_armhf.tbz2
$ cd Linux_for_Tegra/rootfs
$ sudo tar xpf ../../Tegra_Linux_Sample-Root-Filesystem_R19.3.0_armhf.tbz2
$ cd ../
$ sudo ./apply_binaries.sh

書き込み

ファイル群が準備できたので、これをSDカードに書き込みます。
手元のカードリーダーでSDカードを装着して確認したところ、/dev/sdb として認識しているようでした。各自の環境ではこのあたりが変わると思いますので、適宜読み替えて下さい。

SDカードがフォーマットされたところで、データを書き込みます。

Jetson TK1をUSB(microUSBのほう)でLinux環境と繋いでリカバリーモード起動させます。
リカバリーモードに入るには、Recoveryスイッチを押しながら、Resetスイッチを押します。

リカバリーモードに入った後で、Linux環境で以下のコマンドを実行します。
念のため、認識できているか lsusb で確認しています。
リカバリーモードに入っているときには、画面に何も出力されないので…。

というように表示されて、正常に書き込まれるとJetson TK1が再起動されます。

fastboot.bin というバイナリが送られているようですし、方式としてはfastbootのほうでしょうか。
19.3バージョンからは、U-BOOTもサポートされたとありましたし、そのうち試してみたいところです。

再起動後、SDカードを挿さないままだと、起動が途中で止まるはずです。
止まったことを確認したら、SDカードを挿入してみます。
うまくいけば、ここから起動シーケンスが再開されていくと思います。
(画面が出ないようなら、リセットして試してみましょう)

初期設定など

Jetson TK1が無事にSDカードから起動できたら、初期設定をしておきます。
タイムゾーンは Asia/Tokyo を選択して時刻を合わせておきます
(実際にはRTCは、電源OFFでリセットされちゃうんですが・・・)
他にもリポジトリの設定とか。

コマンドが見つからなかった場合のヘルプ(どのパッケージに入ってるのか)を出すための設定.

最後に使用量を確認しておきます。
SDカードが16GBの物を使っているのでこんな感じでした。

デフォルトの eMMCに入っている時には 8GBほどのパーティションだったと思います。
上記のように15Gが表示されていますし、無事にSDカードのシステムが使われているように思います。

感想とか

最後に感じたことを1つ。
安物SDカードだとか、クラスの低いものを使っていると、操作に引っかかりをよく感じます。
気になる人は、ちゃんとした高速なものを使用するようにしましょう。

最後に

元の起動に戻す方法は、リカバリーモードにして以下のコマンドを実行します。