AVNET EMBEDDED MSC SM2S-IMX8M Debug UART Port ARM מבוססי מחשבים על הוראות מודול
הַקדָמָה
הודעת זכויות יוצרים
זכויות יוצרים © 2023 Avnet Embedded GmbH. כל הזכויות שמורות. העתקה של מסמך זה, מסירה לאחרים והשימוש או ההעברה של תוכנו, אסורים ללא סמכות מפורשת מאת Avnet Embedded /MSC Technologies
GmbH. העבריינים אחראים לתשלום פיצויים. כל הזכויות שמורות במקרה של מתן פטנט או רישום דגם שימוש או עיצוב.
מידע חשוב
תיעוד זה מיועד לקהלים מוסמכים בלבד. המוצר המתואר כאן אינו מוצר משתמש קצה. הוא פותח ויוצר להמשך עיבוד על ידי צוות מיומן.
כתב ויתור
למרות שמסמך זה נוצר בזהירות מרבית, לא משתמעת אחריות או אחריות לנכונות או התאמה לכל מטרה מסוימת. המידע במסמך זה מסופק "כמות שהוא" ונתון לשינויים ללא הודעה מוקדמת.
סימני מסחר
כל שמות המוצרים, סמלי הלוגו או הסימנים המסחריים בשימוש הם רכוש של בעליהם בהתאמה.
מידע כללי
תְחוּם
מסמך זה חל על כל Avnet Embedded Computer-on-Modules המבוססים על NXP i.MX8- ו-i.MX9 CPUs, כמו למשל.
- SM2S-IMX8PLUS
- SM2S-IMX8M
- SM2S-IMX8MINI
- SM2S-IMX8NANO
- SM2S-IMX8 (QuadPlus/QuadMax)
- SM2S-IMX93
- OSM-SF-IMX91
- OSM-SF-IMX93
- OSM-MF-IMX8NANO
- OSM-MF-IMX8MINI
רשימה זו אינה מתיימרת להיות ממצה, במיוחד מכיוון שעלולות לצאת לוחות חדשים שעליהם עשויים לחול אותם נהלים, בעוד שמסמך זה לא תמיד יתעדכן באופן מיידי.
תיקונים ושינויים
עדכון | תַאֲרִיך | הֶעָרָה | |
1.0 | 25.05.2023 | מ' קוך | גרסה ראשונית |
כיצד לשנות את יציאת UART לניפוי באגים
מָבוֹא
מערכות רבות המבוססות על ARM מגיעות עם קונסולה טורית כאמצעי הגישה העיקרי למטרות ניפוי באגים והעלאת מערכת. בהתאם לדרישות הלקוח, זה הכרחי שמתרחש לעתים קרובות במערכות כאלה שיש להעביר את יציאת ברירת המחדל של ניפוי UART ליציאה טורית אחרת. ב-debug port UART אנו מתכוונים ליציאת UART אשר תספק את כל הקלט/פלט של U-Boot, פלט אתחול הגרעין ומעטפת הקרנל, בעצם כל תקשורת UART שתראה בתמונת Yocto מינימלית. מכיוון שיציאת ברירת המחדל של UART אינה משמשת רק רכיב תוכנה אחד, אלא על ידי רכיבים רבים, כולל u-boot, atf-firmware, optee-os והקרנל עצמו, הגדרת יציאת ברירת המחדל של UART יכולה להיות מאתגרת, והסיוםview יכול ללכת לאיבוד במהירות. מסמך זה יסביר את כל השלבים שיש לבצע כדי להשיג משימה זו. להסבר קל יותר, מסמך זה נכתב עבור מעבד NXP i.MX8 MINI ו-mscldk, אך ניתן להחיל אותו על כל המעבדים מסדרות i.MX8 ו-i.MX9 ומערכות בנייה אחרות עם מעט מאוד מאמץ.
הכנת סביבה
שינוי יציאת ברירת המחדל של ניפוי UART ידרוש שינוי קוד ביוקטו, והדרך הקלה ביותר לעשות זאת היא להשתמש ב- Yocto devtool כדי להכין עבורנו את המקורות. יהיה צורך לשנות את חבילות Yocto הבאות:
- u-boot-imx (וירטואלי/מטען אתחול)
- linux-imx (וירטואלי/קרנל)
- atf-imx
- optee-os (רק אם נעשה שימוש ב-optee)
יש להכין מקורות עם devtool:
$ ./devtool שנה את u-boot-imx
$ ./devtool שנה את linux-imx
$ ./devtool שנה atf-imx
$ ./devtool שנה optee-os
ניתן למצוא את כל המקורות בספריית "סביבת העבודה".
שינוי קוד
שינוי של טוען האתחול
ב-bootloader תתרחש איזשהו אתחול UART בסיסי, כך שיהיה צורך לשנות את ה-muxing ואת כתובת הבסיס של יציאת UART. המשימה השנייה של u-boot היא להעביר ארגומנטים אתחול לקרנל וכאן יהיה צורך לשנות את הארגומנט tty של הקונסול. אתחול ו-Muxing של UART מתרחשים בראשית הימיםtage של תהליך האתחול ב-SPL. ניתן למצוא את קוד המקור ב-spl.c הלוח הספציפי file.
יַעַד file: workspace/sources/u-boot-imx/board/msc/sm2s_imx8mm/spl.c
פתח את file ונווט אל הפונקציה init_ser0():
ריק סטטי init_ser0(void)
{
imx_iomux_v3_setup_multiple_pads(ser0_pads, ARRAY_SIZE(ser0_pads)); init_uart_clk(1);
}
הפונקציה מפעילה את השעון עבור UART2(אינדקס 1 עבור UART פיזי 2).
כעת, אם נרצה להשתמש ב-UART1 במקום זאת, נוכל להגדיר את הפונקציה init_ser1 משלנו:
ריק סטטי init_ser1(void)
{
imx_iomux_v3_setup_multiple_pads(ser1_pads, ARRAY_SIZE(ser1_pads)); init_uart_clk(0);
}
החלף את קריאת הפונקציה של init_ser0 ב-init_ser1() בפונקציה board_early_init_f() . עוד אנו מבחינים שמבנה ser1_pads אינו מוגדר. כאן יהיה צורך להיות מודע לחיווט של UART1. ב-imx8mm, ניתן לחבר את UART1 לרפידות uart1, או לרפידות sai2. בהתאם לכך, ser1_pads עשויים להיות מוגדרים כ:
static iomux_v3_cfg_t const ser1_pads[] = {
IMX8MM_PAD_UART1_RXD_UART1_RX | DEFAULT_UART_PAD_CTRL, IMX8MM_PAD_UART1_TXD_UART1_TX | DEFAULT_UART_PAD_CTRL, NULL
};
לחלופין, באמצעות sai2:
static iomux_v3_cfg_t const ser1_pads[] = {
IMX8MM_PAD_SAI2_RXFS_UART1_TX | DEFAULT_UART_PAD_CTRL, IMX8MM_PAD_SAI2_RXC_UART1_RX | DEFAULT_UART_PAD_CTRL NULL };
כעת יש לשנות את כתובת הבסיס של UART, הכתובת מוגדרת בתצורת כותרת לוחות file.
יַעַד file: workspace/sources/u-boot-imx/include/configs/msc_sm2s_imx8mm.h
שנה את ההגדרה CONFIG_MXC_UART_BASE. עבור UART1 זה יהיה:
- // #define CONFIG_MXC_UART_BASE
- UART2_BASE_ADDR
- #define CONFIG_MXC_UART_BASE
- UART1_BASE_ADDR
לבסוף, יש לשנות את ארגומנט ליבת המסוף. ניתן למצוא את הערך באותה כותרת file. חפש “console=ttymxc1…” and modify “ttymxc1” to “ttymxc0”. The index number correlates to UART index, and is always UART index minus 1. So for UART 2 we use ttymxc1, for UART3 use ttymxc2 etc..
שינוי הקושחה מהימנה של ARM
ל- Arm Trusted Firmware (imx-atf) אין שגרת אתחול UART משלה, אולם יש לה כתובת בסיס UART מקודדת, והיא מסתמכת על אתחול UART נכון מ-u-boot. תצורת כתובת בסיס שונה ב-u-boot ו-imx-atf, ככל הנראה תשאיר את המעבד תקוע במטפל חריג, ולא יהיה שום דבר גלוי ב-UART (נראה שה-CPU נתקע ללא סיבה נראית לעין). כאשר יציאת UART משתנה, השינוי הזה חייב לקרות גם ב-imx-atf! שינוי יציאת UART ב-imx-atf דורש שינוי כתובת בסיס. ערך זה מוגדר ב-platform.mk file של המעבד.
יַעַד file: סביבת עבודה/sources/imx-atf/plat/imx/imx8m/imx8mm/platform.mk
ניתן למצוא את כתובת הבסיס הנכונה של UART במדריך העזר של imx8. באקס זהampאנחנו משנים מ-UART2 ל-UART1 ב-imx8mm:
# IMX_BOOT_UART_BASE ?= 0x30890000
IMX_BOOT_UART_BASE ?= 0x30860000
שינוי optee-os
מערכת ההפעלה Optee נטענת בדרך כלל כאשר נעשה שימוש בקריפטוגרפיה של מודול CAAM במערכת. Optee פועל על אותן ליבות ARM Cortex-A53, אך במופע אחר עצמאי לחלוטין כמו הקרנל. Optee דורשת גם גישת UART ובמקרה זה זה אומר שינוי כתובת בסיס.
יַעַד file: workspace/sources/optee-os/core/arch/arm/plat-imx/conf.mk
האקסית הזוample יגדיר את כתובת הבסיס של UART מ-UART2 ל-UART1:
#CFG_UART_BASE ?= UART2_BASE
CFG_UART_BASE ?= UART1_BASE
שינוי הליבה
הליבה תדרוש רק כמה שינויים בעץ המכשיר, ורק אם ה-UART עדיין לא זמין בליבה. במקרים רבים, לא יידרש שינוי כלל. עם זאת, אנא ודא אם מופע tty שבו אתה רוצה להשתמש קיים! בדוק את נוכחות ה-tty עם פקודת מעטפת:
$ ls /dev/ttymxc*
אם ה-ttymxc כבר זמין, אין צורך בשינוי. למשלample, עבור UART2 זה יהיה /dev/ttymxc1. כפי שאנו כבר יודעים, האינדקס של tty הוא תמיד האינדקס של UART הפיזי מינוס 1. אם ה-tty הנדרש אינו זמין, אנא עקוב אחר הליך האינטגרציה הרגיל של UART.
בנייה ובדיקה
לבנייה מחדש בטוחה יש לבצע ניקוי מלא:
$ ./bitbake –c cleanall u-boot-imx linux-imx imx-atf optee-os
בנה את התמונה שוב עם פקודת הבנייה המוגדרת כברירת מחדל, למשלampעל:
$ ./bitbake msc-image-base
לצורך בדיקה, יש לחבר מתאם UART ל-UART הישן. לא אמור להיות פלט נוסף ב-UART הישן! ה-UART החדש צריך להיות פונקציונלי במלואו, לשם כך נא ודא את החיבור על ידי שימוש במעטפת UART של u-boot ובמסוף הלינוקס.
תמיכת מוצר
מהנדסים וטכנאים של אבנט Embedded מחויבים לספק תמיכה ללקוחותינו בכל עת שצריך. לפני יצירת קשר עם התמיכה הטכנית של Avnet Embedded, אנא עיין בדפים המתאימים באתר שלנו webאתר ב
https://embedded.avnet.com/support/
עבור התיעוד העדכני ביותר, מנהלי התקנים והורדות תוכנה.
אם המידע שסופק שם אינו פותר את הבעיה שלך, אנא צור קשר עם צוות התמיכה הטכנית של Avnet Embedded שלנו באופן הבא:
אֶלֶקטרוֹנִי: support.boards@avnet.eu
טֵלֵפוֹן: +49 (0)8165 906-200
מסמכים / משאבים
![]() |
AVNET EMBEDDED MSC SM2S-IMX8M Debug UART Port ARM מבוססי מחשבים על מודול [pdfהוראות MSC SM2S-IMX8M, MSC SM2S-IMX8M באגים ביציאת UART מחשבים מבוססי ARM על מודול, באגים ביציאת UART ARM מבוססי מחשבים על מודול, יציאת UART ARM מבוססי מחשבים על מודול, יציאת ARM מבוססי מחשבים על מודול, מחשבים מבוססי ARM על מודול, מחשבים מבוססי ARM על מודול, מחשבים על מודול, מודול |