По мотивам документации в официальном репозитории.
Автор рекомендует (почему-то:) ) использовать для работы сразу две ОС.
В принципе, всё можно сделать (проще) только в Linux, либо же только в Windows (но дольше).
Пишу для пользователей Windows, т.к., действия в Linux у автора патча уже описаны.


Требования:

— Квадрик — DJI Mavic Pro Platinum.
Версия прошивки — 01.04.0300 (для других квадрокоптеров и прошивок — действия будут немного отличаться)
 — До патча прошивки необходимо активировать ADB у квадрокоптера и получить рут-доступ. Сделать это можно с помощью DUMLRacer, либо DUMLDore.
Для Windows предпочтительней будет DUMLdore, т.к., кнопочки 🙂
— Установленные драйверы ADB и утилита ADB. Можно всё одним инсталлятором скачать отсюда.

Также потребуется установка Cygwin (32-битной).
Скачиваю, запускаю setup-x86.exe
«Далее» — (выбираю Install from Internet) — «Далее» — (оставляю путь установки C:\cygwin по-умолчанию) — «Далее» — «Далее» — «Далее» — (выбираю любое зеркало) — «Далее».
Отобразился список установленных (и устанавливаемых) пакетов.
В выпадающем списке View выбрать «Full».
И теперь по-порядку необходимо выбрать пакеты для установки.
Чтобы не искать по всему списку, рекомендую использовать поиск, вводя названия пакетов в поле Search.

Необходимо выбрать для установки:

  • libcrypt-devel
  • python2
  • python3
  • python27-pip
  • python36-pip
  • python2-devel
  • python3-devel
  • gcc-core
  • git
  • wget

Ну и далее до завершения установки кликаю «Далее», в самом конце выбрав «Create icon on desktop»
По завершении на рабочем столе должен появиться ярлык «Cygwin Terminal». Открываю. Работаем с командной строкой.

Активация adb в windows, с помощью DUMLdore:
— Скачивается, распаковывается: https://github.com/jezzab/DUMLdore/archive/master.zip
— Запускается DUMLdoreV3.exe.
— Жмется кнопочка «ADB Enable».
— Всё, adb на квадрике активирован ДО перезагрузки квадрика (процедуру надо будет повторить после каждой перезагрузки квадрика).

Вводимые в терминале команды будут (здесь, в тексте) начинаться с $. При вводе команд $ вводить не нужно 🙂

Для некоторых утилит необходим модуль pycrypto, которого в пакетах нет. Необходимо его установить с помощью pip (для 3 и 2 версии пайтона).

$ pip3 install pycrypto
$ pip2 install pycrypto

Результатом вывода обеих команд будет «Successfully installed pycrypto». Если нет, — возможно, не был установлен пакет python*-devel, gcc-core, либо libcrypt-devel.
Находясь в домашней директории, создаю директорию mavic, со вложенной директорией sw, в которую клонирую репозитории нужных для работы скриптов, перехожу в нее:

$ mkdir -p mavic/workdir mavic/sw
$ cd mavic

Клонирую репозитории:

$ git clone https://github.com/o-gs/DJI_FC_Patcher sw/DJI_FC_Patcher
$ git clone https://github.com/o-gs/dji-firmware-tools sw/dji-firmware-tools
$ git clone https://github.com/fvantienen/dji_rev sw/dji_rev

Скачиваю файл оригинальной прошивки V01.04.0300_Mavic_dji_system.bin:

$ wget "http://dji.polybotes.feralhosting.com/DJI-Firmware/BIN/Mavic%20Pro%20(Incl%20Platinum%20and%20Alpine)/V01.04.0300_Mavic_dji_system.bin"

Проверяю что действительно скачал tar-архив 🙂 Вывод будет содержать список файлов с расширением .pro.fw.sig

$ tar -tvf V01.04.0300_Mavic_dji_system.bin

Распаковываю архив:

$ tar -xf V01.04.0300_Mavic_dji_system.bin

Из всех извлеченных файлов необходимы только три: wm220.cfg.sigwm220_0305_v34.04.00.24_20170726.pro.fw.sigwm220_0306_v03.02.44.07_20171116.pro.fw.sig
Копирую их в директорию workdir (созданную ранее):

$ cp wm220.cfg.sig wm220_0305_v34.04.00.24_20170726.pro.fw.sig wm220_0306_v03.02.44.07_20171116.pro.fw.sig workdir

Перехожу в директорию workdir:

$ cd workdir

Убирается подпись с wm220.cfg.sig:

$ python3 ../sw/dji_rev/tools/image.py wm220.cfg.sig

В результате должен получиться файл wm220.cfg_0000.bin (это — обычный xml-файл, уже без подписи)
Переименовываю  wm220.cfg_0000.bin в wm220.cfg.ori:

