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

عرض المصدر على 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 وأي repos أخرى مطلوبة كوحدات فرعية.

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. وقد يتضمّن ذلك نصوصًا برمجية لمهام مثل التشغيل المبدئي والإنشاء وتشغيل مشغِّل linter ونص برمجي تجريبي لاختبارات GitHub CI.

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

bootstrap

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

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

build

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

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

test

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

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

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

make-pretty

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

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

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

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

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

رمز بدء تشغيل سلسلة الأدوات

غالبًا ما يتم توفير رمز بدء تشغيل لسلسلة الأدوات إلى جانب صفحة ملخّص الفوترة. هذا الرمز عادةً:

  1. تنفيذ دالة الإدخال (Reset_Handler) للبرنامج القابل للتنفيذ
  2. لتحديد جدول متجه المقاطعة
  3. لإعداد كومة الذاكرة المؤقتة وحزمة الفلاتر
  4. نسخ القسم .data من الذاكرة غير الثابتة إلى ذاكرة الوصول العشوائي
  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
    $
)