الاطّلاع على المصدر على GitHub
للترويج للتطوير المجاني والمفتوح، تستخدم OpenThread أداة CMake في سلسلة أدوات الإنشاء. سلسلة الأدوات هذه مطلوبة حاليًا لنقل البيانات OpenThread إلى نظام أساسي جديد للأجهزة
قد يتم توفير سلاسل أدوات إنشاء أخرى في المستقبل، ولكن لا يتم توفيرها ضمن نطاق دليل النقل هذا.
إنشاء مستودع جديد
الخطوة الأولى هي إعداد منزل جديد للنظام الأساسي لأجهزتك. في هذا الدليل، سننشئ مستودعًا جديدًا باسم ot-efr32 يحتوي على طبقة التجريد للنظام الأساسي وحزمة تطوير البرامج (SDK) للنظام الأساسي للأجهزة وبعض النصوص البرمجية المفيدة.
في هذا المثال، أنشأنا المستودع SiliconLabs/ot-efr32 على GitHub واستنساخه إلى ~/repos/ot-efr32.
mkdir -p ~/reposcd ~/reposgit clone git@github.com:SiliconLabs/ot-efr32.gitCloning into 'ot-efr32'... remote: Enumerating objects: 99, done. remote: Counting objects: 100% (99/99), done. remote: Compressing objects: 100% (60/60), done. remote: Total 333 (delta 65), reused 39 (delta 39), pack-reused 234 Receiving objects: 100% (333/333), 170.78 KiB | 5.69 MiB/s, done. Resolving deltas: 100% (194/194), done.git statusOn branch main Your branch is up to date with 'origin/main'. nothing to commit, working tree clean
بنية المستودع
للمساعدة في الحفاظ على الاتساق مع مستودعات النظام الأساسي الحالية في مؤسسة OpenThread GitHub، قد تحتاج إلى تنظيم بنية المستودع على هذا النحو:
tree -F -L 1 --dirsfirst
.
├── examples/
├── openthread/
├── script/
├── src/
├── third_party/
├── CMakeLists.txt
├── LICENSE
└── README.md
| مجلد | الوصف |
|---|---|
examples |
اختياري أمثلة على التطبيقات |
openthread |
مستودع openthread كوحدة فرعية |
script |
النصوص البرمجية للإنشاء والاختبار واستخدام أداة Lint |
src |
تنفيذ طبقة تجريد النظام الأساسي |
third_party |
الموقع الجغرافي لأي مصادر تابعة لجهات خارجية |
إضافة وحدات فرعية
الخطوة التالية هي إضافة openthread وأي مستودعات أخرى مطلوبة كوحدات فرعية.
git submodule add git@github.com:openthread/openthread.git
Cloning into '/home/user/repos/ot-efr32/openthread'...
remote: Enumerating objects: 78281, done.
remote: Counting objects: 100% (1056/1056), done.
remote: Compressing objects: 100% (488/488), done.
remote: Total 78281 (delta 639), reused 864 (delta 556), pack-reused 77225
Receiving objects: 100% (78281/78281), 76.62 MiB | 35.24 MiB/s, done.
Resolving deltas: 100% (61292/61292), done.
في هذا المثال، سنضيف إصدارًا بسيطًا من Silicon Labs Gecko SDK كوحدة فرعية في third_party.
cd third_partygit submodule add git@github.com:SiliconLabs/sdk_support.gitCloning into '/home/user/repos/ot-efr32/third_party/sdk_support'... remote: Enumerating objects: 32867, done. remote: Counting objects: 100% (8181/8181), done. remote: Compressing objects: 100% (3098/3098), done. remote: Total 32867 (delta 4945), reused 7469 (delta 4732), pack-reused 24686 Receiving objects: 100% (32867/32867), 128.83 MiB | 30.91 MiB/s, done. Resolving deltas: 100% (19797/19797), done.
النصوص البرمجية
لتسهيل المهام الشائعة، ننصحك بإنشاء بعض النصوص البرمجية في المجلد "script". قد يشمل ذلك نصوصًا برمجية لمهام مثل Bootstrap، والإنشاء، وتشغيل أداة Code-linter، ونص اختباري لعمليات تحقق GitHub CI.
في ما يلي بعض الأمثلة على النصوص البرمجية التي تُعدّ معيارًا لمعظم مستودعات المنصات الحالية.
bootstrap
ينبغي أن يثبت هذا النص البرمجي جميع الأدوات والحزم التي يتطلبها النظام الأساسي لأجهزتك. ويجب أيضًا أن تنفِّذ أيضًا النص البرمجي للتشغيل الأولي في openthread للتأكّد من أنّ المستخدم لديه كل ما يلزم لإنشاء حزمة OpenThread.
للاطّلاع على مثال، يمكنك الاطّلاع على النص البرمجي للتشغيل السريع في ot-efr32.
build
يجب أن يسمح النص البرمجي للإصدار CMake للمستخدمين بإنشاء حزمة OpenThread من أجل نظامك الأساسي. إذا كان المستودع يحدد أي أمثلة على التطبيقات، فيجب أن ينشئ هذا النص البرمجي تلك التطبيقات أيضًا. يجب أن يحتوي هذا النص البرمجي على خيارات ضبط النظام الأساسية، بما في ذلك أي تعريفات ماكرو خاصة بالنظام الأساسي.
راجِع إنشاء نص برمجي في ot-efr32 للاطّلاع على مثال.
test
قد يكون النصّ البرمجي للاختبار مفيدًا للمستخدمين لاختبار التغييرات باستخدام أيّ اختبارات حدّدتها. ويمكن أن يكون هذا أي شيء بسيط مثل تنفيذ إصدارات للتأكد من السلامة أو معقدًا مثل إطلاق مجموعة اختبار من الوحدات.
في ot-efr32، ينفِّذ النص البرمجي ببساطة نص build البرمجي لكل لوحة متوافقة على كل نظام من أنظمة efr32 الأساسية.
للاطّلاع على مثال، راجِع النص البرمجي الاختباري في ot-efr32.
make-pretty
للحفاظ على النمط المتسق، يجب أن يعمل هذا النص البرمجي على تنسيق الرمز البرمجي والنصوص البرمجية وملفات markdown.
يمكنك تحديد هذا النص البرمجي بنفسك، ولكن قد يكون من الأسهل استخدام نص make-pretty البرمجي الذي تستخدمه مستودعات المنصة الحالية. يستدعي النص البرمجي النصوص البرمجية لأنماط openthread ويساعد في ضمان اتساق النمط في جميع مستودعات OpenThread.
إعداد النص البرمجي للرابط
النص البرمجي لرابط GNU
يصف كيفية ربط جميع الأقسام في ملفات الإدخال (ملفات "كائن" .o)
مجموعة أدوات تجميع GNU (GCC)) إلى ملف الإخراج النهائي (لـ
مثل .elf). كما أنها تحدد موقع التخزين لكل جزء من
والبرنامج التنفيذي، بالإضافة إلى عنوان الإدخال. الرابط الخاص بالنظام الأساسي
البرنامج النصي غالبًا مع وسيط عرض الطلب (BSP) للنظام الأساسي.
ضبط أداة ld للتوجيه إلى النص البرمجي للرابط الخاص بالنظام الأساسي باستخدام
target_link_libraries على منصتك Cجعل الهدف في src/CMakeLists.txt:
set(LD_FILE "${CMAKE_CURRENT_SOURCE_DIR}/efr32mg12.ld")
target_link_libraries(openthread-efr32mg12
PRIVATE
ot-config
PUBLIC
-T${LD_FILE}
-Wl,--gc-sections -Wl,-Map=$.map
)
رمز بدء تشغيل سلسلة الأدوات
غالبًا ما يتم توفير رمز بدء تشغيل سلسلة الأدوات مع واجهة BSP للنظام الأساسي. هذا النمط التعليمات البرمجية عادة:
- تنفيذ دالة الإدخال (
Reset_Handler) للبرنامج التنفيذي - تحديد جدول متجه المقاطعة
- يقوم بتهيئة لقطة لأجزاء من الذاكرة والتكديس
- يتم نسخ قسم
.dataمن ذاكرة غير متطايرة إلى ذاكرة الوصول العشوائي (RAM). - الانتقال إلى الوظيفة الرئيسية للتطبيق لتنفيذ منطق التطبيق
يجب تضمين رمز بدء التشغيل (C أو رمز مصدر المجموعة) في النظام الأساسي
مكتبة openthread-platform-name، أو استخدام بعض المتغيّرات الرئيسية في أداة الربط
لا يمكن وضع علامة اقتباس للنص البرمجي بشكل صحيح:
src/CMakeLists.txt
مثال: startup-gcc.c في ot-cc2538 - src/CMakeLists.txt
add_library(openthread-cc2538
alarm.c
...
startup-gcc.c
...
system.c
logging.c
uart.c
$
)