$ mv wm220.cfg_0000.bin wm220.cfg.ori

Включаю квадрик, подключаю по USB.
В терминале cygwin:

$ adb devices
List of devices attached
0123456789ABCDEF        device

— убеждаюсь что подключен квадрик 🙂
Если всё, — продолжаю.

$ adb shell

Должно появиться приветствие командной оболочки самого квадрика. В моем случае выглядит вот так: root@wm220_dz_ap0002_v1:/ #
Перемонтирую /vendor в режиме чтение+запись

mount -o remount,rw /vendor

Создаю директорию /vendor/bin. Если появится сообщение об ошибке «File exists» — ничего страшного.

mkdir /vendor/bin/

Выхожу из терминала квадрика. Квадрик пока не выключать!

exit

— вернулся в сеанс cygwin.
Записываю в директорию /vendor/bin квадрика файл wm220_0306_v03.02.44.07_20171116.pro.fw.sig

$ adb push wm220_0306_v03.02.44.07_20171116.pro.fw.sig /vendor/bin/

И снова подключаюсь к консольке квадрика:

adb shell

Перехожу в /vendor/bin/:

cd /vendor/bin/

Проверяю наличие файла wm220_0306_v03.02.44.07_20171116.pro.fw.sig:

ls -la wm220_0306_v03.02.44.07_20171116.pro.fw.sig

Расшифровываю файл wm220_0306_v03.02.44.07_20171116.pro.fw.sig с помощью dji_verify на квадрике. Выходной файл — 0306.unsig:

/sbin/dji_verify -n 0306 -o 0306.unsig wm220_0306_v03.02.44.07_20171116.pro.fw.sig

Выхожу из консольки квадрика. Скачиваю файл /vendor/bin/0306.unsig на компьютер:

exit
$ adb pull /vendor/bin/0306.unsig

Снова подключаюсь к квадрику:

$ adb shell

Перехожу в /vendor/bin, удаляю ненужны6 0306.unsig, *fw.sig, сбрасываю кеш записи, и монтирую /vendor в режиме «только чтение» (как и было изначально):

cd /vendor/bin/
rm 0306.unsig
rm *.fw.sig
cd /
sync
mount -o remount,ro /vendor
exit

Теперь последовательное выполнение нескольких скриптов:

$ python3 ../sw/dji-firmware-tools/dji_mvfc_fwpak.py dec -i 0306.unsig
$ mv 0306.decrypted.bin wm220_0306_v03.02.44.07_20171116.pro.fw_0306.decrypted.bin
$ python3 ../sw/dji-firmware-tools/dji_flyc_param_ed.py -vv -x -b 0x420000 -m wm220_0306_v03.02.44.07_20171116.pro.fw_0306.decrypted.bin

В результате их выполнения должен получиться файл (в формате JSON) с именем flyc_param_infos с полетными параметрами.
Можно редактировать любым текстовым редактором.
Странички с описанием параметров:
https://dji.retroroms.info/howto/parameterhacks
https://www.rcgroups.com/forums/showthread.php?2916078-DJI-Dashboard-How-To-tips-and-tricks-*MAVIC*
https://dji.retroroms.info/howto/parameterindex
https://www.rcgroups.com/forums/showthread.php?3058818-Rooting-Mavic-Pro-in-Latest-firmware-with-Force-FCC-and-Boost-and-No-NFZ

После внесения всех необходимых изменений необходимо пересобрать модуль 0306 с внесенными изменениями:
Создаю (в текущей директории) директорию build:

$ mkdir build

Копирую в неё необходимые файлы:

$ cp flyc_param_infos wm220_0306_v03.02.44.07_20171116.pro.fw_0306.decrypted.bin wm220_0305_v34.04.00.24_20170726.pro.fw.sig wm220.cfg.ori build
$ cp ../sw/DJI_FC_Patcher/FC_patch_sequence_for_dummy_verify.sh ../sw/DJI_FC_Patcher/patcher.py ../sw/DJI_FC_Patcher/patch_wm100_0306.py ../sw/DJI_FC_Patcher/patch_wm220_0306.py ../sw/DJI_FC_Patcher/patch_wm331_0306.py build

Перехожу в директорию build. В ней, после описанных выше манипуляций, должно быть 9 файлов.

$ cd build

Устанавливаю переменную окружения PATH_TO_TOOLS (видать, используется одним из скриптов) :

$ export PATH_TO_TOOLS=$HOME/mavic/sw/

Делаю исполняемым скрипт FC_patch_sequence_for_dummy_verify.sh:

$ chmod +x ./FC_patch_sequence_for_dummy_verify.sh

И запускаю его. Версия 03.02.44.08 должна быть выше текущей версии полетного контроллера. После каждого редактирования параметров рекомендуют увеличивать её.

$ ./FC_patch_sequence_for_dummy_verify.sh Mavic 03.02.44.10

