Armadilloフォーラム

コンテナ内からBT通信を扱うためのデバイスファイルについて

gt777

2023年5月8日 10時38分

Armadillo-IoTゲートウェイ G4 LTE+WLANモデルを使用しています。
製品マニュアル「9.4.5. 近距離通信を行う」を参考に、コンテナ内からBluetoothデータを取得しようとしているのですが、
add_devicesでコンテナに渡すデバイスファイルについて、Armadillo内にCON5(UART1)用の/dev/ttymxc0が存在しません。

armadillo:~# ls /dev/ttymxc*
/dev/ttymxc1  /dev/ttymxc3
armadillo:~# cat /etc/atmark/containers/bt_example.conf
set_image docker.io/alpine
set_command sleep infinity
set_network host
add_devices /dev/ttymxc3
add_args --cap-add=NET_ADMIN

試しにttymxc1,ttymxc3それぞれをadd_devicesに設定してみましたが、コンテナ内からbluetoothctlコマンドを実行しても「No default controller available」と表示されてしまい、うまくデータが取得できませんでした。(ttymxc1はシリアルコンソール用(CON6)と接続されているようでした。)
既存のデバイスファイルを設定するわけではなく、デバイスツリーを変更してttymxc0を作成する必要があるのでしょうか?

なお、ホストOS側では製品マニュアル「7.1.8. BT」の手順でBluetooth通信ができることを確認済みです。

知識不足で申し訳ありませんが、助言いただけますと幸いです。

コメント

at_dominique.m…

2023年5月8日 11時10分

gt777さん

お世話になっています、
アットマークテクノのマルティネです。

> 製品マニュアル「9.4.5. 近距離通信を行う」を参考に、コンテナ内からBluetoothデータを取得しようとしているのですが、
> add_devicesでコンテナに渡すデバイスファイルについて、Armadillo内にCON5(UART1)用の/dev/ttymxc0が存在しません。

申し訳ございません、マニュアルにかかれてある手順は発売前の調査の段階でかかれていて、確認不足で更新し忘れていました。

リリースされた Armadillo Base OS では /dev/ttymxc0 が存在しないのは正常です。その次の実行例での「btattach」コマンドも不要となります。

NXPからいただいたソフトウェアでは btattach が必要でしたが、使いやすくするために DTS で認識されるように修正しました。その際にマニュアルを更新しなくてお手数をおかけしました。

> armadillo:~# ls /dev/ttymxc*
> /dev/ttymxc1  /dev/ttymxc3
> armadillo:~# cat /etc/atmark/containers/bt_example.conf
> set_image docker.io/alpine
> set_command sleep infinity
> set_network host
> add_devices /dev/ttymxc3
> add_args --cap-add=NET_ADMIN

このマニュアルの問題があっても、 set_network hostadd_args --cap-add=NET_ADMIN で BT が認識されるはずです。
こちらの環境でただいま確認しました:

armadillo:~# cat /etc/atmark/containers/bt.conf 
set_image docker.io/alpine
set_command sleep infinity
set_network host
add_args --cap-add=NET_ADMIN
armadillo:~# podman_start bt
Starting 'bt'
4d1813e7cd1a9ac36244a2e9b7edb8e7adc84d69bc6b6c8c3b624d82ae3de867
armadillo:~# podman exec -ti bt sh
/ # apk add bluez
...
/ # dbus-daemon --system
/ # /usr/lib/bluetooth/bluetoothd &
/ # bluetoothctl 
Agent registered
[CHG] Controller 34:6F:24:C0:C6:F5 Pairable: yes
[bluetooth]# 

ホストOS側ですでに確認済とのことですが、もしかしたら bluetoothd がホスト側でまだ実行中でしょうか?
bluetoothd は専用ロックを取得しているため、ホスト側で起動された場合はコンテナで使用できません。
(共有する必要がある場合は dbus で一つの bluetoothd を共有するしかないです)

これ以外の問題でしたらもう少し考えてみますので、また聞いてください。

よろしくお願いします。

アットマークテクノ マルティネさん

ご回答ありがとうございます。
confファイルへのadd_devicesの指定と「btattach」コマンドの実行は不要で承知しました。

> ホストOS側ですでに確認済とのことですが、もしかしたら bluetoothd がホスト側でまだ実行中でしょうか?
> bluetoothd は専用ロックを取得しているため、ホスト側で起動された場合はコンテナで使用できません。
> (共有する必要がある場合は dbus で一つの bluetoothd を共有するしかないです)

ご指摘通り、ホストOS側でbluetoothdサービスが起動されておりました。
ホスト側のbluetoothdを停止し、記載いただいたコマンドに従って確認したところ、コンテナ内から正常にbluetoothctlを使用できました。
ありがとうございました。