إعداد بيئة الإصدار

عرض المصدر على 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 نصوص برمجية للبناء والاختبار وتصفيف الشعر
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.

في هذا المثال، نُضيف إصدارًا بسيطًا منسيليكون مختبرات Gicko 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. وقد يتضمّن ذلك نصوصًا برمجية لمهام مثل التشغيل التمهيدي وإنشاء لائحة تشغيل الرموز البرمجية واختبار نص برمجي لعمليات التحقّق من GitHub CI.

في ما يلي بعض الأمثلة على النصوص البرمجية القياسية في معظم مستودعات الأنظمة الأساسية الحالية.

bootstrap

يجب أن يُثبِّت هذا النص البرمجي جميع الأدوات والحزم التي يتطلبها النظام الأساسي لجهازك. ويجب عليها أيضًا تنفيذ النص البرمجي لحزمة التشغيل في openthread للتأكّد من أنّ المستخدم لديه كل ما يلزم لإنشاء حزمة OpenThread.

اطّلِع على النص البرمجي bootstrap في ot-efr32 للحصول على مثال.

build

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

يمكنك الاطِّلاع على النص البرمجي للإصدار في ot-efr32 للحصول على مثال.

test

قد يكون نص برمجي اختباري مفيدًا للمستخدمين لاختبار التغييرات باستخدام أي اختبارات حددتها. ويمكن أن يكون هذا إجراءً بسيطًا مثل تنفيذ عمليات التحقق من السلامة أو تعقيدًا مثل إطلاق مجموعة اختبار الوحدات.

في ot-efr32، يعمل النص البرمجي ببساطة على تنفيذ النص البرمجي build لكل لوحة مدعومة على كل نظام أساسي في efr32.

يمكنك الاطّلاع على النص البرمجي التجريبي في ot-efr32 للحصول على مثال.

make-pretty

للحفاظ على نمط متّسق، يجب أن يعمل هذا النص البرمجي على تنسيق الرموز والنصوص البرمجية وملفات ترميز المعلومات.

يمكنك تحديد هذا النص البرمجي بنفسك، ولكن قد يكون من الأسهل استخدام النص البرمجي make-pretty الذي تستخدمه مستودعات النظام الأساسي الحالية. يستدعي النص البرمجي النصوص البرمجية لنمط openthread ويساعد في ضمان نمط متّسق في جميع مستودعات OpenThread.

إعداد النص البرمجي للرابط

يصف النص البرمجي GNU Linker طريقة ربط جميع الأقسام في ملفات الإدخال (.o ملفات "Object" التي تنشئها مجموعة GNU Comiler (GCC)) بالنتيجة النهائية (على سبيل المثال، .elf). يحدّد البرنامج أيضًا موقع التخزين لكل شريحة من البرنامج القابل للتنفيذ، بالإضافة إلى عنوان الإدخال. يتم غالبًا توفير نص الرابط الخاص بالنظام الأساسي مع حزمة الخدمات الأساسية (BSP) للمنصة.

اضبط أداة ld للإشارة إلى النص البرمجي للرابط الخاص بالنظام الأساسي باستخدام target_link_libraries على هدف CMake على النظام الأساسي في 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. الانتقال السريع إلى وظيفة التطبيق الرئيسية لتنفيذ منطق التطبيق

يجب تضمين رمز بدء التشغيل (رمز المصدر أو تجميع العنصر) في مكتبة النظام الأساسي 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
    $
)