أدوات لاستخلاص ، تعديل وإعادة تعبئة الشركات من DJI Multirotor بدون طيار.
بدأ المشروع بمثابة تنفيذ بديل للمحلل من Phantom-incensecheck. بمرور الوقت نمت لدعم أجيال عديدة من منتجات DJI. وهو يتألف من أدوات لا تسمح فقط بالاستخراج ، ولكن أيضًا إعادة تعبئة الوحدات النمطية المستخرجة مسبقًا إلى ملف واحد. هناك أيضًا أدوات من المفترض استخدامها على وحدات محددة لاستخراجها والسماح بتعديل محتواها.
فيما يلي بعض الاستخدامات المحتملة للأدوات.
قد يتطلب استبدال بعض مكونات الطائرة بدون طيار المعايرة. الأدوات قادرة على تشغيل المعايرة في بعض الأجهزة ، ومعظمها من gimbals مع أجهزة استشعار القاعة.
من الممكن أيضًا استخدامها لإرسال أي حزمة مخصصة إلى الطائرة بدون طيار ، وبهذه الطريقة ، تعمل وظائف المصنع مثل المعايرة أو الاقتران - طالما أنك تعرف كيف يجب أن تبدو الحزمة.
يحتوي Wiki لهذا المشروع على الكثير من المعلومات حول اللوحات داخل كل طائرة بدون طيار ، والمكونات على كل لوحة. يتم إنشاء هذه المعلومات ومشاركتها من قبل العديد من المتحمسين وفنيي الإصلاح.
يمكن استخدام الأدوات كإصدار سطر الأوامر من برنامج Assistant DJI ، والذي يسمح أيضًا بتغيير المعلمات للمنصات التي تفتقر إلى برنامج OEM هذا أو حيث يتم قفل الوظائف المتقدمة.
تحدد وحدات التحكم في الطيران من DJI هندرز المعلمات التي تؤثر على سلوكهم. يمكن تعديلها عن طريق إرسال أمر إلى الطائرة بدون طيار ، طالما أن القيمة الجديدة ضمن حدود مقبولة من قبل FC Firmware.
تتيح الأدوات تعديل ثنائيات البرامج الثابتة ، ثم إعادة تعبئتها مرة أخرى في حزمة البرامج الثابتة القابلة للتفاضل. وبهذه الطريقة ، يمكن تغيير أي وظائف تحكمها البرامج ، بما في ذلك:
قد يتطلب الأمر في بعض الأحيان تعديلات إضافية للمعرفة والبرامج (أي تأصيل الطائرة بدون طيار) لفلاش البرامج الثابتة المعدلة - يتم توقيع بعض حزم البرامج الثابتة باستخدام التشفير غير المتماثل ، ونادراً ما تكون المفاتيح الخاصة متاحة.
إذا كنت مهتمًا بأجهزة وبرامج DJI ، فهذا هو المكان المناسب للبدء في التعلم. أنت تستطيع:
لن يتم تقديم هذه التعليمات. هذه الأدوات مخصصة للمهندسين الذين يتمتعون بمعرفة الأجهزة والبرامج الواسعة. تحتاج إلى معرفة ما تفعله لتحقيق أي شيء مع هذه الأدوات.
هذا هو التأكد من عدم استخدام الأدوات من قبل Script Kiddies لتعطيل آليات الأمن والسماح لكسر القوانين المحلية.
إذا لم تتمكن من فهم كيفية عمل الأدوات ، يجب ألا تستخدمها. إذا تم عرض أي تحذيرات ، فيجب عليك التحقيق في سبب التأكد من عدم تلف البرامج الثابتة النهائية. أنت تستخدم الأدوات على مسؤوليتك الخاصة.
إذا كنت لا تعرف من أين تبدأ ، تحقق من الاختبارات. سوف يوفرون لك خطوط الأوامر للتواصل مع الطائرة بدون طيار ، أو لاستخراج جميع طبقات البرامج الثابتة المحددة (طالما يمكنك وضعها بشكل صحيح).
نظرًا لأن جميع الأدوات متوفرة في نموذج الكود المصدر ، فمن السهل التحقق من التفاصيل حول الهيكل والبروتوكولات التي تتم معالجتها بواسطة هذه الأدوات من خلال النظر إلى مصدرها. يهدف رمز المصدر أيضًا إلى العمل كوثائق تنسيق.
للحصول على مستوى أعلى والمزيد من المعلومات المتعلقة بالأجهزة ، تحقق من Wiki Project.
يمكن تقسيم الأدوات إلى فئتين:
الأدوات المستقلة عن الأجهزة - تلك التي لا تحتاج إلى استخدام أي منتج DJI. تحتاج فقط إلى ملف إدخال يستخدمونه ، مثل حزمة البرامج الثابتة DJI أو ملف سجل DAT.
أدوات اتصال المنتج - تحتاج إلى توصيل بدون طيار بجهاز كمبيوتر من أجل استخدام هذه الأدوات بأي طريقة ذات معنى. تستخدم الأدوات حاليًا الواجهة التسلسلية (UART) و I2C.
أسفل الأدوات المحددة موصوفة باختصار. سيعطيك تشغيلها بدون معلمات تفاصيل عن الأوامر المدعومة في كل منها.
للحصول على تفاصيل حول وسيطات سطر الأوامر لكل أداة ، قم بتشغيلها مع --help . تحتوي بعض الأدوات أيضًا على ملاحظات إضافية في رؤوسها - حاول مشاهدتها.
DJI Firmware XV4 Container Tool ؛ يسمح باستخراج الوحدات النمطية من ملف الحزمة الذي يبدأ بـ xV4 ، أو إنشاء حاوية عن طريق دمج وحدات البرامج الثابتة. استخدم هذه الأداة أولاً ، لاستخراج ملف bin الذي تم تنزيله من DJI ، طالما أن الملف يبدأ بـ xV4 .
مثال على استخراج الوحدات النمطية من حزمة البرامج الثابتة DJI لـ Phantom 3 Pro :
./dji_xv4_fwcon.py -vv -x -p P3X_FW_V01.08.0080.bin
DJI Firmware Imah un-Signer و Decryptor Tool ؛ يسمح بفك تشفير الوحدة النمطية و UN-SIG من ملف .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
مثال على البرامج الثابتة لـ UNSING 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 Firmware Pack Tool ؛ يسمح باستخراج الأقسام من البرامج الثابتة ، أو دمجها مرة أخرى. استخدم هذا لاستخراج البرامج الثابتة Ambarella من الملفات التي تم إنشاؤها بعد استخراج حاوية DJI. يمكنك التعرف على البرامج الثابتة لـ Ambarella بواسطة الكثير من سلاسل "Amba" داخل ، أو بسلسلة 32-Char ذات الصفر في بداية الملف.
مثال على استخراج الأقسام من البرامج الثابتة Ambarella لـ Phantom 3 Pro :
./amba_fwpak.py -vv -x -m P3X_FW_V01.08.0080_m0100.bin
Ambarella A7/A9 Firmware Fileware System Tool ؛ يتيح استخراج الملفات المفردة من ملف نظام ملفات 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. يمكن التعرف بسهولة على الملف الذي يحتوي على UBIFs بواسطة UBI# في بداية الملف.
مثال على تقسيم نظام ملفات الجذر من Ambarella Firmware for Phantom 3 Pro :
sudo ./amba_ubifs.sh P3X_FW_V01.08.0080_m0100_part_rfs.a9s
الأداة التي تتجنب صور ذراع قابلة للتنفيذ ثنائي مع رأس ELF. إذا كانت البرامج الثابتة تحتوي على صورة ثنائية للملف القابل للتنفيذ ، يمكن لهذه الأداة إعادة بناء رأس ELF لذلك. يمكن بعد ذلك تفكيك تنسيق ELF بسهولة ، حيث يمكن لمعظم أصحاب الأخطاء قراءة ملفات ELF. لاحظ أن استخدام هذه الأداة على Firmwares المشفرة لن يؤدي إلى 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 موجودًا في الثنائي ، يمكن للأداة العثور عليها بسهولة وتقسيم البيانات الثنائية بشكل صحيح ، معالجة .ARM.exidx كفاصل بين .text و .data .
بمعنى آخر ، يؤثر موضع .ARM.exidx على طول قسم .text . ، وبدء إزاحة قسم .data . إذا لم يكن هناك قسم .ARM.exidx في الملف ، فسيظل يستخدم كفاصل ، فقط بحجم صفر. بعد إلقاء نظرة أولية على التفكيك ، من الجيد التحقق من المكان الذي توجد فيه الحدود الصحيحة بين .text و .data . يمكن استخدام عنوان ذاكرة هذا الموقع لإنشاء ملف ELF أفضل.
يمكن أن تشمل التحديثات الإضافية لـ 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
تدعم هذه الأداة التحويل فقط في اتجاه bin-to-self. لتحويل ملف 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 Firmware "System Software" Converter. يحتوي القسم على صورة ثنائية للملف القابل للتنفيذ ، وتلفها هذه الأداة برأس 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 Firmware "System Software" محرر القيم المرمّزة.
يمكن للأداة تحليل قسم البرامج الثابتة Ambarella التي تم تحويلها إلى ELF. يجد بعض القيم المرمزة في البيانات الثنائية ، ويسمح بتصديرها أو استيرادها. عنصر setValue فقط في ملف JSON المصدر قابل للتغيير حقًا ، كل البيانات الأخرى هي مجرد معلوماتية.
مثال على تصدير القيم المرمزة إلى ملف JSON:
./amba_sys_hardcoder.py -vv -x --elffile P3X_FW_V01.08.0080_m0100_part_sys.elf
مثال على استيراد القيم من ملف JSON إلى قزم:
./amba_sys_hardcoder.py -vv -u --elffile P3X_FW_V01.08.0080_m0100_part_sys.elf
DJI DM3XX DAVINCI ENCODE_USB محرر القيم ذات الترميز الثنائي.
يمكن للأداة تحليل ملف ENCODE_USB ELF من وحدة البرامج الثابتة DJI لمعالج Media Davinci TI DM3XX. يجد بعض القيم المرمزة في البيانات الثنائية ، ويسمح بتصديرها أو استيرادها.
مثال على تصدير القيم المرمزة إلى ملف JSON:
./dm3xx_encode_usb_hardcoder.py -vv -x --elffile P3X_FW_V01.07.0060_m0800-encode_usb.elf
مثال على استيراد القيم من ملف JSON إلى قزم:
./dm3xx_encode_usb_hardcoder.py -vv -u --elffile P3X_FW_V01.07.0060_m0800-encode_usb.elf
DJI Lightbridge STM32 Micro-Controller Binary Binary Harded Derse.
يمكن للأداة تحليل البرامج الثابتة Lightbridge MCU إلى ELF. يجد بعض القيم المرمزة في البيانات الثنائية ، ويسمح بتصديرها أو استيرادها.
مثال على تصدير القيم المرمزة إلى ملف JSON:
./lightbridge_stm32_hardcoder.py -vv -x --elffile P3X_FW_V01.07.0060_m0900.elf
مثال على استيراد القيم من ملف JSON إلى قزم:
./lightbridge_stm32_hardcoder.py -vv -u --elffile P3X_FW_V01.07.0060_m0900.elf
DJI Flight Controller Firmware Binary Barinary Dorer Dorer.
يمكن للأداة تحليل البرامج الثابتة لجهاز التحكم في الطيران إلى ELF. يجد بعض القيم المرمزة في البيانات الثنائية ، ويسمح بتصديرها أو استيرادها.
مثال على تصدير القيم المرمزة إلى ملف JSON:
./dji_flyc_hardcoder.py -vvv -x -e P3X_FW_V01.07.0060_m0306.elf
مثال على استيراد القيم من ملف JSON إلى قزم:
./dji_flyc_hardcoder.py -vvv -u -e P3X_FW_V01.07.0060_m0306.elf
يجد محرر صفيف البرامج الثابتة لجهاز تحكم Flight مجموعة من معلمات الطيران داخل البرامج الثابتة ، ويسمح باستخراج المعلمات إلى ملف نصي تنسيق 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 Pareser مع تنسيق إخراج PCAP.
يقوم البرنامج النصي بتوزيع دفق DUML الخام (أي ملفات سجل الطيران FLY???.DAT يتم فحص الحزم CRC قبل تمرير البيانات. يمكن بعد ذلك استخدام أي أداة ذات دعم تنسيق PCAP لتحليل البيانات (أي Wireshark).
مثال على تحويل ملف سجل الرحلة:
./comm_dat2pcap.py -vv -d FLY002.DAT
DJI Serial Bus Sniffer مع DUML Packetizer وتنسيق إخراج PCAP.
يلتقط البرنامج النصي بيانات من اثنين من uarts ويلتف حزم DUML واحدة مع رؤوس PCAP. يتم التحقق من حزم CRC قبل تمرير البيانات إلى ملف PCAP أو أنبوب FIFO. يمكن بعد ذلك استخدام أي أداة ذات دعم تنسيق PCAP لتحليل البيانات (أي Wireshark).
تتطلب الأداة المساعدة اثنين من الواجهات التسلسلية مع خطوط RX متصلة بخطوط RX و TX داخل الطائرة بدون طيار.
مثال على بدء التقاط من محولات uart ttl (AKA FTDI):
./comm_serial2pcap.py -b 115200 -F /tmp/wsf /dev/ttyUSB0 /dev/ttyUSB1
DUML Packet Builder مع إخراج سلسلة Hex.
يمكن لهذه الأداة إنشاء حزمة 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
مثال على الحصول على قيمة معلمات وحدة تحكم الطيران على الشرارة:
./comm_og_service_tool.py --port /dev/ttyUSB0 -vv SPARK FlycParam get g_config.flying_limit.max_height_0 --fmt=2line
مثال على إعداد قيمة معلمات وحدة تحكم الرحلة على الشرارة:
./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 Host:
python3 comm_og_service_tool.py --port COM23 -vv SPARK GimbalCalib LinearHall
مثال على إدراج معلمات وحدة تحكم الطيران 200-300 على تنسيق Mavic 3 Pro to CSV:
./comm_og_service_tool.py --bulk MAV3 FlycParam list --start=200 --count=100 --fmt=csv
أداة اتصال نظام البطارية الذكية.
تسمح هذه الأداة بالتفاعل مع الرقائق المصممة على أساس مواصفات بيانات البطارية الذكية. كما يدعم بعض الامتدادات لتلك المواصفات التي تنفذها Texas Instruments في رقائق مقياس الغاز سلسلة BQ.
يتطلب استخدام هذه الأداة اتصالًا بخطوط SMBUS (SDA ، SCL ، GND) من رقاقة متوافقة مع SBS. يستخدم SMBUS Communication I2C كقاعدة ، لذلك يمكن استخدام معظم الأجهزة التي تحتوي على ناقل I2C لإنشاء الاتصال.
مثال على القراءة البسيطة لـ BatteryStatus () ، باستخدام واجهة I2C (سوف يقوم البرنامج النصي ببناء رسائل SMBUS داخليًا):
./comm_sbs_bqctrl.py -vvv --bus "i2c:1" --dev_address 0x0b read BatteryStatus
مثال على قراءة العديد من حقول العلم من BQ30Z55 بواسطة مصنّعة CannasePaticAccess () ، باستخدام واجهة SMBUS:
./comm_sbs_bqctrl.py -v --bus "smbus:1" --dev_address 0x0b --chip BQ30z55 --short monitor BQStatusBitsMA
مثال على إلغاء التمييز BQ30Z55 (تمكين إمكانيات الكتابة) ، مع مفتاح SHA-1 الافتراضي ، باستخدام واجهة I2C على جهاز الناقل الثاني المتاح لنظام التشغيل:
./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 ، ثم قارن الملف الناتج إلى الأصلي للتحقق مما إذا لم يتم تقديم أي تغييرات غير مقصودة.
إلى جانب اختبار التعديلات الخاصة بك ، يمكنك أيضًا استخدام الاختبارات كمصدر لمزيد من أمثلة الاستخدام للأدوات. يقومون بتسجيل خطوط الأوامر المستخدمة لاستخراج أجهزة Firmwares معينة وتنفيذ أوامر محددة على المنتجات.
يتم إعداد الاختبارات لاستخدامها مع 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 على الإطلاق وتريد فقط الرموز الأكثر اكتمالا - تحقق من حجم ملف الخريطة. يحتوي ملف MAP في الغالب على رموز تحمل اسمًا يدويًا ، وبالتالي فإن أكبر رموز مخصصة لإصدار البرامج الثابتة التي تم تنفيذ المزيد من الأعمال العكسية.