DJIマルチロータードローンの抽出、改造、再梱包のためのツール。
このプロジェクトは、Phantom-Licensecheckからのパーサーの代替実装として始まりました。時間が経つにつれて、多くの世代のDJI製品をサポートするために成長しました。これは、抽出だけでなく、以前に抽出したモジュールを単一のファイルに戻すことを可能にするツールで構成されています。また、特定のモジュールで使用して、コンテンツの変更を抽出および可能にするツールもあります。
ツールの使用可能な使用のいくつかを以下に示します。
ドローンの一部のコンポーネントを交換するには、キャリブレーションが必要になる場合があります。このツールは、一部のデバイスでキャリブレーションをトリガーすることができます。主にホールセンサーを備えたギンバルです。
また、それらを使用してドローンにカスタムパケットを送信することも可能です。この方法では、パケットがどのように見えるかを知っている限り、キャリブレーションやペアリングなどのファクトリー機能をトリガーします。
このプロジェクトのWikiには、各ドローン内のボードに関する多くの情報、および各ボードのコンポーネントがあります。この情報は、多くの愛好家と修理技術者によって作成および共有されています。
このツールは、DJIアシスタントソフトウェアのコマンドラインバージョンとして使用できます。これにより、このようなOEMソフトウェアがないプラットフォームや高度な機能がロックされている場所のパラメーターを変更できます。
DJIのフライトコントローラーは、動作に影響を与えるパラメーターのHunderdsを定義します。これらは、新しい値がFCファームウェアによって受け入れられている制限内である限り、ドローンにコマンドを送信するだけで変更できます。
このツールを使用すると、ファームウェアバイナリを変更してから、それらをFlashableファームウェアパッケージに再パッキングします。このようにして、以下を含む、ソフトウェア制御機能を変更できます。
Flash Modifiedファームウェアに追加の知識とソフトウェアの変更(つまり、ドローンのルート化)が必要になる場合があります。一部のファームウェアパッケージは、非対称暗号化を使用して署名され、プライベートキーはめったに利用できません。
DJIハードウェアとソフトウェアに興味がある場合は、学習を開始する場所です。あなたはできる:
そのような指示は提供されません。これらのツールは、膨大なハードウェアとソフトウェアの知識を持つエンジニア向けです。これらのツールで何かを達成するために何をしているかを知る必要があります。
これは、セキュリティメカニズムを無効にし、現地の法律を破ることを可能にするために、スクリプトの子供がツールを使用しないようにするためです。
ツールがどのように機能するかを理解できない場合は、それらを使用しないでください。警告が表示されている場合は、最終的なファームウェアが損傷しないようにする原因を調査する必要があります。あなたはあなた自身のリスクでツールを使用しています。
どこから始めればよいかわからない場合は、テストを確認してください。ドローンと通信したり、特定のファームウェアのすべてのレイヤーを抽出したりするコマンドラインを提供します(正しく配置できる限り)。
すべてのツールはソースコード形式で利用できるため、これらのツールがソースを調べて処理する構造とプロトコルの詳細を簡単に確認できます。ソースコードは、フォーマットドキュメントとしても機能することを目的としています。
より高いレベルでより多くのハードウェア関連情報については、プロジェクトWikiを確認してください。
ツールは2つのカテゴリに分類できます。
ハードウェアに依存しないツール - 使用するDJI製品を使用する必要がないもの。 DJIファームウェアパッケージやDATログファイルなど、使用する入力ファイルが必要です。
製品コミュニケーションツール - これらのツールを意味のある方法で使用するには、ドローンをPCに接続する必要があります。現在、ツールはシリアルインターフェイス(UART)とI2Cを使用しています。
特定のツールの下に要するに、説明します。パラメーターなしでそれらを実行すると、それぞれのサポートされているコマンドの詳細が提供されます。
各ツールのコマンドライン引数に関する詳細を取得するには、 --helpオプションでそれらを実行します。一部のツールには、ヘッダーに追加の発言があります。表示してみてください。
DJIファームウェアXV4コンテナツール。 xV4で始まるパッケージファイルからモジュールを抽出したり、ファームウェアモジュールをマージしてコンテナを作成したりできます。ファイルがxV4で始まる限り、最初にこのツールを使用して、DJIからダウンロードしたBINファイルを抽出します。
Phantom 3 ProのDJIファームウェアパッケージからモジュールを抽出する例:
./dji_xv4_fwcon.py -vv -x -p P3X_FW_V01.08.0080.bin
DJIファームウェアIMAHは無署名および復号化されたツール。 IM*Hで始まる.sigファイルからモジュールを復号化して、signモジュールを解読できます。このツールを使用して、ファームウェアパッケージから単一のモジュールを除外して、コンテンツを復号化します。選択したキーのプライベート部分が利用可能である限り、このツールはモジュールを再署名することもできます。
暗号化と認証に使用されるキーは、時間とともに変化していました。 IM*Hファイルがツールにいくつかのバージョンがあるキーを指すと、警告メッセージに可能なキーのリストが表示され、現在の操作の最新のキーを選択します。
Mavic Proの署名のないカメラファームウェアの例:
./dji_imah_fwsig.py -vv -k PRAK-2017-01 -k PUEK-2017-07 -u -i wm220_0101_v02.00.55.69_20161215.pro.fw.sig
Phantom 4 Pro V2の署名のないFCファームウェアの例:
./dji_imah_fwsig.py -vv -k PRAK-2017-01 -k PUEK-2017-07 -u -i wm335_0306_v03.03.04.10_20180429.pro.fw.sig
Mini 2の以前に署名されていないFCファームウェアに署名した例(プライベートパーツのPRAKが必要です):
./dji_imah_fwsig.py -vv -k PRAK-2019-09 -s -i wm161_0306_v03.04.09.74_20210112.pro.fw.sig
ツールの使用例、および特定のプラットフォームのキーの識別子の識別子については、テストに使用されるスクリプトをお読みください: tests/test_dji_imah_fwsig_rebin1.sh 。
DJI Mavic Flight ControllerファームウェアDecryptorツール。同じ期間にリリースされたいくつかのDJI製品から、フライトコントローラーファームウェアモジュールの2番目のレイヤー暗号化を削除します: Mavic Pro 、 Spark 、 Inspire 2 、およびPhantom 4 。 IM*H形式を受け入れません - 最初のレベルの暗号化が既に削除されている入力ファイルが必要です。
Mavic ProのFCファームウェアを復号化する例:
./dji_mvfc_fwpak.py dec -i wm220_0306_v03.02.40.11_20170918.pro.fw
Ambarella A7/A9ファームウェアパックツール。ファームウェアからパーティションを抽出したり、マージしたりすることができます。これを使用して、DJIコンテナが抽出された後に作成されたファイルからAmbarellaファームウェアを抽出します。 Ambarellaファームウェアは、ファイルの先頭にある多くの「Amba」文字列、または32枚のCharゼロパッド文字列によって認識できます。
Phantom 3 ProのAmbarellaファームウェアからパーティションを抽出する例:
./amba_fwpak.py -vv -x -m P3X_FW_V01.08.0080_m0100.bin
Ambarella A7/A9ファームウェアROMFSファイルシステムツール。 ROMFSファイルシステムファイルから単一のファイルを抽出するか、単一のファイルからファイルシステムを再構築できます。 Ambarellaファームウェアが抽出された後、これを使用してください。 0xff充填バイトのブロックに囲まれたファイルの開始近くのファイル名でROMFSパーティションを認識できます。
Phantom 3 ProのAmbarellaファームウェアからROMFSパーティションを抽出する例:
./amba_romfs.py -vv -x -p P3X_FW_V01.08.0080_m0100_part_rom_fw.a9s
AmbarellaファームウェアからUbifパーティションを取り付けるためのLinuxスクリプト。取り付け後、ファイルをコピーまたは変更できます。 Ambarellaファームウェアが抽出された後、これを使用してください。 UBIFを含むファイルは、ファイルの先頭でUBI#によって簡単に認識できます。
Phantom 3 ProのAmbarellaファームウェアからのルートファイルシステムパーティションの取り付けの例:
sudo ./amba_ubifs.sh P3X_FW_V01.08.0080_m0100_part_rfs.a9s
エルフヘッダーでバイナリ実行可能なアーム画像をラップするツール。ファームウェアに実行可能ファイルのバイナリ画像が含まれている場合、このツールはELFヘッダーを再構築できます。ほとんどのデバッガーがELFファイルを読み取ることができるため、ELF形式を簡単に分解できます。暗号化されたファームウェアでこのツールを使用しても、使用可能なELFは得られないことに注意してください。
Phantom 3のFCファームウェアをELFに変換する例:
./arm_bin2elf.py -vv -e -b 0x8020000 -l 0x6000000 -p P3X_FW_V01.07.0060_m0306.bin
上記のコマンドにより、ツールはコード( .text )とデータ( .data )セクションの境界線がどこにあるかを検出しようとします。この検出は、特にそれらの間に.ARM.exidxセクションがないバイナリにとっては完全ではありません。 .ARM.exidxバイナリに存在する場合、ツールは簡単に見つけてバイナリデータを適切に分割し、 .ARM.exidx .textと.dataの間のセパレーターとして扱います。
言い換えれば、 .ARM.exidxの位置は、 .textセクションの長さに影響し、 .dataセクションの開始オフセットに影響します。ファイルに.ARM.exidxセクションがない場合、サイズはゼロだけのセパレーターとして使用されます。分解を最初に見た後、 .textセクションと.dataセクションの間の正しい境界線がどこにあるかを確認するのは良いことです。この場所のメモリアドレスを使用して、より良いELFファイルを生成できます。
最初の外観後のELFへの追加の更新には、 .bssセクションの定義が含まれます。これらのセクションは、バイナリによって使用されている非初期化されたRAMおよびMMIOを表しています。チップのプログラミングガイドに従ってメモリマップアドレス範囲全体をカバーする1つの大きなセクションを定義するだけで魅力的ですが、ファイルを分解しながら、ファイルのナビゲートを難しくしながら、大きなメモリ使用量と関連する減速をもたらします。
すべてのセクションオフセットは、BINファイル内の位置ではなく、インメモリアドレスを使用して定義されることに注意してください。 Binファイル内のセクションの適切な場所が見つかった場合は、このツールのコマンドラインに挿入する前に、ファイル位置にベースアドレスを追加することを忘れないでください。
ベースアドレスは、特定のチップのプログラミングガイドによく見つけることができます。バイナリが追加のブートローダーによってロードされている場合、その場所からシフトされる場合があります。そのような場合、ブートローダーはドキュメントから場所を取得し、実際のファームウェアバイナリは少し高いベースアドレスにロードされます。
特定の企業の最適な例:
./arm_bin2elf.py -vv -e -b 0x8020000 --section .ARM.exidx@0x80A5D34:0 --section .bss@0x10000000:0x0A000 --section .bss2@0x20000000:0x30000 --section .bss3@0x40000000:0x30000 -p P3X_FW_V01.07.0060_m0306.bin
./arm_bin2elf.py -vv -e -b 0x000A000 --section .ARM.exidx@0x026E50:0 --section .bss@0x10000000:0x08000 --section .bss2@0x40000000:0x50000 --section .bss3@0xE0000000:0x10000 -p C1_FW_V01.06.0000_m1400.bin
./arm_bin2elf.py -vv -e -b 0x000A000 --section .ARM.exidx@0x0212E0:0 --section .bss@0x10000000:0x08000 --section .bss2@0x40000000:0x50000 --section .bss3@0xE0000000:0x10000 -p C1_FW_v01.09.0200_m1400.bin
./arm_bin2elf.py -vv -e -b 0x000A000 --section .ARM.exidx@0x0233E0:0 --section .bss@0x02000000:0x04000 --section .bss2@0x2008000:0x1000 --section .bss3@0x1C000000:0x2400 --section .bss4@0x1c024000:0x2400 --section .bss5@0x4002C000:0x50000 --section .bss6@0x400F8000:0x200 --section .bss7@0xE000E000:0x1200 -p C1_FW_V01.06.0000_m1401.bin
./arm_bin2elf.py -vv -e -b 0x8008000 --section .ARM.exidx@0x8015510:0 --section .bss@0x1FFFF700:0x05A00 --section .bss2@0x40000000:0x6700 --section .bss3@0x40010000:0x5500 --section .bss4@0x40020000:0x2200 --section .bss5@0x42200000:0x100 --section .bss6@0x42420000:0x500 -p P3X_FW_V01.08.0080_m0900.bin
./arm_bin2elf.py -vv -e -b 0x8008000 --section .ARM.exidx@0x801B6D0:0 --section .bss@0x1FFFF700:0x0C900 --section .bss2@0x40000000:0x6700 --section .bss3@0x40010000:0x5500 --section .bss4@0x40020000:0x7000 --section .bss5@0x50060800:0x100 -p P3X_FW_V01.11.0030_m0400.bin
./arm_bin2elf.py -vv -e -b 0x0420000 --section .ARM.exidx@0x4EDAF0:0 --section .bss@0x20400000:0x40000 --section .bss4@0x42200000:0x100 -p MATRICE600_FW_V02.00.00.21_m0306.bin
./arm_bin2elf.py -vv -e -b 0x0420000 --section .ARM.exidx@0x4F0E00:0 --section .bss@0x20400000:0x60100 --section .bss2@0x400E0000:0x2000 -p wm330_0306_v03.01.10.93_20160707.fw_0306.decrypted.bin
./arm_bin2elf.py -vv -e -b 0x0420000 --section .ARM.exidx@0x5277d0:0 --section .bss@0x20400000:0x60000 --section .bss2@0x400E0000:0x1000 --section .bss3@0xE0000000:0x10000 -p wm100_0306_v03.02.43.20_20170920.pro.fw_0306.decrypted.bin
./arm_bin2elf.py -vv -e -b 0x0420000 --section .ARM.exidx@0x5465d8:0 --section .bss@0x20400000:0x60100 --section .bss2@0x400E0000:0x2000 -p wm220_0306_v03.02.35.05_20170525.pro.fw_0306.decrypted.bin
./arm_bin2elf.py -vv -e -b 0x7D000000 --section .ARM.exidx@0x7D0356E0:0 --section .bss@0x7D04f380:0x3800 --section .bss2@0x7D0f1900:0x200 -p wm230_0801_v10.00.07.12_20180126-recovery.img.TZOS.bin
./arm_bin2elf.py -vv -e -b 0xFFFC0000 --section .ARM.exidx@0xFFFDA540:0x20 --section .bss@0xFFFE14D0:0x42B0 --section .bss1@0x0202000:0x20 --section .bss2@0x0402020:0x20 --section .bss3@0x0B00000:0x40 --section .bss4@0x2700000:0x40 --section .bss5@0x9000000:0x20 --section .bss6@0xF0440000:0x4500 --section .bss7@0xF0501200:0x200 --section .bss8@0xF0A09000:0x20 --section .bss9@0xF0A40000:0x1200 --section .bss10@0xF0A4D000:0x2100 --section .bss11@0xF0A61000:0x1200 --section .bss12@0xF0A72000:0x20 --section .bss13@0xF0D02000:0x20 --section .bss14@0xF0D04000:0x20 --section .bss15@0xF0E00A00:0xC0 --section .bss16@0xF0E08000:0x20 --section .bss17@0xF5001000:0x40 --section .bss18@0xF6409000:0x100 --section .bss19@0xF6800000:0x1200 --section .bss20@0xFA800000:0x100 --section .bss21@0xFAF01000:0x3500 --section .bss22@0xFB001000:0x2900 --section .bss23@0xFCC01000:0x2400 --section .bss24@0xFD001000:0x2D00 --section .bss25@0xFD400000:0x20 --section .bss26@0xFD501000:0x2400 --section .bss27@0xFF001000:0x1100 -p wm230_0801_v10.00.07.12_20180126.pro.fw_0801.bootarea_p0_BLLK.bin
このツールは、ビンへの方向の変換のみをサポートします。 ELFファイルをBinに戻すには(つまり、変更後)、特定のアーキテクチャにobjcopyユーティリティを使用します。 objcopyツールは、GNUバイナリユーティリティ( binutils )の一部であり、このリポジトリの一部ではありません。
例:
arm-none-eabi-objcopy -O binary P3X_FW_V01.07.0060_m0100_part_sys.elf P3X_FW_V01.07.0060_m0100_part_sys.bin
arm-none-eabi-objcopy -O binary P3X_FW_V01.07.0060_m0900.elf P3X_FW_V01.07.0060_m0900.bin
Ambarella A7/A9ファームウェア「システムソフトウェア」パーティションコンバーター。パーティションには、実行可能ファイルのバイナリイメージが含まれており、このツールはELFヘッダーでラップします。ほとんどのデバッガーがELFファイルを読み取ることができるため、ELF形式を簡単に分解できます。このツールはarm_bin2elf.pyに非常に似ており、特定のファームウェアに事前に構成されています。
例: ./amba_sys2elf.py -vv -e -l 0x6000000 -p P3X_FW_V01.08.0080_m0100_part_sys.a9s
arm_bin2elf.pyについて説明されているすべての境界調整ルールもこのツールに適用されます。
特定の企業の最適な例:
./amba_sys2elf.py -vv -e -l 0x6000000 --section .ARM.exidx@0xEA83E4C:0 -p P3X_FW_V01.08.0080_m0100_part_sys.a9s
./amba_sys2elf.py -vv -e -l 0x6000000 --section .ARM.exidx@0xEA82EC0:0 -p P3X_FW_V01.07.0060_m0100_part_sys.a9s
./amba_sys2elf.py -vv -e -l 0x6000000 --section .ARM.exidx@0xEA64774:0 -p P3X_FW_V01.01.0008_m0100_part_sys.a9s
Ambarella A7/A9ファームウェア「システムソフトウェア」パーティションハードコーディング値エディター。
このツールは、ELFに変換されたAmbarellaファームウェアSysパーティションを解析できます。バイナリデータに特定のハードコーディング値が見つかり、それらをエクスポートまたはインポートできます。エクスポートされたJSONファイルのsetValue要素のみが本当に変更可能であり、他のすべてのデータは単なる情報的です。
ハードコーディングされた値をJSONファイルにエクスポートする例:
./amba_sys_hardcoder.py -vv -x --elffile P3X_FW_V01.08.0080_m0100_part_sys.elf
JSONファイルからELFに戻る値をインポートする例:
./amba_sys_hardcoder.py -vv -u --elffile P3X_FW_V01.08.0080_m0100_part_sys.elf
DJI DM3XX Davinci Encode_USBバイナリハードコーディング値エディター。
このツールは、Ti DM3xx DavinciメディアプロセッサのDJIファームウェアモジュールからのEncode_USB ELFファイルを解析できます。バイナリデータに特定のハードコーディング値が見つかり、それらをエクスポートまたはインポートできます。
ハードコーディングされた値をJSONファイルにエクスポートする例:
./dm3xx_encode_usb_hardcoder.py -vv -x --elffile P3X_FW_V01.07.0060_m0800-encode_usb.elf
JSONファイルからELFに戻る値をインポートする例:
./dm3xx_encode_usb_hardcoder.py -vv -u --elffile P3X_FW_V01.07.0060_m0800-encode_usb.elf
DJI LightBridge STM32 Micro-Controllerバイナリハードコーディング値エディター。
このツールは、ELFに変換されたLightbridge MCUファームウェアを解析できます。バイナリデータに特定のハードコーディング値が見つかり、それらをエクスポートまたはインポートできます。
ハードコーディングされた値をJSONファイルにエクスポートする例:
./lightbridge_stm32_hardcoder.py -vv -x --elffile P3X_FW_V01.07.0060_m0900.elf
JSONファイルからELFに戻る値をインポートする例:
./lightbridge_stm32_hardcoder.py -vv -u --elffile P3X_FW_V01.07.0060_m0900.elf
DJIフライトコントローラーファームウェアバイナリハードコーディング値エディター。
このツールは、ELFに変換されたフライトコントローラーファームウェアを解析できます。バイナリデータに特定のハードコーディング値が見つかり、それらをエクスポートまたはインポートできます。
ハードコーディングされた値をJSONファイルにエクスポートする例:
./dji_flyc_hardcoder.py -vvv -x -e P3X_FW_V01.07.0060_m0306.elf
JSONファイルからELFに戻る値をインポートする例:
./dji_flyc_hardcoder.py -vvv -u -e P3X_FW_V01.07.0060_m0306.elf
Flight Controllerファームウェアパラメータアレイエディターは、ファームウェアバイナリ内のフライトパラメーターの配列を見つけ、JSON形式のテキストファイルにパラメーターを抽出できます。このファイルは簡単に変更でき、各パラメーターの属性と制限を変更するバイナリファームウェアの更新に使用できます。
パラメーター配列を見つけるために、バイナリファイルをマイクロコントローラーのRAMにロードするために使用されるツールが必要です。使用するベースアドレスがわからない場合は、使用される特定のチップのプログラミングガイドが手がかりを与える場合があります。
フライトコントローラーパラメーターを抽出してから更新する例:
./dji_flyc_param_ed.py -vv -x -m P3X_FW_V01.07.0060_m0306.bin
./dji_flyc_param_ed.py -vv -u -m P3X_FW_V01.07.0060_m0306.bin
他の製品のためのその他の例:
./dji_flyc_param_ed.py -vv -x -b 0x420000 -m A3_FW_V01.02.00.00_m0306.bin
./dji_flyc_param_ed.py -vv -x -b 0x420000 -m MATRICE600_FW_V02.00.00.21_m0306.bin
./dji_flyc_param_ed.py -vv -x -b 0x420000 -m MATRICE600PRO_FW_V01.00.00.80_m0306.bin
./dji_flyc_param_ed.py -vv -x -b 0x420000 -m wm220_0306_v03.02.35.05_20170525.pro.bin
./dji_flyc_param_ed.py -vv -x -b 0x0000 -m wm230_0306_v01.00.02.255_20170213.bin
PCAP出力形式を備えたDJI Universal PacketコンテナストリームPareser。
スクリプトは、生のダムストリーム(つまり、フライトログファイルがFLY???.DAT )を解析し、PCAPヘッダーでシングルパケットをラップします。データが渡される前にパケットCRCがチェックされます。その後、PCAP形式のサポートを使用したツールを使用して、データを分析できます(つまり、Wireshark)。
フライトログファイルの変換の例:
./comm_dat2pcap.py -vv -d FLY002.DAT
DUMLパケット化器とPCAP出力形式を備えたDJIシリアルバススニファー。
このスクリプトは、2つのUARTからのデータをキャプチャし、PCAPヘッダーで単一のDUMLパケットをラップします。データがPCAPファイルまたはFIFOパイプに渡される前に、パケットCRCがチェックされます。その後、PCAP形式のサポートを使用したツールを使用して、データを分析できます(つまり、Wireshark)。
ユーティリティには、ドローン内のRXラインとTXラインに接続されたRXラインを含む2つのシリアルインターフェイスが必要です。
2つのUARTからTTL(別名FTDI)コンバーターからキャプチャを開始する例:
./comm_serial2pcap.py -b 115200 -F /tmp/wsf /dev/ttyUSB0 /dev/ttyUSB1
HEX文字列出力を備えたDUMLパケットビルダー。
このツールは、指定されたヘッダーフィールドとペイロードを含む適切なDUMLパケットを構築できます。パケットは16進形式で出力されます。既知のコマンドのリストと予想されるペイロードの外観は、以下に説明するWireshark解剖学に記載されています。
スパークカメラモジュールにセンサーIDを尋ねるためにパケットを生成する例:
./comm_mkdupc.py --receiver_type=Camera --seq_num=65280 --ack_type=ACK_After_Exec --cmd_set=Camera --cmd_id=181
パケットをDJI製品に送信し、応答を受信するDumlビルダー。
このツールは、指定されたヘッダーフィールドとペイロードを含む適切なDUMLパケットを構築します。次に、指定されたシリアルポートを介して送信し、応答を待ちます。それはそれを受け取ったときに戻ってきたパケットを示しています。
一部のドローンで見つけることができるdji_mb_ctrlバイナリに代わるものと見なすことができます。ただし、これら2つのツール間でパラメーター名は異なります。
フライトコントローラーにハードウェアおよびファームウェアバージョンデータを求める例(PH3でテスト):
./comm_serialtalk.py --port /dev/ttyUSB0 -vv --timeout=5000 --receiver_type=FlyController --seq_num=65280 --ack_type=No_ACK_Needed --cmd_set=General --cmd_id=1
フライトコントローラーにハードウェアおよびファームウェアバージョンデータを求める例(Mavic 3):
./comm_serialtalk.py --bulk -vv --timeout=5000 --receiver_type=FlyController --seq_num=65280 --ack_type=ACK_After_Exec --cmd_set=General --cmd_id=1
DJI製品用のOGSサービスツール。
スクリプトでは、DJIドローンのいくつかのサービス関数をトリガーできます。 comm_serialtalk.pyのようなドローンに話しかけますが、いくつかの重要な機能のためのより簡単なインターフェイスを提供します。
PH3プロからCSV形式のフライトコントローラーパラメータ200-300のリストの例:
./comm_og_service_tool.py --port /dev/ttyUSB0 P3X FlycParam list --start=200 --count=100 --fmt=csv
Sparkでフライトコントローラーパラメーターの価値を取得する例:
./comm_og_service_tool.py --port /dev/ttyUSB0 -vv SPARK FlycParam get g_config.flying_limit.max_height_0 --fmt=2line
Sparkのフライトコントローラーパラメータの設定値の例:
./comm_og_service_tool.py --port /dev/ttyUSB0 -vv SPARK FlycParam set g_config.flying_limit.max_height_0 500
Spark Gimbalの「ジョイントコース」キャリブレーションを実行する例:
./comm_og_service_tool.py --port /dev/ttyUSB0 -vv SPARK GimbalCalib JointCoarse
Windowsホストを使用して、Spark Gimbalのサービス「Linear Hall」のキャリブレーションを実行する例:
python3 comm_og_service_tool.py --port COM23 -vv SPARK GimbalCalib LinearHall
Mavic 3 Pro-to CSV形式のフライトコントローラーパラメータ200-300をリストする例:
./comm_og_service_tool.py --bulk MAV3 FlycParam list --start=200 --count=100 --fmt=csv
スマートバッテリーシステム通信ツール。
このツールは、スマートバッテリーデータの仕様に基づいて設計されたチップと対話できます。また、BQシリーズガスゲージチップでテキサスインストゥルメントによって実装された仕様のいくつかの拡張機能もサポートしています。
このツールを使用するには、SBS互換チップのSMBUSライン(SDA、SCL、GND)への接続が必要です。 SMBUS通信はI2Cをベースとして使用するため、I2Cバスを備えたほとんどのデバイスを使用して通信を確立できます。
I2Cインターフェイスを使用して、BatteryStatus()の単純な読み取りの例(スクリプトは内部的にSMBUSメッセージを構築します):
./comm_sbs_bqctrl.py -vvv --bus "i2c:1" --dev_address 0x0b read BatteryStatus
SMBUSインターフェイスを使用して、BQ30Z55からBQ30Z55のいくつかのフラグフィールドを読み取ります。
./comm_sbs_bqctrl.py -v --bus "smbus:1" --dev_address 0x0b --chip BQ30z55 --short monitor BQStatusBitsMA
デフォルトのSHA-1キーを使用して、OSが利用できる2番目のバスデバイスでI2Cインターフェイスを使用して、デフォルトのsha-1キーを使用して、salle bq30z55(書き込み機能を有効にする)の例:
./comm_sbs_bqctrl.py -v --bus "i2c:2" --dev_address 0x0b --chip BQ30z55 --short sealing Unseal
testsフォルダーには、ツールがジョブを正しく行うかどうかを確認するために使用できるスクリプトのコレクションが含まれています。そこには2つの一般的なタイプがあります。
コミュニケーションツールのテスト、マークされたcomm 。これらは、通常実際のデバイスと話すスクリプト用です。テストは、予想される回答を注入してバッファを受信しているため、製品を接続せずに実行できます。
fw_xv4 、 fw_imah_v1 、 fw_imah_v2とマークされたファームウェア抽出ツールテスト。これらは、 fw_packagesディレクトリにあるファームウェアを抽出して再パックし、結果のファイルを元のファイルと比較して、意図しない変更が導入されていないかどうかを確認します。
変更のテストに加えて、ツールの使用例のソースとしてテストを使用することもできます。特定のファームウェアを抽出し、製品の特定のコマンドを実行するために使用されるコマンドラインを記録します。
テストは、 pytestで使用するように準備されています。すべてのテストを実行する例:
pytest tests -rsx --full-scope --log-cli-level=INFO
--full-scopeオプションは、継続的な統合に使用される選択では、すべての既知のバイナリでテストを実行します。 CIテストは、自動テストが妥当な時間で終了することを確認するために選択的です。
テストは、 fw_packagesフォルダーの適切なサブフォルダーに配置されたバイナリでのみ実行されることを覚えておいてください。サブフォルダーの有効な名前は、テストスクリプト内で簡単に見つけることができます。ファームウェアバイナリがフォルダーに入れられない場合、すべてのファームウェア抽出テストがスキップされます。
すべてのテストを実行することに加えて、特定のテスト( -kを使用して)または特定のマーキング( -mを使用)を使用したテストのグループを実行することもできます。 fw_xv4テストのみの実行の例のみ:
pytest tests -rsx --full-scope -m fw_xv4 --log-cli-level=DEBUG
このフォルダーには、DJIドローンインターフェイスでの通信を分析するためのWireshark分離器が含まれています。
ツールのドキュメントはフォルダーに含まれています。
特定のバージョンの一部の特定のファームウェアモジュールの場合、「シンボル」ディレクトリで利用可能な部分的なシンボルがあります。シンボルは2つの形式です。
シンボルは、ビンでは直接ではなく、上記のツールで生成されたELFファイルと一致します。前のセクションで提供されている例のコマンドを使用して、シンボルに一致するコンテンツを持つELFファイルを生成します。
シンボルが使用されていないファームウェアバージョンで作業する場合、命名の参照用のシンボルを備えたバージョンを使用することをお勧めします。
参照シンボルに最適なFWバージョンを探している場合、またはFWバージョンをまったく気にせず、最も完全なシンボルを必要とする場合は、マップファイルのサイズを確認してください。マップファイルには主に手動で名前が付けられたシンボルが含まれているため、最大のファイルは、より多くの反転作業が行われたファームウェアバージョン用です。