Armadilloフォーラム

Armadillo-640(Buster) に、gattlib がインストールできない

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

対策方法のご教授お願い致します。

コメント

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

cp /resources/hosts /etc/hosts
cp /resources/rc.local /etc/rc.local
cp /resources/interfaces /etc/network/interfaces
 
pip3 install gattlib ← 追記

a600_resources/resources/packages

#Bluetooth
bluez
 
# 以下追記
python3
python3-pip
python-dev
libbluetooth-dev
libboost-all-dev
libglib2.0
libboost-python-dev
libboost-thread-dev

入江様
ご対応ありがとうございます。

ご指示頂きました通り、ルートファイルシステムの再構築を行いました。
※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 

 再度ご指示頂いたパッケージをすべて追加して確認してみます。
 大変時間の掛かる作業につき、お気づきになった点、或いは留意点等ございましたら
 ご指摘頂ければ幸いです。

入江様
お世話になります。

ご教授頂いた手順で、「ルートファイルシステム」を再構築しましたが
インストール出来ていないようです。

上記「ルートファイルシステム」のイメージを更新し、
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'

原因を絞り込む為、出来ることございますでしょうか?
とりあえず、ログを取りながら再々構築中です。

以上、宜しくお願い致します。

入江様
お世話になっております。

申し訳ございません。
連絡に不足、間違いございました。
ご教授頂いた方法で問題ないようです。

packages に追加記述する。
libglib2.0 を、

#Base Libs
libglib2.0-0

で同じもの(互換性のある)がインストールされていると勘違いし、
追記しておりませんでした。別ものだったんですね。

libglib2.0 追記後、再構築中です。
中間ログを確認、gattlib のインストールを確認致しました。

お騒がせして申し訳ございませんでした。

入江様
お世話になっております。

ご教授頂いた手順にて、gattlib インストール済みの「ルートファイルシステム」が作成できました。
ありがとうございました。

ところが、イメージを更新し、WEB上では実績のあるコードを動作させると
以下のエラーが発生します。(致命的?)

原因を調査しているのですが解決に至っておりません。
お気づきの点等ございましたらアドバイス頂けませんでしょうか?

PyGattLib ERROR: connect error: Software caused connection abort (103)
free(): double free detected in tcache 2
Aborted

以上、何卒宜しくお願い致します。

at_akihito.irie

2021年6月7日 16時10分

入江です。

> ところが、イメージを更新し、WEB上では実績のあるコードを動作させると
> 以下のエラーが発生します。(致命的?)

「Web上では実績のあるコード」とは何でしょうか。
可能であれば紹介していただけますでしょうか。

以上、よろしくお願いいたします。

入江様
お世話になっております。

説明不足申し訳ございません。

上で動作させている「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

2021年6月7日 18時26分

入江です。

[armadillo]# hciconfig hci0 up

は実行していますでしょうか。
ご確認お願いします。

入江様
お世話になっております。

ご教授頂きありがとうございます。

当初より 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

2021年7月1日 6時41分

アットマークテクノの古賀です。

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