הגדרת סביבת Build

קל לארגן דפים בעזרת אוספים אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.

הצגת המקור ב-GitHub

כדי לקדם התפתחות חופשיה ופתוחה, OpenThread משתמשת ב-CMake בכלי פיתוח ה-build. בשלב זה, צריך להשתמש בארגז הכלים הזה לצורך ניוד OpenThread לפלטפורמת חומרה חדשה.

יכול להיות שבעתיד תהיה תמיכה בפיצ'רים נוספים של כלי build, אבל המדריך הזה לא נכלל בסעיפים האלה.

יצירת מאגר חדש

השלב הראשון הוא הגדרת בית חדש לפלטפורמת החומרה. במדריך זה ניצור מאגר חדש בשם 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.

בדוגמה הזו, נוסיף גרסת Lite של 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. זה עשוי לכלול סקריפטים למשימות כמו shoestraping, בנייה, הפעלת קישור קוד וסקריפט בדיקה לבדיקות GitHub CI.

בהמשך מוצגות כמה דוגמאות לסקריפטים רגילים לרוב מאגרי הפלטפורמות הקיימים.

bootstrap

בסקריפט הזה יש להתקין את כל הכלים והחבילות הנדרשים בפלטפורמת החומרה. כמו כן, היא צריכה להפעיל את סקריפט ה-openthread't של המשתמש יש את כל מה שצריך כדי ליצור את מחסנית OpenThread.

תוכלו לראות דוגמה בסקריפט של מגירה ב-ot-efr32.

build

סקריפט ה-build של CMake צריך לאפשר למשתמשים לבנות את מחסנית OpenThread עבור הפלטפורמה שלכם. אם במאגר שלכם מגדירים אפליקציות לדוגמה, גם הסקריפט הזה צריך לבנות אותן. הסקריפט הזה צריך לכלול את אפשרויות התצורה הבסיסיות של המערכת, כולל הגדרות מאקרו ספציפיות לפלטפורמה.

תוכלו לעיין בסקריפט של build ב-ot-efr32 כדי לראות דוגמה.

test

סקריפט בדיקה עשוי להיות שימושי למשתמשים לצורך בדיקת שינויים באמצעות בדיקות שהגדרת. התהליך יכול להיות פשוט כמו הרצת בדיקות שכליות (מורכבות) והפעלת מערכת מורכבת של בדיקת יחידות.

ב-ot-efr32, הסקריפט מפעיל את הסקריפט build לכל לוח נתמך בכל אחת מפלטפורמות efr32.

תוכלו לראות דוגמה בסקריפט הבדיקה שבot-efr32.

make-pretty

כדי לשמור על סגנון עקבי, הסקריפט צריך לפרמט קוד, סקריפטים וקובצי סימון.

אפשר להגדיר את הסקריפט הזה בעצמכם, אבל ייתכן שיהיה קל יותר להשתמש בסקריפט make-pretty שבו נעשה שימוש במאגרי פלטפורמה קיימים. הסקריפט מעודד שימוש בסקריפטים של סגנונות מסוג openthread'כדי להבטיח סגנון עקבי בכל מאגרי הנתונים של OpenThread.

הגדרת סקריפט של קישור

הסקריפט GNU Linker מתאר איך למפות את כל הקטעים בקובצי הקלט (.o "object" קבצים שנוצרו על ידי אוסף GNU Compiler (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
)

קוד ההפעלה של Toolchain

לעיתים קרובות, קוד ההפעלה של Toolchain מוצע יחד עם הפלטפורמה של BSP. בדרך כלל הקוד הזה:

  1. מיישמת את פונקציית הכניסה (Reset_Handler) של תוכנית ההפעלה
  2. הגדרת טבלת הוקטורים המפריעות
  3. מפעיל את הערימה (heap) של הערימה (heap)
  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
    $
)