إعداد بيئة الإنشاء

الاطّلاع على المصدر على GitHub

للترويج للتطوير المجاني والمفتوح، تستخدم OpenThread أداة CMake في سلسلة أدوات الإنشاء. سلسلة الأدوات هذه مطلوبة حاليًا لنقل البيانات OpenThread إلى نظام أساسي جديد للأجهزة

قد يتم توفير سلاسل أدوات إنشاء أخرى في المستقبل، ولكن لا يتم توفيرها ضمن نطاق دليل النقل هذا.

إنشاء مستودع جديد

الخطوة الأولى هي إعداد منزل جديد للنظام الأساسي لأجهزتك. في هذا الدليل، سننشئ مستودعًا جديدًا باسم ot-efr32 يحتوي على طبقة التجريد للنظام الأساسي وحزمة تطوير البرامج (SDK) للنظام الأساسي للأجهزة وبعض النصوص البرمجية المفيدة.

في هذا المثال، أنشأنا المستودع SiliconLabs/ot-efr32 على GitHub واستنساخه إلى ~/repos/ot-efr32.

mkdir -p ~/repos
cd ~/repos
git clone git@github.com:SiliconLabs/ot-efr32.git
Cloning 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 status
On 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_party
git submodule add git@github.com:SiliconLabs/sdk_support.git
Cloning 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 للنظام الأساسي. هذا النمط التعليمات البرمجية عادة:

  1. تنفيذ دالة الإدخال (Reset_Handler) للبرنامج التنفيذي
  2. تحديد جدول متجه المقاطعة
  3. يقوم بتهيئة لقطة لأجزاء من الذاكرة والتكديس
  4. يتم نسخ قسم .data من ذاكرة غير متطايرة إلى ذاكرة الوصول العشوائي (RAM).
  5. الانتقال إلى الوظيفة الرئيسية للتطبيق لتنفيذ منطق التطبيق

يجب تضمين رمز بدء التشغيل (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
    $
)