Armadilloフォーラム

Armadillo-IoT G3 無線LANモジュールのBT無効方法

tsydc

2022年7月21日 13時24分

BLE通信機能を持つUSBドングルをArmadillo-IoT G3に挿入して使用する為、
本体内蔵のBT通信機能を無効化(できれば、インターフェースとして存在しない状態に)したいと考えています。
具体的な手順について、ご教示いただけないでしょうか。

◆試していること
Armadillo-IoT G3製品マニュアルの「17.16. CON20 WLANインターフェース」章にて、
ピン番号5:BT_DISABLE_Lがあり、その説明として以下の記載があります。
「BTの有効無効信号、i.MX 7DualのSAI1_RXFSピンに接続(Low: BT無効、High:BT有効)」

また、NXP社のi.MX 7Dualのデータシート(https://www.nxp.com/doc/IMX7DCEC)の
P.150を見ると、「SAI1_RXFS」に対する「GPIO6_IO[16]」の記載がありました。

GPIOの操作について、以下で紹介されているGPIO73の変更
https://armadillo.atmark-techno.com/howto/aiot_g3m1-se050-build_middle_…
と同じ手段で、GPIO208のdirectionを「out」、valueを「0」としました。

しかし、「hciconfig -a」の結果や、実際のスキャン動作に変化がありません。

◆補足:rfkillについて
rfkillパッケージをインストールしてblockする手段を実施してみましたが、以下の懸念点があり採用できていません。
・hciインターフェースとしては存在し続ける。
・BT USBドングルを挿入したまま起動したとき、BT USBドングルが hci0とhci1のどちらであるかを固定できない。
例)本体起動済みでUSBを挿入すると、本体:hci0、USB:hci1となるがUSBを挿入したまま再起動すると、本体:hci1、USBを:hci0となったりする。

本体のBTを無効化し、更にUSBドングルのインターフェースを常にhci0にするために、上記手順の不足/不備、もしくは別の手段をご教示いただけると大変助かります。

尚、カーネルのリビルドはできれば避けたいのですが、もし必須ということであればその旨と、BT無効化のためのポイントをご教示いただければ幸いに存じます。

コメント

at_syunya.ohshio

2022年7月22日 18時02分

大塩です。

> BLE通信機能を持つUSBドングルをArmadillo-IoT G3に挿入して使用する為、
> 本体内蔵のBT通信機能を無効化(できれば、インターフェースとして存在しない状態に)したいと考えています。
> 具体的な手順について、ご教示いただけないでしょうか。
>
> ◆試していること
> Armadillo-IoT G3製品マニュアルの「17.16. CON20 WLANインターフェース」章にて、
> ピン番号5:BT_DISABLE_Lがあり、その説明として以下の記載があります。
> 「BTの有効無効信号、i.MX 7DualのSAI1_RXFSピンに接続(Low: BT無効、High:BT有効)」
>
> また、NXP社のi.MX 7Dualのデータシート(https://www.nxp.com/doc/IMX7DCEC)の
> P.150を見ると、「SAI1_RXFS」に対する「GPIO6_IO[16]」の記載がありました。
>
> GPIOの操作について、以下で紹介されているGPIO73の変更
> https://armadillo.atmark-techno.com/howto/aiot_g3m1-se050-build_middle_…
> と同じ手段で、GPIO208のdirectionを「out」、valueを「0」としました。
>
> しかし、「hciconfig -a」の結果や、実際のスキャン動作に変化がありません。
>
> ◆補足:rfkillについて
> rfkillパッケージをインストールしてblockする手段を実施してみましたが、以下の懸念点があり採用できていません。
> ・hciインターフェースとしては存在し続ける。
> ・BT USBドングルを挿入したまま起動したとき、BT USBドングルが hci0とhci1のどちらであるかを固定できない。
> 例)本体起動済みでUSBを挿入すると、本体:hci0、USB:hci1となるがUSBを挿入したまま再起動すると、本体:hci1、USBを:hci0となったりする。
>
> 本体のBTを無効化し、更にUSBドングルのインターフェースを常にhci0にするために、上記手順の不足/不備、もしくは別の手段をご教示いただけると大変助かります。
>
> 尚、カーネルのリビルドはできれば避けたいのですが、もし必須ということであればその旨と、BT無効化のためのポイントをご教示いただければ幸いに存じます。
>

USBドングルのインターフェースを常にhci0 とするためには、udev ルールを用いた方法で解決可能かもしれません。
以下の記事が参考になると思われます。
https://armadillo.atmark-techno.com/blog/615/4245
この状態でrfkill による方法で良いのであればご採用いただくのが最も簡単かと思われます。

そうでない場合、カーネルのリビルドを行う必要があります。
「GPIO6_IO[16]」等のBluetooth のGPIOピンはデバイスツリーに記載されているため、手動で/sys/class/gpio の該当ピン番号をexport しようとしても失敗します。
カーネルソースコードのご利用のArmadilloモデルに該当するdts ファイルを開き、該当箇所を修正する必要があります。

at_syunya.ohshio

2022年7月27日 15時17分

追記です。

次のようにコマンドを実行すると
ユーザーランド空間からでも(inux-kernelのビルドをせずに)
BTを認識させないようにすることは可能です。

echo 176 > /sys/class/gpio/export
echo low > /sys/class/gpio/gpio176/direction

しかし、Kernel側がBTデバイスを認識した後にこのコマンドを実行すると
タイミングによってはいったん一度認識したあと、Disconnectされる動きになり、
USBドングル側のhciの番号が安定しないという動作になる可能性があります。

よって、以下パッチのようにDevice Treeを修正することで
起動時から認識しないようにするのがベターかと思われます。

----------------------------
diff --git a/arch/arm/boot/dts/armadillo_iotg_g3_m1.dts
b/arch/arm/boot/dts/armadillo_iotg_g3_m1.dts
index 74e523cb3a35..afc034a97e3f 100644
--- a/arch/arm/boot/dts/armadillo_iotg_g3_m1.dts
+++ b/arch/arm/boot/dts/armadillo_iotg_g3_m1.dts
@@ -668,3 +668,12 @@
line-name = "EC25_USB_VBUS";
};
};
+
+&gpio6 {
+ bt_disable_l {
+ gpio-hog;
+ gpios = <16 GPIO_ACTIVE_LOW>;
+ output-high;
+ line-name = "BT_DISABLE_L";
+ };
+};
----------------------------

以上です。

返信が遅くなり申し訳ありません。
具体的な情報をご提供いただき、ありがとうございます。

別の手段になりますが、以下の方法でhciデバイスとして現れなくなることを確認しました。
・lsusbコマンドで内蔵BTのベンダーID、プロダクトIDを確認
・上記IDに対し、ATTR{authorized}="0"の属性を追記したudevルールを作成し反映

今のところ安定しているようなので、この設定で進めてみます。