at_takuya.sasaki
2015年8月23日 21時42分
過去に以下のようなブログを書いてみました。
Armadillo-400シリーズでBLEを使ってみる
上記ブログと同じことを、Armadillo-840のカーネルバージョン3.4で動作できるかどうか試してみたいと思います。
1. ATDE5をダウンロード
Armadillo-IoTの開発環境であるATDE5を以下からダウンロードします。
https://armadillo.atmark-techno.com/armadillo-iot/downloads
[開発環境] -- [ATDE]
ATDE5の起動方法は以下を参照してください。
https://manual.atmark-techno.com/armadillo-iot/armadillo-iotg-std_product_manual_ja-2.0.0/ch04.html#sct.before-work.setup-atde5
2. ソースコードのダウンロードと展開
2.1 Armadillo-840のソースコードをダウンロードします。
atmark@atde5:~$ wget http://armadillo.atmark-techno.com/files/downloads/armadillo-840/source/linux-3.4-at15.tar.gz
atmark@atde5:~$ wget http://armadillo.atmark-techno.com/files/downloads/armadillo-840/source/atmark-dist-20150727.tar.gz
2.2 ソースコードを展開します。
atmark@atde5:~$ tar zxf atmark-dist-20150727.tar.gz
atmark@atde5:~$ tar zxf linux-3.4-at15.tar.gz
atmark@atde5:~$ ln -s atmark-dist-20150727 atmark-dist
atmark@atde5:~$ cd atmark-dist
atmark@atde5:~/atmark-dist$ ln -s ../linux-3.4-at15 ./linux-3.x
3. カーネルのカスタマイズ
3.1 make menuconfigでvendor/Productを指定します
atmark@atde5:~/atmark-dist$ make menuconfig
Main Menu
Vendor/Product Selection --->
(AtmarkTechno) Vendor
(Armadillo-840) AtmarkTechno Products
3.2 カーネルコンフィギュレーションでBluetoothを有効にします
Linux Kernel Configuration
[*] Networking support --->
--- Bluetooth subsystem support
<*> RFCOMM protocol support ←チェックをつける
[*] RFCOMM TTY support ←チェックをつける
<*> BNEP protocol support ←チェックをつける
[*] Multicast filter support ←チェックをつける
[*] Protocol filter support ←チェックをつける
<*> HIDP protocol support ←チェックをつける
Bluetooth device drivers --->
<*> HCI USB driver ←チェックをつける
4. ビルドを実行
4.1 ビルドを実行します。
atmark@atde5:~/atmark-dist$ make
5. Bluezをビルド
6.1 Bluez 5.32をダウンロードして展開します。
(2015.7.21時点での最新は5.32です)
atmark@atde5:~$ wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.32.tar.xz
atmark@atde5:~$ tar Jxf bluez-5.32.tar.xz
6.2 libicalのクロスパッケージをインストールします
atmark@atde5:~$ wget http://ftp.jp.debian.org/debian/pool/main/libi/libical/libical0_0.48-2_armel.deb
atmark@atde5:~$ dpkg-cross -v --build --arch armel libical0_0.48-2_armel.deb
atmark@atde5:~$ sudo dpkg -i libical0-armel-cross_0.48-2_all.deb
atmark@atde5:~$ wget http://ftp.jp.debian.org/debian/pool/main/libi/libical/libical-dev_0.48-2_armel.deb
atmark@atde5:~$ dpkg-cross -v --build --arch armel libical-dev_0.48-2_armel.deb
atmark@atde5:~$ sudo dpkg -i libical-dev-armel-cross_0.48-2_all.deb
6.3 configureを実行します
atmark@atde5:~$ cd bluez-5.32/
atmark@atde5:~/bluez-5.32$ ./configure --build=i686 --host=arm-linux-gnueabi --disable-udev --disable-systemd --prefix=/usr
6.4 makeを実行します
atmark@atde5:~/bluez-5.32$ make
6.5 make installを実行します。
atmark@atde5:~/bluez-5.32$ make install DESTDIR=/home/atmark/atmark-dist/romfs/
6.6 不要なファイルを削除します。
atmark@atde5:~/bluez-5.32$ rm -rf /home/atmark/atmark-dist/romfs/usr/share/man/
6.8 gatttoolを手動でインストールします。
atmark@atde5:~/bluez-5.32$ cp attrib/gatttool /home/atmark/atmark-dist/romfs/usr/bin/
7. D-busをatmark distにインストール
7.1 DebianパッケージのD-busをダウンロードします
atmark@atde5:~/bluez-5.32$ cd
atmark@atde5:~$ wget http://ftp.gnome.org/mirror/cdimage/snapshot/Debian/pool/main/d/dbus/dbus_1.6.8-1+deb7u1_armel.deb
7.2 D-busパッケージをatmark distのROMイメージディレクトリに展開します
atmark@atde5:~$ dpkg -x dbus_1.6.8-1+deb7u1_armel.deb atmark-dist/romfs/
7.3 不要なドキュメントファイルなどを削除します
atmark@atde5:~$ rm -rf atmark-dist/romfs/usr/share/doc
atmark@atde5:~$ rm -rf atmark-dist/romfs/usr/share/man
7.4 D-busが必要とするinit-funcionsをatmark distのROMイメージディレクトリに展開します
atmark@atde5:~$ wget http://ftp.jp.debian.org/debian/pool/main/l/lsb/lsb-base_4.1+Debian8+deb7u1_all.deb
atmark@atde5:~$ dpkg -x lsb-base_4.1+Debian8+deb7u1_all.deb atmark-dist/romfs/
atmark@atde5:~$ rm -rf atmark-dist/romfs/usr/share/doc
7.5 D-busデーモンを実行するユーザ/グループを追加します
atmark@atde5:~$ vi atmark-dist/vendors/AtmarkTechno/Armadillo-IoTG-Std/etc/passwd
ファイル末尾に以下の行を追加します
messagebus:x:101:105::/var/run/dbus:/bin/false
atmark@atde5:~$ vi atmark-dist/vendors/AtmarkTechno/Armadillo-IoTG-Std/etc/group
ファイル末尾に以下の行を追加します
messagebus:x:105:
8. イメージを再作成して、カーネル/ユーザーランドをArmadilloに書き込みます
atmark@atde5:~$ cd atmark-dist
atmark@atde5:~/atmark-dist$ make romfs
atmark@atde5:~/atmark-dist$ make image
9. D-bus/bluetoothdを起動するように設定します
9.1 Armadilloにログインして、rc.localを編集します
[root@armadillo440-0 (ttymxc1) ~]# cd /etc/config/
[root@armadillo440-0 (ttymxc1) /etc/config]# vi rc.local
末尾に、以下の2行を追加
/etc/init.d/dbus start
/usr/libexec/bluetooth/bluetoothd &
9.2 ROMに保存して再起動します
[root@armadillo440-0 (ttymxc1) /etc/config]# flatfsd -s
[root@armadillo440-0 (ttymxc1) /etc/config]# reboot
10. BLEデバイスと通信をしてみます
10.1 今回使用するBluetoothモジュールは以下になります
- USBドングル : http://www.princeton.co.jp/product/ptmubt7.html
- BLEデバイス : http://www.logitec.co.jp/products/bluetooth/lbtmpvru02/
10.1 USBドングルを認識しているか確認します
[root@armadillo-iotg (ttymxc1) ~]# hciconfig
hci0: Type: BR/EDR Bus: USB
BD Address: 00:1B:DC:06:C0:41 ACL MTU: 310:10 SCO MTU: 64:8
DOWN
RX bytes:558 acl:0 sco:0 events:28 errors:0
TX bytes:355 acl:0 sco:0 commands:28 errors:0
10.2 USBドングルを有効にします
[root@armadillo-iotg (ttymxc1) ~]# hciconfig hci0 up
10.3 BLEデバイスを検索します
[root@armadillo-iotg (ttymxc1) ~]# hcitool lescan
LE Scan ...
44:13:19:05:A8:5B LBT-VRU0234
44:13:19:05:A8:5B (unknown)
(Ctrl-Cで停止)
10.4 BLEデバイスにコマンドを送信して、ベルを鳴らしたりLED点灯させます
[root@armadillo-iotg (ttymxc1) ~]# gatttool -i hci0 -b 44:13:19:05:A8:5B -I
[44:13:19:05:A8:5B][LE]> connect
Attempting to connect to 44:13:19:05:A8:5B
Connection successful
[44:13:19:05:A8:5B][LE]> char-write-cmd 0x000d 02 ←振動もしくはメロディ
[44:13:19:05:A8:5B][LE]> char-write-cmd 0x000d 01 ←LED点灯
以上