Alat untuk mengekstraksi, modding, dan pengemasan ulang firmware dari drone multirotor DJI.
Proyek ini dimulai sebagai implementasi alternatif parser dari Phantom-Licensecheck. Seiring waktu telah berkembang untuk mendukung banyak generasi produk DJI. Ini terdiri dari alat yang memungkinkan tidak hanya ekstraksi, tetapi juga pengemasan ulang modul yang diekstraksi sebelumnya ke dalam satu file. Ada juga alat yang seharusnya digunakan pada modul spesifik untuk mengekstrak dan memungkinkan modifikasi kontennya.
Berikut adalah beberapa kemungkinan penggunaan alat.
Mengganti beberapa komponen drone mungkin memerlukan kalibrasi. Alat -alat tersebut mampu memicu kalibrasi di beberapa perangkat, sebagian besar gimbal dengan sensor Hall.
Dimungkinkan juga untuk menggunakannya untuk mengirim paket khusus apa pun ke drone, dan dengan cara ini memicu fungsi pabrik seperti kalibrasi atau pemasangan - selama Anda tahu bagaimana paket itu seharusnya.
Wiki proyek ini memiliki banyak informasi tentang papan dalam setiap drone, dan komponen di setiap papan. Info ini dibuat dan dibagikan oleh banyak penggemar dan teknisi perbaikan.
Alat dapat digunakan sebagai versi baris perintah dari perangkat lunak asisten DJI, yang juga memungkinkan untuk mengubah parameter untuk platform yang tidak memiliki perangkat lunak OEM seperti itu atau di mana ia memiliki fungsi canggih terkunci.
Pengendali Penerbangan dari DJI mendefinisikan Hunderds of Parameters yang mempengaruhi perilaku mereka. Ini dapat dimodifikasi dengan hanya mengirim perintah ke drone, selama nilai baru berada dalam batas yang diterima oleh firmware FC.
Alat ini memungkinkan memodifikasi biner firmware, dan kemudian mengemasnya kembali ke paket firmware flashable. Dengan cara ini, fungsionalitas yang dikendalikan oleh perangkat lunak apa pun dapat diubah, termasuk:
Kadang -kadang mungkin memerlukan pengetahuan tambahan dan modifikasi perangkat lunak (mis. Rooting drone) untuk mem -flash firmware yang dimodifikasi - beberapa paket firmware ditandatangani menggunakan kriptografi asimetris, dan kunci pribadi jarang tersedia.
Jika Anda tertarik dengan perangkat keras dan perangkat lunak DJI, ini adalah tempat untuk mulai belajar. Anda bisa:
Instruksi seperti itu tidak akan disediakan. Alat -alat ini untuk insinyur dengan pengetahuan perangkat keras dan perangkat lunak yang luas. Anda perlu tahu apa yang Anda lakukan untuk mencapai apa pun dengan alat -alat ini.
Ini untuk memastikan alat -alat itu tidak akan digunakan oleh anak -anak skrip untuk menonaktifkan mekanisme keamanan dan untuk memungkinkan melanggar hukum setempat.
Jika Anda tidak dapat memahami cara kerja alat, Anda tidak boleh menggunakannya. Jika ada peringatan yang ditampilkan, Anda harus menyelidiki penyebabnya untuk memastikan firmware akhir tidak akan rusak. Anda menggunakan alat dengan risiko Anda sendiri.
Jika Anda tidak tahu harus mulai dari mana, periksa tesnya. Mereka akan memberi Anda baris perintah untuk berkomunikasi ke drone, atau untuk mengekstrak semua lapisan firmware tertentu (selama Anda dapat menempatkannya dengan benar).
Karena semua alat tersedia dalam bentuk kode sumber, mudah untuk memeriksa detail pada struktur dan protokol yang diproses oleh alat -alat ini dengan melihat sumbernya. Kode sumber dimaksudkan untuk juga bertindak sebagai dokumentasi format.
Untuk tingkat yang lebih tinggi dan lebih banyak info terkait perangkat keras, periksa wiki proyek.
Alat dapat dibagi menjadi dua kategori:
Alat Perangkat Keras -Independen - Yang Anda tidak perlu memiliki produk DJI untuk digunakan. Anda hanya memerlukan file input yang mereka gunakan, seperti paket firmware DJI atau file log DAT.
Alat Komunikasi Produk - Anda perlu menghubungkan drone Anda ke PC untuk menggunakan alat ini dengan cara yang bermakna. Saat ini alat menggunakan antarmuka serial (UART) dan I2C.
Di bawah alat spesifik dijelaskan secara singkat. Menjalankannya tanpa parameter akan memberi Anda detail tentang perintah yang didukung di masing -masing.
Untuk mendapatkan spesifik tentang argumen baris perintah dari masing -masing alat, jalankan dengan opsi --help . Beberapa alat juga memiliki komentar tambahan di header mereka - cobalah melihatnya.
Alat Kontainer Firmware XV4 DJI; Mengizinkan mengekstraksi modul dari file paket yang dimulai dengan xV4 , atau membuat wadah dengan menggabungkan modul firmware. Gunakan alat ini terlebih dahulu, untuk mengekstrak file bin yang diunduh dari DJI, selama file dimulai dengan xV4 .
Contoh Modul Ekstraksi dari Paket Firmware DJI untuk Phantom 3 Pro :
./dji_xv4_fwcon.py -vv -x -p P3X_FW_V01.08.0080.bin
Firmware DJI Imah un-penandatangan dan alat dekriptor; memungkinkan untuk mendekripsi dan tidak menandatangani modul dari file .sig yang dimulai dengan IM*H . Gunakan alat ini setelah membuka modul tunggal dari paket firmware, untuk mendekripsi kontennya. Alat ini juga dapat menandatangani ulang modul, selama bagian pribadi dari kunci yang dipilih tersedia.
Kunci yang digunakan untuk enkripsi dan otentikasi berubah dari waktu ke waktu; Ketika file IM*H mengacu pada kunci yang alat ini memiliki beberapa versi, itu akan menampilkan daftar kunci yang mungkin dalam pesan peringatan, dan pilih kunci terbaru untuk operasi saat ini.
Contoh firmware kamera yang tidak menandatangani untuk 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
Contoh firmware FC yang tidak menandatangani untuk Phantom 4 Pro V2 :
./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
Contoh penandatanganan firmware FC yang sebelumnya tidak ditandatangani untuk Mini 2 (membutuhkan PRAK dengan bagian pribadi):
./dji_imah_fwsig.py -vv -k PRAK-2019-09 -s -i wm161_0306_v03.04.09.74_20210112.pro.fw.sig
Untuk lebih banyak contoh penggunaan alat, serta pengidentifikasi kunci untuk platform tertentu, baca skrip yang digunakan untuk menguji: tests/test_dji_imah_fwsig_rebin1.sh .
Alat dekriptor firmware firmware DJI Mavic; Menghapus enkripsi lapisan kedua dalam modul firmware pengontrol penerbangan dari beberapa produk DJI yang dirilis sekitar periode yang sama: Mavic Pro , Spark , Inspire 2 dan Phantom 4 . Tidak menerima format IM*H - memerlukan file input dengan enkripsi level pertama yang sudah dihapus.
Contoh dekripting firmware FC untuk Mavic Pro :
./dji_mvfc_fwpak.py dec -i wm220_0306_v03.02.40.11_20170918.pro.fw
Alat Paket Firmware Ambarella A7/A9; Mengizinkan mengekstraksi partisi dari firmware, atau menggabungkannya kembali. Gunakan ini untuk mengekstrak firmware Ambarella dari file yang dibuat setelah wadah DJI diekstraksi. Anda dapat mengenali firmware Ambarella dengan banyak string "Amba" di dalam, atau dengan string nol-empuk 32-char di awal file.
Contoh Partisi Mengekstraksi dari Firmware Ambarella untuk Phantom 3 Pro :
./amba_fwpak.py -vv -x -m P3X_FW_V01.08.0080_m0100.bin
Alat sistem file romfs firmware Ambarella A7/A9; Mengizinkan mengekstraksi file tunggal dari file sistem file ROMFS, atau membangun kembali sistem file dari file tunggal. Gunakan ini setelah firmware Ambarella diekstraksi. Anda dapat mengenali partisi ROMS dengan nama file di dekat awal file, dikelilingi oleh blok byte yang diisi 0xff.
Contoh Ekstraksi Partisi ROMFS dari Firmware Ambarella untuk Phantom 3 Pro :
./amba_romfs.py -vv -x -p P3X_FW_V01.08.0080_m0100_part_rom_fw.a9s
Linux Script untuk Memasang Partisi Ubifs dari Firmware Ambarella. Setelah pemasangan, file dapat disalin atau dimodifikasi. Gunakan ini setelah firmware Ambarella diekstraksi. File yang berisi UBIF dapat dengan mudah dikenali oleh UBI# di awal file.
Contoh pemasangan partisi sistem file root dari firmware Ambarella untuk Phantom 3 Pro :
sudo ./amba_ubifs.sh P3X_FW_V01.08.0080_m0100_part_rfs.a9s
Alat yang membungkus gambar lengan yang dapat dieksekusi biner dengan header elf. Jika firmware berisi gambar biner dari file yang dapat dieksekusi, alat ini dapat membangun kembali header ELF untuk itu. Format ELF dapat dengan mudah dibongkar, karena sebagian besar debugger dapat membaca file ELF. Perhatikan bahwa menggunakan alat ini pada firmwares terenkripsi tidak akan menghasilkan ELF yang dapat digunakan.
Contoh Konversi Firmware FC untuk Phantom 3 ke Elf:
./arm_bin2elf.py -vv -e -b 0x8020000 -l 0x6000000 -p P3X_FW_V01.07.0060_m0306.bin
Perintah di atas akan menyebabkan alat untuk mencoba dan mendeteksi di mana perbatasan antara kode ( .text ) dan bagian data ( .data ) seharusnya. Deteksi ini tidak sempurna, terutama untuk binari tanpa .ARM.exidx bagian di antara mereka. Jika .ARM.exidx ada dalam biner, alat ini dapat dengan mudah menemukannya dan membagi data biner dengan benar, memperlakukan .ARM.exidx sebagai pemisah antara .text dan .data .
Dengan kata lain, posisi .ARM.exidx mempengaruhi panjang bagian .text , dan mulai offset bagian .data . Jika tidak ada bagian .ARM.exidx dalam file, itu masih akan digunakan sebagai pemisah, hanya dengan ukuran nol. Setelah pertama -tama lihat pembongkaran, ada baiknya memeriksa di mana batas yang benar antara .text dan bagian .data berada. Alamat memori lokasi ini dapat digunakan untuk menghasilkan file elf yang lebih baik.
Pembaruan tambahan untuk ELF setelah tampilan pertama dapat mencakup mendefinisikan bagian .bss . Bagian -bagian ini mewakili RAM dan MMIO yang tidak diinisialisasi yang digunakan oleh biner. Sangat menggoda untuk hanya mendefinisikan satu bagian besar yang mencakup rentang alamat peta memori utuh sesuai dengan panduan pemrograman chip, tetapi itu menghasilkan penggunaan memori yang sangat besar dan perlambatan terkait sambil membongkar file, sementara juga membuat file lebih sulit dinavigasi.
Perhatikan bahwa semua offset bagian didefinisikan menggunakan alamat dalam memori, bukan posisi dalam file bin. Jika Anda telah menemukan lokasi yang tepat dari bagian dalam file bin, ingatlah untuk menambahkan alamat basis ke posisi file sebelum memasukkan ke baris perintah alat ini.
Alamat dasar dapat sering ditemukan dalam panduan pemrograman chip spesifik; Kadang -kadang dapat digeser dari lokasi itu, jika biner dimuat oleh bootloader tambahan. Dalam kasus seperti itu bootloader mengambil lokasi dari dokumentasi, dan biner firmware yang sebenarnya dimuat pada alamat dasar yang sedikit lebih tinggi.
Contoh yang dioptimalkan untuk firmwares tertentu:
./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
Alat ini hanya mendukung konversi ke arah bin-ke-elf. Untuk mengonversi file ELF kembali ke bin (mis. Setelah modifikasi), gunakan utilitas objcopy untuk arsitektur spesifik. Alat objcopy adalah bagian dari utilitas biner GNU ( binutils ) dan bukan bagian dari repositori ini.
Contoh:
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 Firmware "Software Software" Partisi Konverter. Partisi berisi gambar biner dari file yang dapat dieksekusi, dan alat ini membungkusnya dengan header ELF. Format ELF dapat dengan mudah dibongkar, karena sebagian besar debugger dapat membaca file ELF. Alat ini sangat mirip dengan arm_bin2elf.py , ini hanya dikonfigurasi sebelumnya dengan firmware tertentu.
Contoh: ./amba_sys2elf.py -vv -e -l 0x6000000 -p P3X_FW_V01.08.0080_m0100_part_sys.a9s
Semua aturan penyesuaian perbatasan dijelaskan untuk arm_bin2elf.py berlaku untuk alat ini juga.
Contoh yang dioptimalkan untuk firmwares tertentu:
./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 Firmware "Software Software" Partition Hard-Coded Values Editor.
Alat ini dapat mengurai partisi firmware Ambarella yang dikonversi menjadi ELF. Ia menemukan nilai-nilai berkode keras tertentu dalam data biner, dan memungkinkan mengekspor atau mengimpornya. Hanya elemen setValue dalam file JSON yang diekspor benar -benar dapat diubah, semua data lain hanyalah informasi.
Contoh Mengekspor Nilai Kode Keras ke File JSON:
./amba_sys_hardcoder.py -vv -x --elffile P3X_FW_V01.08.0080_m0100_part_sys.elf
Contoh Mengimpor Nilai Dari File JSON Kembali ke Elf:
./amba_sys_hardcoder.py -vv -u --elffile P3X_FW_V01.08.0080_m0100_part_sys.elf
DJI DM3XX DAVINTI ENCODE_USB Editor Nilai Binary Hard-Code.
Alat ini dapat menguraikan file elf encode_usb dari modul firmware DJI untuk prosesor media Ti DM3XX DAVinci. Ia menemukan nilai-nilai berkode keras tertentu dalam data biner, dan memungkinkan mengekspor atau mengimpornya.
Contoh Mengekspor Nilai Kode Keras ke File JSON:
./dm3xx_encode_usb_hardcoder.py -vv -x --elffile P3X_FW_V01.07.0060_m0800-encode_usb.elf
Contoh Mengimpor Nilai Dari File JSON Kembali ke Elf:
./dm3xx_encode_usb_hardcoder.py -vv -u --elffile P3X_FW_V01.07.0060_m0800-encode_usb.elf
DJI LIGHTBRIDGE STM32 Editor Nilai Binary-Controller Biner Binary.
Alat ini dapat mengurai firmware Lightbridge MCU yang dikonversi menjadi ELF. Ia menemukan nilai-nilai berkode keras tertentu dalam data biner, dan memungkinkan mengekspor atau mengimpornya.
Contoh Mengekspor Nilai Kode Keras ke File JSON:
./lightbridge_stm32_hardcoder.py -vv -x --elffile P3X_FW_V01.07.0060_m0900.elf
Contoh Mengimpor Nilai Dari File JSON Kembali ke Elf:
./lightbridge_stm32_hardcoder.py -vv -u --elffile P3X_FW_V01.07.0060_m0900.elf
DJI Firmware Firmware Biner Binary Hard-Code Values Editor.
Alat ini dapat mengurai firmware pengontrol penerbangan yang dikonversi ke ELF. Ia menemukan nilai-nilai berkode keras tertentu dalam data biner, dan memungkinkan mengekspor atau mengimpornya.
Contoh Mengekspor Nilai Kode Keras ke File JSON:
./dji_flyc_hardcoder.py -vvv -x -e P3X_FW_V01.07.0060_m0306.elf
Contoh Mengimpor Nilai Dari File JSON Kembali ke Elf:
./dji_flyc_hardcoder.py -vvv -u -e P3X_FW_V01.07.0060_m0306.elf
Parameter Firmware Flight Controller Editor Array menemukan array parameter penerbangan dalam biner firmware, dan memungkinkan untuk mengekstrak parameter ke file teks format JSON. File ini kemudian dapat dengan mudah dimodifikasi, dan digunakan untuk memperbarui firmware biner, mengubah atribut dan batas setiap parameter.
Untuk menemukan array parameter, alat membutuhkan alamat dasar yang digunakan untuk memuat file biner ke RAM mikro-pengontrol. Jika Anda tidak tahu alamat dasar untuk digunakan, panduan pemrograman chip spesifik yang digunakan dapat memberi Anda petunjuk.
Contoh ekstrak dan kemudian memperbarui parameter pengontrol penerbangan:
./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
Lebih banyak contoh, untuk produk lain:
./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
DJI Universal Packet Container Stream Pareser dengan Format Output PCAP.
Script mem -parsing aliran DUML mentah (yaitu. File log penerbangan FLY???.DAT ) dan membungkus paket tunggal dengan header PCAP. Paket CRC diperiksa sebelum data dilewati. Alat apa pun dengan dukungan format PCAP kemudian dapat digunakan untuk menganalisis data (mis. Wireshark).
Contoh Konversi File Log Penerbangan:
./comm_dat2pcap.py -vv -d FLY002.DAT
DJI Serial Bus Sniffer dengan DUML Packetizer dan Format Output PCAP.
Script menangkap data dari dua UARTS dan membungkus paket DUML tunggal dengan header PCAP. Paket CRC diperiksa sebelum data diteruskan ke file PCAP atau pipa FIFO. Alat apa pun dengan dukungan format PCAP kemudian dapat digunakan untuk menganalisis data (mis. Wireshark).
Utilitas membutuhkan dua antarmuka serial dengan garis RX yang terhubung ke garis RX dan TX dalam drone.
Contoh memulai penangkapan dari dua konverter UART-to-TTL (alias FTDI):
./comm_serial2pcap.py -b 115200 -F /tmp/wsf /dev/ttyUSB0 /dev/ttyUSB1
DUML Packet Builder dengan output string hex.
Alat ini dapat membangun paket DUML yang tepat yang berisi bidang header yang diberikan dan muatan. Paket akan dikeluarkan dalam bentuk heksadesimal. Daftar perintah yang diketahui dan tampilan payload yang diharapkan dapat ditemukan di disektor Wireshark yang dijelaskan di bawah ini.
Contoh menghasilkan paket untuk meminta modul Kamera Spark ID sensornya:
./comm_mkdupc.py --receiver_type=Camera --seq_num=65280 --ack_type=ACK_After_Exec --cmd_set=Camera --cmd_id=181
DUML Builder yang mengirimkan paket ke produk DJI dan menerima tanggapan.
Alat ini membangun paket DUML yang tepat yang berisi bidang header dan muatan yang diberikan. Kemudian mengirimkannya melalui port serial yang diberikan dan menunggu tanggapan. Ini menunjukkan paket yang kembali setelah menerimanya.
Ini dapat dianggap sebagai alternatif untuk biner dji_mb_ctrl yang dapat ditemukan di beberapa drone. Nama parameter berbeda antara kedua alat ini.
Contoh meminta pengontrol penerbangan untuk data versi perangkat keras dan firmware (diuji pada 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
Contoh meminta pengontrol penerbangan untuk data versi perangkat keras dan firmware (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
Alat layanan OGS untuk produk DJI.
Script memungkinkan untuk memicu beberapa fungsi layanan drone DJI. Ini berbicara kepada drone seperti comm_serialtalk.py , tetapi memberikan antarmuka yang lebih mudah untuk beberapa fungsi penting.
Contoh Parameter Pengontrol Penerbangan 200-300 pada Format PH3 Pro ke CSV:
./comm_og_service_tool.py --port /dev/ttyUSB0 P3X FlycParam list --start=200 --count=100 --fmt=csv
Contoh mendapatkan nilai parameter pengontrol penerbangan pada Spark:
./comm_og_service_tool.py --port /dev/ttyUSB0 -vv SPARK FlycParam get g_config.flying_limit.max_height_0 --fmt=2line
Contoh pengaturan nilai parameter pengontrol penerbangan pada Spark:
./comm_og_service_tool.py --port /dev/ttyUSB0 -vv SPARK FlycParam set g_config.flying_limit.max_height_0 500
Contoh Kalibrasi Layanan Performing "Joint Creatse" dari Spark Gimbal:
./comm_og_service_tool.py --port /dev/ttyUSB0 -vv SPARK GimbalCalib JointCoarse
Contoh Kalibrasi Layanan Performing "Linear Hall" dari Spark Gimbal, menggunakan host Windows:
python3 comm_og_service_tool.py --port COM23 -vv SPARK GimbalCalib LinearHall
Contoh Parameter Pengontrol Penerbangan 200-300 pada format Mavic 3 Pro ke CSV:
./comm_og_service_tool.py --bulk MAV3 FlycParam list --start=200 --count=100 --fmt=csv
Alat komunikasi sistem baterai pintar.
Alat ini memungkinkan untuk berinteraksi dengan chip yang dirancang berdasarkan spesifikasi data baterai pintar. Ini juga mendukung beberapa ekstensi untuk spesifikasi yang diterapkan oleh Texas Instruments dalam chip pengukur gas seri BQ mereka.
Penggunaan alat ini membutuhkan koneksi ke saluran SMBUS (SDA, SCL, GND) dari chip yang kompatibel dengan SBS. SMBUS Communication menggunakan I2C sebagai basis, sehingga sebagian besar perangkat dengan I2C Bus dapat digunakan untuk membangun komunikasi.
Contoh Bacaan Sederhana dari BatteryStatus (), menggunakan antarmuka I2C (skrip akan membuat pesan SMBU secara internal):
./comm_sbs_bqctrl.py -vvv --bus "i2c:1" --dev_address 0x0b read BatteryStatus
Contoh Membaca Beberapa Bidang Bendera dari BQ30Z55 oleh ProducturerAccess (), menggunakan antarmuka SMBUS:
./comm_sbs_bqctrl.py -v --bus "smbus:1" --dev_address 0x0b --chip BQ30z55 --short monitor BQStatusBitsMA
Contoh BQ30Z55 yang membuka kembali (mengaktifkan kemampuan menulis), dengan tombol SHA-1 default, menggunakan antarmuka I2C pada perangkat bus ke-2 yang tersedia untuk OS:
./comm_sbs_bqctrl.py -v --bus "i2c:2" --dev_address 0x0b --chip BQ30z55 --short sealing Unseal
Folder tests berisi kumpulan skrip yang dapat digunakan untuk memverifikasi apakah alat melakukan pekerjaan mereka dengan benar. Ada dua jenis tes umum di sana:
Tes Alat Komunikasi, comm yang Ditandai. Ini untuk skrip yang biasanya berbicara dengan perangkat nyata. Tes menyuntikkan jawaban yang diharapkan untuk menerima buffer, sehingga mereka dapat dijalankan tanpa produk yang terhubung.
Tes Alat Ekstraksi Firmware, Ditandai fw_xv4 , fw_imah_v1 , fw_imah_v2 . Ekstrak ini dan mengemas ulang firmware yang ditemukan di direktori fw_packages , kemudian membandingkan file yang dihasilkan dengan asli untuk memeriksa apakah tidak ada perubahan yang tidak diinginkan yang diperkenalkan.
Selain menguji modifikasi Anda, Anda juga dapat menggunakan tes sebagai sumber lebih banyak contoh penggunaan alat. Mereka mencatat baris perintah yang digunakan untuk mengekstrak firmwares tertentu dan menjalankan perintah spesifik pada produk.
Tes disiapkan untuk digunakan dengan pytest . Contoh pelaksanaan semua tes:
pytest tests -rsx --full-scope --log-cli-level=INFO
Opsi --full-scope membuat tes dieksekusi pada semua binari yang diketahui, melainkan bahwa pada seleksi yang digunakan untuk integrasi berkelanjutan. Tes CI selektif untuk memastikan pengujian otomatis berakhir dalam waktu yang wajar.
Ingatlah bahwa tes hanya akan berjalan pada binari yang ditempatkan di sub-folder yang tepat dari folder fw_packages . Nama sub-folder yang valid dapat dengan mudah ditemukan dalam skrip pengujian. Jika tidak ada biner firmware yang dimasukkan ke folder, semua tes ekstraksi firmware akan dilewati.
Selain menjalankan semua tes, Anda juga dapat menjalankan yang spesifik (dengan -k ) atau sekelompok tes dengan tanda spesifik (dengan -m ). Contoh menjalankan tes fw_xv4 saja:
pytest tests -rsx --full-scope -m fw_xv4 --log-cli-level=DEBUG
Folder ini berisi distor Wireshark untuk menganalisis komunikasi dalam antarmuka drone DJI.
Dokumentasi alat ini termasuk dalam foldernya.
Untuk beberapa modul firmware tertentu dalam versi tertentu, ada simbol parsial yang tersedia di direktori 'Simbol'. Simbol dalam dua format:
Simbol dicocokkan dengan file ELF yang dihasilkan dengan alat yang dijelaskan di atas, tidak secara langsung dengan tempat sampah. Gunakan perintah contoh yang disediakan di bagian sebelumnya untuk menghasilkan file ELF dengan pencocokan konten dengan simbol.
Saat mengerjakan versi firmware yang tidak ada simbol yang tersedia, Anda mungkin ingin menggunakan versi dengan simbol untuk referensi dalam penamaan.
Jika Anda mencari versi FW terbaik untuk simbol referensi, atau Anda tidak peduli dengan versi FW sama sekali dan hanya menginginkan simbol paling lengkap - periksa ukuran file peta. File peta sebagian besar berisi simbol yang disebutkan secara manual, jadi yang terbesar adalah untuk versi firmware di mana pekerjaan yang lebih membalik dilakukan.