yabumoto
2021年5月31日 14時08分
お世話になります。
度々申し訳ございません。
Armadillo-640(Buster) python3.7.3で gattlibがインストールできなく困っています。
pip3、インストーラも最新です。
以下pipを使いインストールしようとしましたが、
atmark@armadillo:~$ sudo pip3 install gattlib
----- error message --
arm-linux-gnueabihf-gcc: fatal error: Killed signal terminated program cc1plus
compilation terminated.
error: command 'arm-linux-gnueabihf-gcc' failed with exit status 1
のエラーメッセージが出て中断してしまいます。
メモリ不足のようなので、以下のオプションを付けて試してみましたが、結果変わらずでした。
atmark@armadillo:~$ sudo pip3 install gattlib --no-cache-dir
対策方法のご教授お願い致します。
コメント
yabumoto
入江様
ご対応ありがとうございます。
ご指示頂きました通り、ルートファイルシステムの再構築を行いました。
※opencvもこの方法でインストールしている為か、buildに約20h掛かります。
残念ながら gattlib、pybluez ともにインストールされていないようです。
#fix rc.local cp /resources/hosts /etc/hosts cp /resources/rc.local /etc/rc.local cp /resources/interfaces /etc/network/interfaces pip3 install pybluez ← 追記 pip3 install gattlib ← 追記
以下の追加ライブラリに不足あってインストールできなかったのでしょうか?
ログも残っていない為何が悪かったのかわかりません。
#Bluetooth bluez # 以下追記 python3 python3-pip libglib2.0 libboost-python-dev libboost-thread-dev
再度ご指示頂いたパッケージをすべて追加して確認してみます。
大変時間の掛かる作業につき、お気づきになった点、或いは留意点等ございましたら
ご指摘頂ければ幸いです。
yabumoto
入江様
お世話になります。
ご教授頂いた手順で、「ルートファイルシステム」を再構築しましたが
インストール出来ていないようです。
上記「ルートファイルシステム」のイメージを更新し、
gattlib を使用するプログラムを実行すると以下のエラーが出ます。
PATH等の問題ではないようです。
atmark@armadillo:~$ sudo python3 switchbot_py3.py --help Traceback (most recent call last): File "switchbot_py3.py", line 35, in <module> from bluetooth.ble import DiscoveryService, GATTRequester File "/usr/local/lib/python3.7/dist-packages/bluetooth/ble.py", line 1, in <module> from gattlib import * ModuleNotFoundError: No module named 'gattlib'
原因を絞り込む為、出来ることございますでしょうか?
とりあえず、ログを取りながら再々構築中です。
以上、宜しくお願い致します。
yabumoto
yabumoto
入江様
お世話になっております。
ご教授頂いた手順にて、gattlib インストール済みの「ルートファイルシステム」が作成できました。
ありがとうございました。
ところが、イメージを更新し、WEB上では実績のあるコードを動作させると
以下のエラーが発生します。(致命的?)
原因を調査しているのですが解決に至っておりません。
お気づきの点等ございましたらアドバイス頂けませんでしょうか?
PyGattLib ERROR: connect error: Software caused connection abort (103) free(): double free detected in tcache 2 Aborted
以上、何卒宜しくお願い致します。
at_akihito.irie
yabumoto
入江様
お世話になっております。
説明不足申し訳ございません。
上で動作させている「switchbot_py3.py」になります。
実績のある=ラズパイからの制御になりますが、色々なサイトで同様の手順で動作実績があるようです。
$sudo python3 switchbot_py3.py --help
は問題なく動作します。
$sudo python3 switchbot_py3.py --scan
で、デバイス発見後に以下のエラーを出力しています。
PyGattLib ERROR: connect error: Software caused connection abort (103)
free(): double free detected in tcache 2
Aborted
以上、ご確認の程宜しくお願い致します。
at_akihito.irie
yabumoto
入江様
お世話になっております。
ご教授頂きありがとうございます。
当初より UP RUNNING 状態であった為、 hciconfig hci0 up の実行はしていませんでした。
hci0: Type: Primary Bus: USB BD Address: 45:62:8C:68:63:72 ACL MTU: 251:7 SCO MTU: 0:0 UP RUNNING RX bytes:473 acl:0 sco:0 events:39 errors:0 TX bytes:246 acl:0 sco:0 commands:39 errors:0
が、hciconfig hci0 up 実行すると、実行後1回のみ問題なく動作すようになりました。
但し、2回目実行すると前述のエラーが発生
atmark@armadillo:~$ sudo python3 switchbot_py3.py --scan Scanning for bluetooth low-energy devices Discovering Switchbot services * Found Switchbot service on device C3:83:4C:69:CB:E4 handle 22 Found 1 devices: ['C3:83:4C:69:CB:E4'] Enter the number of the device you want to control: 0 C3:83:4C:69:CB:E4 0 Connected! Command execution successful atmark@armadillo:~$ sudo python3 switchbot_py3.py --scan Scanning for bluetooth low-energy devices Discovering Switchbot services * Found Switchbot service on device C3:83:4C:69:CB:E4 handle 22 PyGattLib ERROR: connect error: Software caused connection abort (103) free(): double free detected in tcache 2 Aborted
hciconfig hci0 up 実行なしでは、起動後初回から成功する事はありませんでした。
上記現象は何度か確認致しましたが、再現性がありました。
↑↑↑↑↑↑↑↑ここまで昨晩↑↑↑↑↑↑↑↑
もう少し現象、条件等を絞り込む為
本日朝から確認作業を進めると、hciconfig hci0 up なくとも
初回だけでなく、何度繰り返しても問題なく動作しています。
ただ、違うのはコマンドは当初下記で動作させました。
sudo python3 switchbot_py3.py -d "C3:83:4C:69:CB:E4"
その後は、下記コマンドで何度繰り返しても問題ありません。
sudo python3 switchbot_py3.py --scan
対向デバイスの問題なのでしょうか?
可能性としてどういった事が考えられるでしょうか?
ご教授頂ければ幸いです。
at_shinya.koga
アットマークテクノの古賀です。
yabumotoさん(2021年6月8日 12時40分):
>当初より UP RUNNING 状態であった為、 hciconfig hci0 up の実行はしていませんでした。
>
>
>hci0: Type: Primary Bus: USB > BD Address: 45:62:8C:68:63:72 ACL MTU: 251:7 SCO MTU: 0:0 > UP RUNNING > RX bytes:473 acl:0 sco:0 events:39 errors:0 > TX bytes:246 acl:0 sco:0 commands:39 errors:0 >
>
>が、hciconfig hci0 up 実行すると、実行後1回のみ問題なく動作すようになりました。
>但し、2回目実行すると前述のエラーが発生
>
>atmark@armadillo:~$ sudo python3 switchbot_py3.py --scan >Scanning for bluetooth low-energy devices >Discovering Switchbot services > * Found Switchbot service on device C3:83:4C:69:CB:E4 handle 22 >Found 1 devices: ['C3:83:4C:69:CB:E4'] >Enter the number of the device you want to control: > 0 C3:83:4C:69:CB:E4 >0 >Connected! >Command execution successful >atmark@armadillo:~$ sudo python3 switchbot_py3.py --scan >Scanning for bluetooth low-energy devices >Discovering Switchbot services > * Found Switchbot service on device C3:83:4C:69:CB:E4 handle 22 >PyGattLib ERROR: connect error: Software caused connection abort (103) >free(): double free detected in tcache 2 >Aborted >
>
> hciconfig hci0 up 実行なしでは、起動後初回から成功する事はありませんでした。
>
>上記現象は何度か確認致しましたが、再現性がありました。
確認ですが、1回目の後、
$ sudo python3 switchbot_py3.py -d "C3:83:4C:69:CB:E4" -c
を実行して対向デバイスとの接続を切ってから、もう一度
$ sudo python3 switchbot_py3.py --scan
を実行すると、どうなるでしょうか?
>もう少し現象、条件等を絞り込む為
>本日朝から確認作業を進めると、hciconfig hci0 up なくとも
>
>初回だけでなく、何度繰り返しても問題なく動作しています。
>ただ、違うのはコマンドは当初下記で動作させました。
>
>sudo python3 switchbot_py3.py -d "C3:83:4C:69:CB:E4" >
>
>その後は、下記コマンドで何度繰り返しても問題ありません。
>
>sudo python3 switchbot_py3.py --scan >
>
>対向デバイスの問題なのでしょうか?
>
>可能性としてどういった事が考えられるでしょうか?
>ご教授頂ければ幸いです。
僕も要因が分かりませんが、一点確認です:
・switchbot_py3.py -d "C3:83:4C:69:CB:E4" の実行後、switchbot_py3.py --scan を何度実行してもエラーしないという状況は、Armadillo を電源オフ・オンしても変わらないでしょうか?
Armadillo を電源オフ・オンしても状況が変わらない場合は、bluez の中で対向デバイス情報を永続化しているのかも知れません。
switchbot_py3.py と、switchbot_py3.py が使っている pygattlib のソースや、 pygattlib の DiscoveryService クラスや GATTRequester クラスのソースを簡単に眺めてみましたが、状態が保存されるような仕組みがどこにあるのか、分かりませんでした。ごめんなさい。
https://github.com/OpenWonderLabs/python-host/blob/master/switchbot_py3…
https://github.com/oscaracena/pygattlib/blob/master/src/gattservices.cpp
https://github.com/oscaracena/pygattlib/blob/master/src/gattlib.cpp
https://github.com/pauloborges/bluez/blob/master/lib/hci.c
at_akihito.irie
2021年6月1日 10時05分
入江です。
おそらくArmadilloのメモリ不足ではないかと考えられます。
お手数おかけしますが、一度at-debian-builderを使用して、ATDE上でgattlib
がインストールされたdebianユーザーランドを作成することをお勧めします。
at-debian-builderの使用方法については以下のマニュアルをご覧ください。
https://manual.atmark-techno.com/armadillo-640/armadillo-640_product_ma…
at-debian-builderは以下からダウンロードできます。buster向けのものをお
使いください。
https://armadillo.atmark-techno.com/resources/software/armadillo-640/to…
aptでインストールできるパッケージは、
at-debian-builder/a600_resources/resources/packagesに記載することでイ
ンストールできます。
python3やpython3-pipなど、gattlibにインストールに必要なパッケージを全て
指定しておく必要があります。
pip3でインストールするものに関しましては、
at-debian-builder/a600_resources/resources/fixupにpip3 installコマンド
を追記してインストールしてください。
当方では、以下を追記することでgattlibがインストールされたdebianユーザー
ランドを作成できました。
不必要なパッケージも含まれているかもしれませんので、ご参考まで。
a600_resources/resources/fixup
a600_resources/resources/packages