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

عرض المصدر على 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.

في هذا المثال، سنضيف إصدارًا بسيطًا من حزمة SDK لبرنامج Gecko من Silicon Labs كوحدة فرعية في 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.

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

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 Linker كيفية ربط جميع الأقسام في ملفات الإدخال (.o ملفات "العناصر" التي أنشأتها مجموعة مُجمّعات GNU (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 من الذاكرة غير القابلة للفقدان إلى ذاكرة الوصول العشوائي
  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
    $
)