По мотивам документации в официальном репозитории.
Автор рекомендует (почему-то:) ) использовать для работы сразу две ОС.
В принципе, всё можно сделать (проще) только в 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.sig, wm220_0305_v34.04.00.24_20170726.pro.fw.sig, wm220_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)
А спутники galileo по этой инструкции активируются? Если да, то на каком шаге? Если нет, то как активировать?
Активируются.
GPS патчится скриптом(ами) patch_wmххх_0306.py, который, собсно, из FC_patch_sequence_for_dummy_verify.sh запускается.
Но для приема со спутников Galileo, этого не достаточно 🙁 Необходима также патченая версия DJI GO.
А чтоб еще параметры поменять с какого пункта начинать?
Да ну на хуй, ебанутся можно
Здравствуйте! Толковая инструкция, спасибо! но я «толковее» оказался ;(((
При попытке убрать подпись:
$ 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/
———————
Может подскажите что делать?
Ну не силен я в Линуксах, Питона пр , к сожалению….
Так это не линукс 🙂
libcrypt-devel
python2-devel
Установили?
Да, установил все перечисленные в вашем списке пакеты.
Может как-то криво встали? Не знаю как проверить, но при повторной установке Cygwin он на них предлагает replace (т.е. я так понимаю что они есть)
Попробовал поставить на машине с win7. Всё поставил , правда венрсия pycrypto одинакова для 2 и 3 — pycrypto-2.6.1.tar.gz ….. Но все вроде встало….;) Магия какая то 😉
Все поставил благодаря вашей инструкции! Ура!
В дополнение : проблема при установке пакетов pycrypto решилась при установке Cygwin ставил все пакеты и в закомпиленном и в разобранном виде (и бинарник и исходник). Тогда pip3 imstall pycrypto — нормально отработал.
Спасибо!
Привет. Спасибо огромное за инструкцию, титанический труд. Пожалуйста, подскажи по пункту с командой:
mount -o bind /vendor/bin/dummy_verify.sh /sbin/dji_verify
Как именно прошивать Мавик? После этой команды я перезагружаю дрон (потому что при включенном ADB в DUMLdore не шьется) и тогда открывается возможность зашить архив. Он зашивается, все ок.
Но в DJI Assistant нельзя поднять fly_limit больше 500. В конфиге я указал 2500. Также убрал height_limit_enabled, поставил =2.
Что я сделал не так? Очень надеюсь на твою помощь
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.
Файл с параметрами до этого правил, но видимо неправильно зашивал) спасибо за ответ)
UPD. Шил 01.04.0400