Если всё прошло успешно, — получаю сообщение:

#### Success patching module ####
################################################################################
                       Modifying wm220.cfg
################################################################################
#### Success modifying wm220.cfg ####
################################################################################
 Preparing tar file dji_system_wm220_0306_03.02.44.10_dummy_verify.bin
################################################################################
wm220.cfg.sig
wm220_0305_v34.04.00.24_20170726.pro.fw.sig
wm220_0306_v03.02.44.10_20171116.pro.fw.sig
#### Success preparing tar file dji_system_wm220_0306_03.02.44.10_dummy_verify.bin ####
################################################################################
  The file dji_system_wm220_0306_03.02.44.10_dummy_verify.bin
  is prepared to be flashed with dummy_verify mount bind technique
################################################################################

В результате получится файл dji_system_wm220_0306_03.02.44.10_dummy_verify.bin, который, собствено, можно прошивать.
Содержимое файла (tar-архив):

$ tar -tvf dji_system_wm220_0306_03.02.44.10_dummy_verify.bin
-rw-r--r-- Vlad/Отсутствует 6333 2019-02-21 12:28 wm220.cfg.sig
-rwxr-xr-x Vlad/Отсутствует 55072 2019-02-21 11:55 wm220_0305_v34.04.00.24_20170726.pro.fw.sig
-rw-r--r-- Vlad/Отсутствует 1483776 2019-02-21 12:28 wm220_0306_v03.02.44.10_20171116.pro.fw.sig

— т.е., внутри должно быть 3 файла.
Файл dji_system_wm220_0306_03.02.44.10_dummy_verify.bin переименовываю в dji_system_wm220_0306_03.02.44.10_dummy_verify.tar

$ mv dji_system_wm220_0306_03.02.44.10_dummy_verify.bin dji_system_wm220_0306_03.02.44.10_dummy_verify.tar

Подключаюсь к квадрику:

$ adb shell

Монтирую /vendor/bin в режиме чтение+запись, выхожу:

mount -o remount,rw /vendor
exit

Копирую с компьютера файл dummy_verify.sh и опять подключаюсь к консольке квадрика:

$ adb push ../../sw/DJI_FC_Patcher/dummy_verify.sh /vendor/bin/
$ adb shell
cd /vendor/bin/
chown root:root dummy_verify.sh
chmod 755 dummy_verify.sh
cp /sbin/dji_verify /vendor/bin/original_dji_verify_copy
sync
cd /
mount -o remount,ro /vendor

Выключаю квадрик.  Включаю. Жду немного загрузки, подключаюсь к нему обратно:

$ adb shell
mount -o bind /vendor/bin/dummy_verify.sh /sbin/dji_verify
exit

Теперь запускаю DUMLdoreV3.
Жму «Load Firmware». Выбираю файл прошивки dji_system_wm220_0306_03.02.44.10_dummy_verify.tar (C:\cygwin\home\Имя_пользователя\mavic\workdir\build)
Жму «Flash Firmware».
Пойдет процесс прошивки, квадрик перезагружается.
Через DJI Assistant можно проверить, изменились ли необходимые параметры (из flyc_param_infos)

 

 

