הגדרה של סביבת הבנייה

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

כדי לקדם פיתוח פתוח וחינמי, OpenThread משתמשת ב-CMake ב-build של כלי הבנייה. נכון לעכשיו, ה-chachain הזה נדרש לצורך ניוד 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 של ה-SDK של Gecko Labs ב-Silicon כמודול משנה ב-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

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

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

build

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

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

test

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

ב-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. אתחול הערימה והערימה
  4. מעתיק את הקטע .data מהזיכרון שאינו משתנה ל-RAM
  5. קפיצה אל הפונקציה הראשית של האפליקציה כדי להפעיל את לוגיקת האפליקציה

קוד ההפעלה (קוד מקור הרכבה) חייב להיכלל ב-Platform 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
    $
)