יומני OpenThread

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

יומני OpenThread נשלטים על ידי קבועים רבים של הגדרות זמן עריכה. אלא אם צוין אחרת, הקבועים הבאים מוגדרים בקובץ הבא:

openthread/src/core/config/logging.h

שיטות פלט

OpenThread תומך בשיטות שונות לרישום ביומן הפלט, שמוגדרות כקבועות ההגדרה של זמן הביצוע של OPENTHREAD_CONFIG_LOG_OUTPUT. האפשרויות של שיטת הרישום מופיעות בקובץ הבא:

openthread/src/core/config/logging.h

הגדרת ברירת המחדל של פלט היומן היא OPENTHREAD_CONFIG_LOG_OUTPUT_PLATFORM_DEFINED.

שיטת הפלט היא דוגמה לתרחיש שבו ייתכן שתצטרכו לעדכן את ההגדרות האישיות קבועות, במקום את הליבה. לדוגמה, כדי לשנות את שיטת הפלט באפליקציה לדוגמה לדוגמה, יש לערוך את openthread/examples/platforms/simulation/openthread-core-simulation-config.h במקום את openthread/src/core/config/logging.h.

רמות היומן

היומנים יכולים ליצור משתני פלט ברמות שונות של מידע, שמוגדרים כקבועים בקומפוזיציה של זמן ההידור של OPENTHREAD_CONFIG_LOG_LEVEL. אפשרויות הרמה מופיעות בקובץ הבא:

openthread/include/openthread/platform/logging.h

רשימת הרמות ביומן הרישום זמינה גם בהפניית ה-API של Platform Logs Macros.

רמת ברירת המחדל של היומן היא OT_LOG_LEVEL_CRIT שמפיקה רק את היומנים הקריטיים ביותר. משנים את הרמה כדי לראות יותר יומנים לפי הצורך. כדי לראות את כל יומני OpenThread, צריך להשתמש ב-OT_LOG_LEVEL_DEBG.

רישום אזורים

האזורים ביומן קובעים אילו אזורים בקוד פתוח של OpenThread מופעלים לתיעוד. מספור האזורים בקובץ הבא מוגדר:

openthread/include/openthread/platform/logging.h

רשימת האזורים ביומן זמינה גם בחומר העזר בנושא Enumerations API לרישום ביומן בפלטפורמה.

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

פונקציית רישום ברירת המחדל

פונקציית ברירת המחדל לרישום ביומן ב-OpenThread היא otPlatLog, שמוגדרת בתור קבוע התצורה של זמן ההידור, OPENTHREAD_CONFIG_PLAT_LOG_FUNCTION.

מידע נוסף על הפונקציה הזו זמין במאמר API Logging בפלטפורמה.

כדי להשתמש בפונקציה הזו ישירות באפליקציות לדוגמה של OpenThread, צריך להשתמש באפשרות הייצור של OT_REFERENCE_DEVICE. לדוגמה, כדי להשתמש ב-CLI באפליקציית CC2538 לדוגמה:

./script/build -DOT_REFERENCE_DEVICE=ON

לחלופין, אפשר לעדכן את הקובץ openthread/etc/cmake/options.cmake כדי להפעיל אותו כברירת מחדל בזמן יצירת הקובץ.

איך מפעילים יומנים?

לפני שמפעילים יומנים, חשוב לוודא שהסביבה מוגדרת לבניית OpenThread. מידע נוסף זמין במאמר Build OpenThread.

הפעלת כל היומנים

כדי להפעיל במהירות את כל הרמות והאזורים ביומן, יש להשתמש באפשרות לוח האם OT_FULL_LOGS:

./script/build -DOT_FULL_LOGS=ON

המתג הזה מגדיר את רמת היומן ל-OT_LOG_LEVEL_DEBG ומפעיל את כל הסימונים באזור.

הפעלת רמה ספציפית של יומנים

כדי להפעיל רמה ספציפית של יומנים, צריך לערוך את openthread/src/core/config/logging.h, לעדכן את OPENTHREAD_CONFIG_LOG_LEVEL לרמה הרצויה ואז לפתוח את OpenThread. לדוגמה, כדי להפעיל יומנים עד OT_LOG_LEVEL_INFO:

#define OPENTHREAD_CONFIG_LOG_LEVEL OT_LOG_LEVEL_INFO
./script/build

הצגת היומנים ב-Syslog

יומנים נשלחים אל syslog כברירת מחדל. ב-Linux, הערך הוא /var/log/syslog.

  1. יצירת דוגמה לסימולציה כשכל היומנים מופעלים:
    cd openthread
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  2. יצירת צומת מדומה:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  3. בחלון הטרמינל החדש, מגדירים פלט בזמן אמת של יומני ה-OT:
    tail -F /var/log/syslog | grep "ot-cli-ftd"
    
  4. בצומת המדמות, הצג את השרשור:
dataset init new
Done
dataset
Active Timestamp: 1
Channel: 13
Channel Mask: 07fff800
Ext PAN ID: d63e8e3e495ebbc3
Mesh Local Prefix: fd3d:b50b:f96d:722d/64
Network Key: dfd34f0f05cad978ec4e32b0413038ff
Network Name: OpenThread-8f28
PAN ID: 0x8f28
PSKc: c23a76e98f1a6483639b1ac1271e2e27
Security Policy: 0, onrcb
Done
dataset commit active
Done
ifconfig up
Done
thread start
Done

חוזרים לחלון הטרמינל שמריצים בו את הפקודה tail. היומנים צריכים להיות מוצגים בזמן אמת עבור הצומת מדומה. יש לשים לב לתגי היומן בפלט: [INFO], [DEBG], [NOTE]. כל התרחישים האלה תואמים לרמות הרישום ביומן. לדוגמה, אם משנים את רמת היומן ל-OT_LOG_LEVEL_INFO, יומני DEBG ייעלמו מהפלט.

ot-cli-ftd[30055]: [1] [DEBG]-MAC-----: SrcAddrMatch - Cleared all entries
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: Read NetworkInfo {rloc:0x9c00, extaddr:1a4aaf5e97c852de, role:Leader, mode:0x0f, keyseq:0x0, ...
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: ... pid:0x8581bc9, mlecntr:0x3eb, maccntr:0x3e8, mliid:05e4b515e33746c8}
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Notifier: StateChanged (0x7f133b) [Ip6+ Ip6- LLAddr MLAddr Rloc+ KeySeqCntr NetData Ip6Mult+ Channel PanId NetName ExtPanId MstrKey PSKc SecPolicy]
ot-cli-ftd[30055]: [1] [INFO]-CLI-----: execute command: dataset panid
ot-cli-ftd[30055]: [1] [INFO]-CLI-----: execute command: dataset commit active
ot-cli-ftd[30055]: [1] [INFO]-MESH-CP-: Active dataset set
ot-cli-ftd[30055]: [1] [DEBG]-MAC-----: Idle mode: Radio sleeping
ot-cli-ftd[30055]: [1] [DEBG]-MAC-----: RadioPanId: 0x8f28
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Notifier: StateChanged (0x007f0100) [KeySeqCntr Channel PanId NetName ExtPanId MstrKey PSKc SecPolicy]
ot-cli-ftd[30055]: [1] [INFO]-CLI-----: execute command: ifconfig up
ot-cli-ftd[30055]: [1] [DEBG]-MAC-----: Idle mode: Radio receiving on channel 11
ot-cli-ftd[30055]: [1] [INFO]-CLI-----: execute command: thread start
ot-cli-ftd[30055]: [1] [NOTE]-MLE-----: Role Disabled -> Detached
ot-cli-ftd[30055]: [1] [INFO]-MLE-----: Attempt to become router
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: Read NetworkInfo {rloc:0x9c00, extaddr:1a4aaf5e97c852de, role:Leader, mode:0x0f, keyseq:0x0, ...
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: ... pid:0x8581bc9, mlecntr:0x3eb, maccntr:0x3e8, mliid:05e4b515e33746c8}
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: Saved NetworkInfo {rloc:0x9c00, extaddr:1a4aaf5e97c852de, role:Leader, mode:0x0f, keyseq:0x0, ...
ot-cli-ftd[30055]: [1] [INFO]-CORE----: Non-volatile: ... pid:0x8581bc9, mlecntr:0x7d4, maccntr:0x7d0, mliid:05e4b515e33746c8}
ot-cli-ftd[30055]: [1] [DEBG]-MLE-----: Store Network Information
ot-cli-ftd[30055]: [1] [INFO]-MLE-----: Send Link Request (ff02:0:0:0:0:0:0:2)