13 комментарий для “Использование FC_Patcher на примере DJI Mavic Platinum”
  1. А спутники galileo по этой инструкции активируются? Если да, то на каком шаге? Если нет, то как активировать?

    1. Активируются.
      GPS патчится скриптом(ами) patch_wmххх_0306.py, который, собсно, из FC_patch_sequence_for_dummy_verify.sh запускается.
      Но для приема со спутников Galileo, этого не достаточно 🙁 Необходима также патченая версия DJI GO.

  2. Здравствуйте! Толковая инструкция, спасибо! но я «толковее» оказался ;(((

    При попытке убрать подпись:
    $ python3 ../sw/dji_rev/tools/image.py wm220.cfg.sig
    Traceback (most recent call last):
    File «../sw/dji_rev/tools/image.py», line 27, in
    from Crypto.Cipher import AES
    ModuleNotFoundError: No module named ‘Crypto’

    Видимо что то не так с этим самым pycrypto , будь он неладен….
    Командами описанными у вас он не ставится …..
    смог загрузить его через
    pip2 download pycrypto
    в виде pycrypto-2.6.1.tar.gz
    как установить его не могу понять….

    При попытке поставить как Вы пишите
    ——он его выкачивает, распаковывает и запускает инстал и тут же где то обламывается——

    $ pip2 install pycrypto
    DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won’t be maintained after that date. A future version of pip will drop support for Python 2.7.
    Collecting pycrypto
    Using cached https://files.pythonhosted.org/packages/60/db/645aa9af249f059cc3a368b118de33889219e0362141e75d4eaf6f80f163/pycrypto-2.6.1.tar.gz
    Installing collected packages: pycrypto
    Running setup.py install for pycrypto … error
    ERROR: Complete output from command /usr/bin/python2.7 -u -c ‘import setuptools, tokenize;__file__='»‘»‘/tmp/pip-install-IJG2kh/pycrypto/setup.py'»‘»‘;f=getattr(tokenize, ‘»‘»‘open'»‘»‘, open)(__file__);code=f.read().replace(‘»‘»‘\r\n'»‘»‘, ‘»‘»‘\n'»‘»‘);f.close();exec(compile(code, __file__, ‘»‘»‘exec'»‘»‘))’ install —record /tmp/pip-record-O1k9_X/install-record.txt —single-version-externally-managed —compile:
    ERROR: running install
    running build
    running build_py
    creating build
    creating build/lib.cygwin-3.0.7-i686-2.7
    creating build/lib.cygwin-3.0.7-i686-2.7/Crypto
    copying lib/Crypto/pct_warnings.py -> build/lib.cygwin-3.0.7-i686-2.7/Crypto
    copying lib/Crypto/__init__.py -> build/lib.cygwin-3.0.7-i686-2.7/Crypto
    и там еще множество однотипных ошибок….
    а это конец вывода
    error: command ‘gcc’ failed with exit status 1
    —————————————-
    ERROR: Command «/usr/bin/python2.7 -u -c ‘import setuptools, tokenize;__file__='»‘»‘/tmp/pip-install-IJG2kh/pycrypto/setup.py'»‘»‘;f=getattr(tokenize, ‘»‘»‘open'»‘»‘, open)(__file__);code=f.read().replace(‘»‘»‘\r\n'»‘»‘, ‘»‘»‘\n'»‘»‘);f.close();exec(compile(code, __file__, ‘»‘»‘exec'»‘»‘))’ install —record /tmp/pip-record-O1k9_X/install-record.txt —single-version-externally-managed —compile» failed with error code 1 in /tmp/pip-install-IJG2kh/pycrypto/
    ———————

    Может подскажите что делать?
    Ну не силен я в Линуксах, Питона пр , к сожалению….

      1. Да, установил все перечисленные в вашем списке пакеты.
        Может как-то криво встали? Не знаю как проверить, но при повторной установке Cygwin он на них предлагает replace (т.е. я так понимаю что они есть)

        1. Попробовал поставить на машине с win7. Всё поставил , правда венрсия pycrypto одинакова для 2 и 3 — pycrypto-2.6.1.tar.gz ….. Но все вроде встало….;) Магия какая то 😉

  3. Все поставил благодаря вашей инструкции! Ура!

    В дополнение : проблема при установке пакетов pycrypto решилась при установке Cygwin ставил все пакеты и в закомпиленном и в разобранном виде (и бинарник и исходник). Тогда pip3 imstall pycrypto — нормально отработал.

    Спасибо!

  4. Привет. Спасибо огромное за инструкцию, титанический труд. Пожалуйста, подскажи по пункту с командой:

    mount -o bind /vendor/bin/dummy_verify.sh /sbin/dji_verify

    Как именно прошивать Мавик? После этой команды я перезагружаю дрон (потому что при включенном ADB в DUMLdore не шьется) и тогда открывается возможность зашить архив. Он зашивается, все ок.

    Но в DJI Assistant нельзя поднять fly_limit больше 500. В конфиге я указал 2500. Также убрал height_limit_enabled, поставил =2.

    Что я сделал не так? Очень надеюсь на твою помощь

    1. 01.04.0400 я не пробовал. Не уверен что получится. Возможно, на 01.04.0400 вы не сможете получить flyc_param_infos (Я пробовал, но не помню, в чем была проблема, разбираться не стал, т.к., изменений с 01.04.0300 до 1.04.0400 (или 0500) не было существенных).

      mount -o bind /vendor/bin/dummy_verify.sh /sbin/dji_verify

      После ввода этой команды квадрик перезагружать нельзя (монтирование dummy_verify.sh в dji_verify пропадет с перезагрузкой). После активации ADB в квадрике, dumldore можно закрыть и открыть снова 🙂 Если он не дает прошиться.

      Лимиты нужно сначала изменить в файле flyc_param_infos (!)

      Для снятия лимитов высоты, Вам необходимо отредактировать параметры:
      g_config.flying_limit.height_limit_enabled
      g_config.flying_limit.limit_height_abs_without_gps
      g_config.flying_limit.limit_height_abs

      Асистент не нужен по большому счету. Т.е., если изменения внесены правильно, и файл flyc_param_infos прошит вместе с обновленной прошивкой, то квадрик будет лететь выше 500, даже если в djigo будет отображаться лимит 500.

      1. Файл с параметрами до этого правил, но видимо неправильно зашивал) спасибо за ответ)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *