AndroidBluetoothでbtsnoop.logを表示および分析する方法
How View Analyze Btsnoop
多くの人がBLEを実行する過程でこれらの問題に遭遇しました:
1)リモートデバイスから送信されたメッセージを受信しなかったのはなぜですか?
2)リモートデバイスから送信されたメッセージが、受信したメッセージと異なるのはなぜですか?
3)メッセージが公開されるのはなぜですか?
などなど。従来のlogd(汎用printf)に加えて、AndroidBluetoothに非常に重要なデバッグ方法がbtsnoop.logである理由を知りたい。
このログは、ホストとコントローラー間の通信の内容全体を記録し、Bluetoothプロトコルスタックの各層のメッセージ通信グラフを一覧表示します。このログはプロトコルスタック自体によって生成されるため、プロトコルスタックによって送受信されたメッセージのみが一覧表示されることに注意してください。 UARTドライバーのパケット損失による問題など、他の理由による場合は、他のログツールを使用して理由を見つける必要があります(uartスニファーなど)。
スヌープログはBluetoothで作成されたものではなく、SUNが発明したログ形式で、主にIEEE802のさまざまなログに適用されます。他のファイル、JPEG、MP3などと同様に、形式は固定されています。
興味のある学生は、以下のリンクにアクセスして、スヌープログの形式を確認できます。
http://www.fte.com/webhelp/FTS4BT/Content/Technical_Information/BT_Snoop_File_Format.htm
と同様
https://www.rfc-editor.org/rfc/pdfrfc/rfc1761.txt.pdf
おおまかに次のようになります。
スヌープログファイル自体の形式については詳しく説明しません。これらの形式を知っていると、実際にbtsnoopパーサーを自分で作成できますが、別のホイールを作成する必要はありません。
WiresharkとFTEキャプチャファイルビューアの両方を使用して、btsnoopログを表示できます。
Wiresharkソフトウェアは次のWebサイトからダウンロードできます。
https://www.wireshark.org/download.html
効果は次のとおりです。
または、BPA500のキャプチャファイルビューアソフトウェアをfteWebサイトからダウンロードして表示します。
http://www.fte.com/products/BPA500-download.aspx
効果は次のとおりです(最前線のビューアソフトウェアはもう少し直感的に見えます)。
btsnoopを開くときは、右下隅のファイル形式を開くオプションを* .log形式にする必要があることに注意してください。
すべての準備が完了しました。btsnoopログがAndroid携帯からどのように取得されるかについて話しましょう。まず、携帯電話の開発者モードをオンにし(開く方法がわからない場合は、検索エンジンを使用して検索できます。Androidのいくつかのバージョンで連続クリックが何回必要かを覚えています)、開くことを選択しますBluetoothHCIログ。たとえば、作者はサムスンギャラクシー携帯電話を使用しています:
この設定をオンにすると、通常の携帯電話はbtsnoopログを生成します。 ADBまたはファイルマネージャーに接続して、このファイルを検索できます。携帯電話の保管場所は、携帯電話のブランドやモデルによって異なります。
重要な質問は、このファイルの内容をどのように表示するかです。
まず、HCIの理論的知識を確認します。
HCIは厳密にはレイヤーの概念ではなく(L2CAPやRFCOMMなどと比較して)、ホストとコントローラー間のインターフェイスであり、これら2つのインターフェイス間で渡されるメッセージはHCIパケットと呼ばれることがあります。 HCIの「純粋な」データ形式は、データのフロー、つまりホストからコントローラーへ、またはその逆を定義しません。
ホストとコントローラーがメッセージを転送すると、各HCIパケットの前に、HCIデータのタイプを示すインジケーターが表示されるため、その方向を知ることができます。
ここでは、1〜4のデータ型についてのみ説明します。
HCIコマンドパケット:ホストはコントローラーに送信します。主にHCIコマンドですが、データではなくコマンドであることに注意してください。
HCIイベントパケット:コントローラーはそれをホストに送信します。コマンドパケットに対応します。
HCI ACLデータパケット:ホストはコントローラーに送信します。その逆も同様です。これは主にL2CAPによって送受信されるデータです。上層のすべてのデータ。このタイプを介して渡されるのはコマンドではなくデータであることに注意してください。
HCI同期データパケット:音声(SCO)データの送信に使用されます。 SCOデータは通常PCMインターフェースを介して送信されることに注意してください。
名前の設定、マシンのBluetoothアドレスの読み取りなどの一部のコマンドの場合、これらはすべてHCIコマンドパケットを介して実行されます。次に例を示します。
送受信される上位層のデータはすべて、ACLデータパケットタイプを介して行われます。次に例を示します。
したがって、スタック自体によって送信されたデータ(実際にはコントローラーに送信しようとしている)、アプリからスタックに送信したデータ、スタックによって受信されたデータ、およびスタックに送信されたデータを前後に知ることができます。アプリ。それらが一貫しているかどうか、および欠落があるかどうか。
上記の2つのソフトウェアは、HCI、L2CAP、ATT、GATTの各層のコマンドとデータを明確にリストしています。これは、問題がどこにあるかを確認するのにも非常に便利です。
同様に、HFやPBAPなどのAndroidBluetoothの他のプロファイルをデバッグすると非常に便利です。
もちろん、これには、ログを理解できるように、プロトコルスタックの各層の基本的な理解が必要です。