הצגת יומנים באפליקציה של CLI

ניתן להציג את היומנים ישירות באפליקציה לדוגמה של OpenThread CLI.

  1. ערכו את קובץ התצורה של הפלטפורמה לדוגמה ושנו את פלט היומן לאפליקציה. בדוגמת הסימולציה: openthread/examples/platforms/simulation/openthread-core-simulation-config.h:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. לבנות את דוגמת הסימולציה ברמה הרצויה של היומנים. כדי להפעיל את כל היומנים:
    ./script/cmake-build simulation -DOT_FULL_LOGS=ON
    
  3. יצירת צומת מדומה:
    ./build/simulation/examples/apps/cli/ot-cli-ftd 1
    
  4. הפלט של היומן אמור להופיע בחלון זהה לזה של ה-CLI של OpenThread בזמן העיבוד של הפקודות.

אם הוספתם יומן רישום בהתאמה אישית והפעלתם את כל היומנים, יכול להיות שמאגר הנתונים של מאגר CLI או מאגר השידור של UART לא יהיו גדולים מספיק כדי לטפל ביומנים המותאמים אישית הנוספים. אם חלק מהיומנים לא מופיעים כשצריכים להופיע, כדאי לנסות להגדיל את מאגר הנתונים הזמני של CLI, שמוגדר ל-OPENTHREAD_CONFIG_CLI_MAX_LINE_LENGTH ב-/openthread/src/cli/cli_config.h או להגדיל את מאגר הנתונים הזמני של ה-UART המוגדר כ-OPENTHREAD_CONFIG_CLI_UART_TX_BUFFER_SIZE בקובץ התצורה של הפלטפורמה, למשל /src/nrf52840/openthread-core-nrf52840-config.h.

צפייה ביומנים של NCP

ייתכן שיומנים של NCP יישלחו דרך wpantund אל syslog של מארח. במארח Linux, הערך הוא /var/log/syslog.

שימוש בערך OPENTHREAD_CONFIG_LOG_OUTPUT של OPENTHREAD_CONFIG_LOG_OUTPUT_APP כדי להפעיל רישום של NCP. תוכלו לשנות זאת בקובץ התצורה של הפלטפורמה.

לדוגמה, כדי להפעיל את ההגדרה הזו עבור nrf52840 שמחובר למארח Linux:

  1. ערכו את קובץ התצורה של הפלטפורמה ושנו את פלט היומן לאפליקציה. עבור nrf52840, הערך הוא ./src/nrf52840/openthread-core-nrf52840-config.h במאגר ot-nrf528xx:
    #define OPENTHREAD_CONFIG_LOG_OUTPUT OPENTHREAD_CONFIG_LOG_OUTPUT_APP
    
  2. בנה את הדוגמה של nrf52840 עם רמת היומנים הרצויה וסימונים ספציפיים ל-NCP. כדי ליצור איחוד עם כל היומנים שהופעלו:
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON
    
  3. מחליפים את ה-NCP, מחברים אותו למארח Linux ומפעילים את wpantund כפי שמפורט במאגר wpantund.

  4. לאחר שה-NCP פועל, בודקים את syslog ב-Linux במחשב:

    tail -F /var/log/syslog | grep "wpantund"
    

  5. ב-NCP אמורים להופיע יומני OpenThread בזמן אמת. יכול להיות שיופיעו גם בפלט של wpantund.

שינוי רמת היומן בזמן הריצה

ניתן לשנות את רמות היומן בזמן הריצה אם מופעל שליטה ברמת היומן הדינמי.

  1. אפשר לפתח את האפליקציה עם האפשרות -DOT_LOG_LEVEL_DYNAMIC=ON. לדוגמה,
    ./script/build nrf52840 UART_trans -DOT_JOINER=ON -DOT_FULL_LOGS=ON -DOT_LOG_LEVEL_DYNAMIC=ON
    
  2. משנים את רמת היומן בהתאם להטמעה:
    1. ב-System-on-Sop (SoC), השתמשו ב-Logging API באפליקציית OpenThread.
    2. ל-NCP, יש להשתמש בשורה wpanctl בשורת הפקודה. במאגר של wpantund תוכלו לראות wpan-properties.h את כל הנכסים שנחשפו ל-wpanctl, ואת Spinel API להגדרות של רמת הרישום ביומן.
      wpanctl set OpenThread:LogLevel 5