ブログ

Debianで構築したBluetooth環境をAtmark Distへ移行する

at_takuya.sasaki
2014年8月4日 0時37分

以下のHowtoに従い、ユーザランドにdebianを用いて構築したBluetooth環境を、 atmark-distに移行する手順を紹介いたします。

[Howto : Armadillo-400シリーズでBluetoothを使用する]
https://armadillo.atmark-techno.com/armadillo-400-bluetooth

大まかな流れとしては、bluetoothを動作させるのに必要なアプリケーションとライブラリを ATDE3及びatmark-distのromfsにコピーをする作業となります。 尚、それぞれの作業は以下のHowtoに詳細が記載されていますのでご参考ください。

[Howto: debianパッケージに含まれるコンパイル済みのバイナリをArmadiilloで動作させる方法]
https://armadillo.atmark-techno.com/howto/use-debian-binary

[Howto : クロス開発用ライブラリをインストールする方法 ]
https://armadillo.atmark-techno.com/howto/install-cross-libraries

本手順は以下の環境で動作確認しております。

(環境)

    Armadillo:   Armadiil0-440, Armadiil0-460
    Linux:          linux-2.6.26-at18
    atmark-dist: atmark-dist-20131122

1. debian環境からatmark-distへ移行するライブラリ及びバイナリの特定

a. bluetooth パッケージの依存関係の確認します。

依存関係の確認には例えば apt-cache depends コマンドが利用できます。

[a4x0-debian ~]$ apt-cache depends bluetooth 
bluetooth 
  Depends: bluez-utils 
[a4x0-debian ~]$ apt-cache depends  bluez-utils
bluez-utils
  Depends: libbluetooth2 
  Depends: libc6 
  Depends: libdbus-1-3 
  Depends: libglib2.0-0
  Depends: libusb-0.1-4 
  Depends: module-init-tools 
 |Depends: makedev 
  Depends: udev 
  Depends: lsb-base 
  Depends: dbus 
 
[a4x0-debian ~]$ apt-cache depends libbluetooth2
libbluetooth2
  Depends: libc6
  ...
b. ATDE3にインストールされているarmel向けクロスライブラリは例えば以下のコマンドで確認できます。
[ATDE3]$ dpkg-cross -l  -a armel
c. a, bの情報より、ATDE3に足りないパッケージを特定します。

本環境では、以下のパッケージがATDE3に不足していたので、これらを今後の手順でインストールしていきます。

bluetooth libusb-0.1-4 libdbus-1-3 libbluetooth2 module-init-tools makedev udev lsb-base dbus bluez-utils

2. 特定したdebファイルをダウンロードし、ATDE3に転送

[a4x0-debian ~]$ aptitude download bluetooth libusb-0.1-4 libdbus-1-3 libbluetooth2 module-init-tools makedev udev lsb-base dbus bluez-utils
[a4x0-debian ~]$ scp *deb atmark@ATDE3:/home/atmark/bluetooth/

3. クロス開発ライブラリへの変換、及びATDE3へのインストール

[ATDE3 ~]$ cd ~/bluetooth/
[ATDE3 ~/bluetooth]$ for i in  $( ls *.deb ); do dpkg-cross  -v --build --arch armel  $i; done
[ATDE3 ~/bluetooth]$ for i in $( ls *cross*) ; do dpkg -i $i; done

4. BusyBox v1.20.2 を選択

6.でインストールされる設定ファイルの一つ、/etc/init.d/dbus スクリプト内で、mountpoint バイナリを必要とするため、 busybox v1.20.2がインストールされるようコンフィグします。

[ATDE3 ~]$ cd ~/atmark-dist
[ATDE3 ~/atmark-dist]$ make menuconfig 
 
 Kernel/Library/Defaults Selection  --->  を選択。
[*] Customize Vendor/User Settings       をチェックしExitで抜ける。
 
Userland Configuration より、
  BusyBox  --->   
    (v1.20.2)   Version  

5. D-bus, bluetooth 起動設定

D-bus, bluetoothを起動するためのパッチを適用し、一度romfsを作成します。(*1)

パッチは以下からダウンロードしてください。

[ATDE3 ~]$ cd ~/atmark-dist
[ATDE3 ~/atmark-dist]$ cat add_bluetooth_to_dist_a440_a460.patch | patch -p1 (*2)
[ATDE3 ~/atmark-dist]$ cat Fix-the-mount-failure-at-startup-when-busybox-1.20.2.patch | patch -p1 
[ATDE3 ~/atmark-dist]$ make 

(*1) make all ターゲット実行時は、手動でコピーしたアプリケーションを消去されてしまうので、先に、パッチを反映させたromfsを作成します。
https://users.atmark-techno.com/comment/172#comment-172

(*2) 本パッチは、Armadillo-440, Armadillo-460向けに作成したものです。Armadiilo-420をご利用の場合は、パッチの内のパスを適宜変更してください。

6. バイナリ及び設定ファイルのromfsへのインストール

次にBluetoothを動作させるためのアプリケーションや設定ファイルをromfsへインストールします。

[ATDE3 ~]$ cd ~/bluetooth
[ATDE3 ~/bluetooth]$ for i in $( ls *deb |grep -v cross |grep -v udev ); do dpkg -x $i tmp ; done (*3)
[ATDE3 ~/bluetooth]$ rm -rf tmp/usr/share (*4)
[ATDE3 ~/bluetooth]$ cp -r tmp/* ~/atmark-dist/romfs/ 
[ATDE3 ~]$ cd ~/atmark-dist
[ATDE3 ~/atmark-dist]$ make romfs; make image (*5)

(*3) udev はatmark-distにすでに組み込まれているため、除外します。

(*4) user/share 以下はmanページ用ファイルやドキュメント類といった補助的なコンテンツが格納されているため、romfsのサイズを節約するために消去します。

(*5) 自作アプリケーションをromfsにコピーした後、make romfs, make image とするとatmark-distは、そのアプリケーションの依存ライブラリをATDE3にインストールされているクロス開発用ライブラリより検索し、自動的にromfs配下にインストールしてくれます。

7. 作成したromfsを用いてブート

一連の手順で作成したromfs、及びdebian環境で用いていたカーネルを使用してブートして下さい。 詳細な手順は製品マニュアルをご参照下さい。

8. config ファイルの更新

/etc/default/rc.localの内容をフラッシュのコンフィグ領域に書き込みます。 以下のコマンドを実行後、Armadilloを再起動してください。

[a4x0-atmark-dist ~]# chmod +x /etc/default/rc.local
[a4x0-atmark-dist ~]# flatfsd -w

9. 動作確認

a. dbus daemon, 及びhci daemonプロセスが起動していることを確認
[a4x0-atmark-dist ~]# ps
1178 messageb   0:00 /usr/bin/dbus-daemon --system
1184 root       0:00 /usr/sbin/hcid -x -s
b. rfcomm listen でPCと接続
[a4x0-atmark-dist ~]# rfcomm listen 1 
Waiting for connection on channel 1
Connection from 00:02:72:D0:0A:B4 to /dev/rfcomm1
Press CTRL-C for hangup
c. PCとの通信を確認
[a4x0-atmark-dist ~]# cat /dev/rfcomm1 
hello
hello