Инструменты для извлечения, модрирования и повторного укладки прошивок многородных беспилотников DJI.
Проект начался как альтернативная реализация анализатора из Phantom-LicenseCecece. Со временем он вырос для поддержки многих поколений продуктов DJI. Он состоит из инструментов, которые позволяют не только извлекать, но также повторно переполнять ранее извлеченные модули обратно в отдельный файл. Существуют также инструменты, которые должны использоваться на конкретных модулях для извлечения и разрешения модификации их контента.
Вот несколько возможных применений инструментов.
Замена некоторых компонентов дрона может потребовать калибровки. Инструменты способны запускать калибровку на некоторых устройствах, в основном в Гимбалах с датчиками зала.
Также можно использовать их для отправки любого пользовательского пакета в беспилотник, и этот способ запускает фабричные функции, такие как калибровка или спаривание - до тех пор, пока вы знаете, как должен выглядеть пакет.
В вики этого проекта есть множество информации о досках в каждом беспилотнике и компонентов на каждой доске. Эта информация создается и разделяется многими энтузиастами и техническими специалистами по ремонту.
Инструменты могут использоваться в качестве версии командной строки программного обеспечения DJI Assistant, которая также позволяет изменять параметры для платформ, в которых отсутствует такое программное обеспечение OEM или где у него заблокированы расширенные функции.
Контроллеры полета из DJI определяют Hunderds параметров, которые влияют на их поведение. Они могут быть изменены, просто отправив команду на беспилотник, если новое значение находится в пределах, принятых прошивкой FC.
Инструменты позволяют изменить двоичные файлы прошивки, а затем повторно перекрасить их обратно в Flashable Priderware Package. Таким образом, любая функциональность, контролируемая программным обеспечением, может быть изменена, включая:
Иногда может потребоваться дополнительные модификации знаний и программного обеспечения (т.е. рутирование дрона) для прошивки, модифицированной модифицированной прошивкой - некоторые пакеты прошивки подписаны с использованием асимметричной криптографии, а частные ключи редко доступны.
Если вы заинтересованы в аппаратном и программном обеспечении DJI, это место для начала обучения. Ты можешь:
Такая инструкция не будет предоставлена. Эти инструменты предназначены для инженеров с обширными знаниями оборудования и программного обеспечения. Вы должны знать, что вы делаете, чтобы достичь чего -либо с этими инструментами.
Это должно убедиться, что инструменты не будут использоваться сценарием детей для отключения механизмов безопасности и разрешения нарушения местных законов.
Если вы не можете понять, как работают инструменты, вы не должны их использовать. Если показаны какие -либо предупреждения, вы должны исследовать причину, чтобы убедиться, что финальная прошивка не будет повреждена. Вы используете инструменты на своем собственном риске.
Если вы не знаете, с чего начать, проверьте тесты. Они предоставят вам командные строки для связи с беспилотником или для извлечения всех слоев конкретной прошивки (если вы можете разместить его правильно).
Поскольку все инструменты доступны в форме исходного кода, легко проверить подробности о структуре и протоколах, обработанных этими инструментами, рассматривая их источник. Исходный код предназначен для того, чтобы действовать в качестве документации в формате.
Для получения информации о более высоком уровне и большей информации, проверьте проект Wiki.
Инструменты можно разделить на две категории:
Аппаратные, независимые инструменты - те, для которых вам не нужно иметь какой -либо продукт DJI для использования. Вам просто нужен входной файл, который они используют, например, пакет прошивки DJI или файл журнала DAT.
Инструменты связи продукта - вам нужно подключить свой беспилотник к ПК, чтобы использовать эти инструменты любым значимым образом. В настоящее время инструменты используют серийный интерфейс (UART) и I2C.
Ниже конкретные инструменты описаны в кратчайшие сроки. Запуск их без параметров даст вам подробную информацию о поддерживаемых командах в каждом из них.
Чтобы получить подробности о аргументах командной строки каждого инструмента, запустите их с помощью опции --help . Некоторые инструменты также имеют дополнительные замечания в их заголовках - попробуйте их просмотреть.
Прошивка DJI XV4 Инструмент контейнера; Позволяет извлекать модули из файла пакета, который начинается с xV4 или создания контейнера путем объединения модулей прошивки. Сначала используйте этот инструмент, чтобы извлечь файл bin, загруженный из DJI, если файл начинается с xV4 .
Пример извлечения модулей из пакета прошивки DJI для Phantom 3 Pro :
./dji_xv4_fwcon.py -vv -x -p P3X_FW_V01.08.0080.bin
Прошивка DJI Imah Un-Signer и Decryptor Tool; Позволяет расшифровать и UN-SIGN MODULE из .sig файла, который начинается с IM*H . Используйте этот инструмент после того, как не соблюдает отдельные модули из пакета прошивки, чтобы расшифровать его контент. Инструмент также может повторно подписать модуль, если доступна частная часть выбранного ключа.
Ключи, используемые для шифрования и аутентификации, менялись со временем; Когда файл 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
Пример не подписывающей прошивки FC для 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
Пример подписания ранее не подписываемой прошивки FC для Mini 2 (требует 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 Tool; Удаляет шифрование второго уровня в прошивных программных программных программных программных программных программных программных программных программ из нескольких продуктов DJI, выпущенных за тот же период: Mavic Pro , Spark , Inspire 2 и Phantom 4 . Не принимает формат IM*H - требует входных файлов с уже удаленным шифрованием первого уровня.
Пример расшифровки прошивки FC для Mavic Pro :
./dji_mvfc_fwpak.py dec -i wm220_0306_v03.02.40.11_20170918.pro.fw
Ambarella A7/A9 Puldware Pack Tool; Позволяет извлекать перегородки из прошивки или объединить их обратно. Используйте это для извлечения прошивки Ambarella из файлов, созданных после извлечения контейнера DJI. Вы можете распознать прошивку Ambarella с помощью многих струн "Amba" внутри или строкой с нулевым прибором 32-х штампов в начале файла.
Пример извлечения разделов из прошивки Ambarella для Phantom 3 Pro :
./amba_fwpak.py -vv -x -m P3X_FW_V01.08.0080_m0100.bin
Ambarella A7/A9 прошивка ROMFS Файлсистемная инструмент; Позволяет извлекать отдельные файлы из файла файла ROMFS или восстановить файловую систему из отдельных файлов. Используйте это после того, как прошивка Ambarella будет извлечена. Вы можете распознавать разделы ROMFS по именам файлов вблизи начала файла, окруженных блоками 0xff заполненных байтов.
Пример извлечения раздела ROMFS из прошивки Ambarella для Phantom 3 Pro :
./amba_romfs.py -vv -x -p P3X_FW_V01.08.0080_m0100_part_rom_fw.a9s
Скрипт Linux для монтажа UBIFS от прошивки Ambarella. После монтажа файлы могут быть скопированы или изменены. Используйте это после того, как прошивка Ambarella будет извлечена. Файл, содержащий UBIF, может быть легко распознан UBI# в начале файла.
Пример монтажа корневой файловой системы от прошивки Ambarella для Phantom 3 Pro :
sudo ./amba_ubifs.sh P3X_FW_V01.08.0080_m0100_part_rfs.a9s
Инструмент, который обрывает двоичные исполняемые изображения рук с помощью заголовка ELF. Если прошивка содержит двоичное изображение исполняемого файла, этот инструмент может восстановить заголовок ELF для него. Формат ELF может быть легко разобрать, так как большинство отладчиков могут читать файлы ELF. Обратите внимание, что использование этого инструмента на зашифрованных прошивках не приведет к полезным ELF.
Пример преобразования прошивки FC для Phantom 3 в ELF:
./arm_bin2elf.py -vv -e -b 0x8020000 -l 0x6000000 -p P3X_FW_V01.07.0060_m0306.bin
Приведенная выше команда приведет к тому, что инструмент пытается обнаружить, где должна быть граница между разделами кода ( .text ) и Data ( .data ). Это обнаружение не идеально, особенно для двоичных файлов без .ARM.exidx . .ARM.exidx .data двоичном .ARM.exidx .text .
Другими словами, положение .ARM.exidx влияет на длину .text и начало смещения раздела .data . Если в файле нет разделения .ARM.exidx , он все равно будет использоваться в качестве сепаратора, просто с нулевым размером. После первого взгляда на разборку, хорошо проверить, где находится правильная граница между .text и .data . Адрес памяти этого местоположения может использоваться для генерации лучшего файла ELF.
Дополнительные обновления эльфа после первого взгляда могут включать определение разделов .bss . Эти разделы представляют собой ненициализированные рамки и области MMIO, используемые бинарным. Заманчиво просто определить один большой раздел, который охватывает диапазон адресов карты памяти в соответствии с руководством по программированию чипа, но это приводит к огромному использованию памяти и связанным с ним замедлениям при разборке файла, а также затрудняет навигацию файла.
Обратите внимание, что все смещения раздела определяются с использованием адреса в памяти, а не позиции в файле 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 прошивка «Программное обеспечение System Software». Разделение содержит двоичное изображение исполняемого файла, и этот инструмент завершает его заголовком 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 прошивка «Системное программное обеспечение» раздел.
Инструмент может анализировать Ambarella Sys Sys Sys, преобразованный в ELF. Он находит определенные жесткие значения в двоичных данных и позволяет их экспортировать или импортировать. Только элемент setValue в экспортируемом файле JSON действительно изменчив, все остальные данные просто информационные.
Пример экспорта жестких значений в файл 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 Редактор бинарных жестких значений.
Инструмент может анализировать файл ELF -файла ENCODE_USB из модуля прошивки DJI для Media Processor Ti DM3XX Davinci. Он находит определенные жесткие значения в двоичных данных и позволяет их экспортировать или импортировать.
Пример экспорта жестких значений в файл 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 Микроконтроллер бинарный редактор жестких значений.
Инструмент может анализировать прошивку Lightbridge MCU, преобразованную в ELF. Он находит определенные жесткие значения в двоичных данных и позволяет их экспортировать или импортировать.
Пример экспорта жестких значений в файл 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 Flight Controller Firthware Двоирный редактор жестких кодируемых значений.
Инструмент может проанализировать прошивку контроллера полета, преобразованную в 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
Редактор матрицы в прошивке с контроллером полета находит массив параметров полета в двоичном программном обеспечении и позволяет извлечь параметры в текстовый файл формата JSON. Этот файл затем может быть легко изменен и используется для обновления двоичного прошивки, изменения атрибутов и ограничений каждого параметра.
Чтобы найти массив параметров, инструмент нуждается в базовом адресу, используемом для загрузки двоичного файла в ОЗУ микроконтроллера. Если вы не знаете базовый адрес для использования, руководство по программированию конкретного используемого чипа может дать вам подсказки.
Пример извлечения, а затем обновление параметров контроллера полета:
./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
DJI Universal Packet Container Stream Pareser с выходным форматом PCAP.
Скрипт анализирует Raw Duml Stream (то есть файлы журнала полета FLY???.DAT ) и завершают отдельные пакеты с заголовками PCAP. Пакеты CRC проверяются до передачи данных. Любой инструмент с поддержкой формата PCAP может использоваться для анализа данных (т.е. Wireshark).
Пример преобразования файла журнала полета:
./comm_dat2pcap.py -vv -d FLY002.DAT
DJI Serial Bus Sniffer с Duml Packetizer и выходным форматом PCAP.
Сценарий фиксирует данные из двух UARTS и обертывает отдельные пакеты Duml с заголовками PCAP. Пакеты CRC проверяются до передачи данных в файл PCAP или FIFO Pibe. Любой инструмент с поддержкой формата PCAP может использоваться для анализа данных (т.е. Wireshark).
Утилита требует двух последовательных интерфейсов с линиями RX, подключенными к RX и TX -линиям в дрон.
Пример запуска захвата с двух конвертеров UART-TO-TTL (AKA FTDI):
./comm_serial2pcap.py -b 115200 -F /tmp/wsf /dev/ttyUSB0 /dev/ttyUSB1
Duml Packet Builder с выводом шестигранной строки.
Этот инструмент может создать правильный пакет Duml, содержащий заданные поля заголовка и полезную нагрузку. Пакет будет выведен в шестнадцатеричной форме. Список известных команд и внешний вид ожидаемых полезных нагрузок можно найти в диссекторах Wireshark, описанных ниже.
Пример генерации пакета, чтобы спросить модуль камеры Spark для его идентификатора датчика:
./comm_mkdupc.py --receiver_type=Camera --seq_num=65280 --ack_type=ACK_After_Exec --cmd_set=Camera --cmd_id=181
Duml Builder, который отправляет пакет в продукт DJI и получает ответ.
Этот инструмент создает правильный пакет Duml, содержащий заданные поля заголовка и полезную нагрузку. Затем он отправляет его через последовательный порт и ожидает ответа. Он показывает возвратный пакет при его получении.
Это можно считать альтернативой двоичеству dji_mb_ctrl , который можно найти в некоторых беспилотниках. Имена параметров различаются между этими двумя инструментами, хотя.
Пример запроса контроллера полета для данных аппаратного и прошивки (протестировано на 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
Сервисный инструмент OGS для продуктов DJI.
Сценарий позволяет запустить несколько сервисных функций беспилотников DJI. Он разговаривает с беспилотником, как comm_serialtalk.py , но обеспечивает более простой интерфейс для некоторых важных функций.
Пример листинга параметров контроллера полета 200-300 на формате PH3 Pro в CSV:
./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
Пример выполнения службы "Линейный зал" калибровки Spark Gimbal, используя хост Windows:
python3 comm_og_service_tool.py --port COM23 -vv SPARK GimbalCalib LinearHall
Пример листинга параметров контроллера полета 200-300 в формате Mavic 3 Pro в CSV:
./comm_og_service_tool.py --bulk MAV3 FlycParam list --start=200 --count=100 --fmt=csv
Инструмент связи с интеллектуальной батареей.
Этот инструмент позволяет взаимодействовать с чипами, разработанными на основе спецификации данных интеллектуальной батареи. Он также поддерживает некоторые расширения этой спецификации, реализованной Texas Instruments в их фишках с газовым уровнем серии BQ.
Использование этого инструмента требует подключения к SMBUS Lines (SDA, SCL, GND), совместимого с SBS. SMBUS Communication использует I2C в качестве базы, поэтому большинство устройств с шиной I2C можно использовать для установления связи.
Пример простого чтения BatteryStatus () с использованием интерфейса I2C (скрипт будет создавать сообщения SMBU внутри):
./comm_sbs_bqctrl.py -vvv --bus "i2c:1" --dev_address 0x0b read BatteryStatus
Пример чтения нескольких полей флагов от BQ30Z55 от производителя infactoreCcess () с использованием интерфейса SMBUS:
./comm_sbs_bqctrl.py -v --bus "smbus:1" --dev_address 0x0b --chip BQ30z55 --short monitor BQStatusBitsMA
Пример распечатывания BQ30Z55 (включение возможностей записи), с ключом SHA-1 по умолчанию, используя интерфейс I2C на устройстве 2-й шины, доступное для ОС:
./comm_sbs_bqctrl.py -v --bus "i2c:2" --dev_address 0x0b --chip BQ30z55 --short sealing Unseal
Папка tests содержит набор сценариев, которые можно использовать для проверки того, правильно ли инструменты выполняют свою работу. Там есть два общих типа тестов:
Тесты инструментов связи, отмеченная 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
Папка содержит диссиктор Wireshark для анализа связи в интерфейсах DJI Drone.
Документация инструмента включена в папку.
Для некоторых конкретных модулей прошивки в определенных версиях есть частичные символы, доступные в каталоге «Символы». Символы в двух форматах:
Символы сопоставлены с файлами ELF, сгенерированными инструментами, описанными выше, не непосредственно с мусорными банками. Используйте примеры команд, представленные в предыдущем разделе для генерации файлов ELF с сопоставлением контента с символами.
Работая над версией прошивки, для которой не доступны символы, вы можете использовать версию с символами для справки при названии.
Если вы ищете лучшую версию FW для справочных символов, или вы вообще не заботитесь о версиях FW и просто хотите самые полные символы - проверьте размер файла карты. Файл карты в основном содержит символы вручную, поэтому крупнейшая будет для версии прошивки, на которой была выполнена более реверсирующая работа.