AVNET EMBEDDED MSC SM2S-IMX8M Debug porta UART Computer basati su ARM sulle istruzioni del modulo
Prefazione
Avviso di copyright
Copyright © 2023 Avnet Embedded GmbH. Tutti i diritti riservati. La copia di questo documento, la fornitura ad altri e l'uso o la comunicazione dei suoi contenuti sono vietati senza l'espressa autorizzazione di Avnet Embedded /MSC Technologies
GmbH. I trasgressori sono tenuti al risarcimento dei danni. Tutti i diritti sono riservati in caso di concessione di un brevetto o di registrazione di un modello di utilità o di un disegno.
Informazioni importanti
Questa documentazione è destinata esclusivamente a un pubblico qualificato. Il prodotto qui descritto non è un prodotto per l'utente finale. È stato sviluppato e prodotto per l'ulteriore lavorazione da parte di personale qualificato.
Disclaimer
Sebbene questo documento sia stato redatto con la massima cura, non è implicita alcuna garanzia o responsabilità per la correttezza o l'idoneità per uno scopo particolare. Le informazioni contenute in questo documento vengono fornite "così come sono" e sono soggette a modifiche senza preavviso.
Marchi
Tutti i nomi di prodotti, loghi o marchi utilizzati appartengono ai rispettivi proprietari.
Informazioni generali
Ambito
Questo documento si applica a tutti i Computer-on-Module integrati Avnet basati sulle CPU NXP serie i.MX8 e i.MX9, come ad es.
- 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
Questo elenco non ha la pretesa di essere esaustivo, tanto più che potrebbero essere rilasciate nuove schede per le quali potranno essere applicate le stesse procedure, mentre questo documento potrebbe non essere sempre aggiornato immediatamente.
Revisioni e modifiche
Revisione | Data | Commento | |
1.0 | 25.05.2023 | Il signor Koch | Versione iniziale |
Come modificare la porta UART di debug
Introduzione
Molti sistemi basati su ARM sono dotati di una console seriale come principale mezzo di accesso per scopi di debug e avvio del sistema. A seconda delle esigenze del cliente, in tali sistemi è una necessità frequente che la porta UART di debug predefinita debba essere commutata su una porta seriale diversa. Per porta UART di debug intendiamo la porta UART che fornirà tutti gli input/output di U-Boot, l'output del bootlog del kernel e la shell del kernel, praticamente tutta la comunicazione UART che si vedrà in un'immagine Yocto minima. Poiché la porta UART predefinita non viene utilizzata da un solo componente software, ma piuttosto da molti componenti, tra cui u-boot, firmware atf, optee-os e il kernel stesso, l'impostazione della porta UART predefinita può essere complessa eview può essere perso rapidamente. Questo documento spiegherà tutti i passaggi da seguire per raggiungere questo obiettivo. Per una spiegazione più semplice, questo documento è stato scritto per il processore NXP i.MX8 MINI e mscldk, ma può essere applicato a tutti i processori delle serie i.MX8 e i.MX9 e ad altri sistemi di build con uno sforzo minimo.
Preparazione dell'ambiente
La modifica della porta UART di debug predefinita richiederà la modifica del codice in Yocto e il modo più semplice per farlo è utilizzare Yocto devtool per preparare i sorgenti per noi. Sarà necessario modificare i seguenti pacchetti Yocto:
- u-boot-imx (virtuale/bootloader)
- linux-imx (virtuale/kernel)
- atf-imx
- optee-os (solo se viene utilizzato optee)
I sorgenti dovrebbero essere preparati con devtool:
$ ./devtool modifica u-boot-imx
$ ./devtool modifica linux-imx
$ ./devtool modifica atf-imx
$ ./devtool modifica optee-os
Tutte le fonti possono essere trovate nella directory "workspace".
Modifica del codice
Modifica del Bootloader
Nel bootloader avverrà una inizializzazione UART di base, quindi sarà necessario modificare il muxing e l'indirizzo base della porta UART. Il secondo compito di u-boot è passare gli argomenti di avvio al kernel e qui sarà necessario modificare l'argomento tty della console. L'inizializzazione e il multiplexing UART avvengono nei primi anni stage del processo di avvio nell'SPL. Il codice sorgente può essere trovato nel file spl.c specifico della scheda file.
Bersaglio file: area di lavoro/sources/u-boot-imx/board/msc/sm2s_imx8mm/spl.c
Aprire il file e vai alla funzione init_ser0():
vuoto statico init_ser0(void)
{
imx_iomux_v3_setup_multiple_pads(ser0_pads, ARRAY_SIZE(ser0_pads)); init_uart_clk(1);
}
La funzione attiva l'orologio per UART2(indice 1 per UART fisico 2).
Ora, se vogliamo invece utilizzare UART1, potremmo definire la nostra funzione init_ser1:
vuoto statico init_ser1(void)
{
imx_iomux_v3_setup_multiple_pads(ser1_pads, ARRAY_SIZE(ser1_pads)); init_uart_clk(0);
}
Sostituisci la chiamata alla funzione di init_ser0 con init_ser1() nella funzione board_early_init_f(). Inoltre notiamo che la struttura ser1_pads non è definita. Qui sarà necessario essere a conoscenza del cablaggio di UART1. Su imx8mm, UART1 può essere muxato su pad uart1 o su pad sai2. Di conseguenza, ser1_pads potrebbe essere definito come:
statico 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
};
Oppure, usando sai2:
statico 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 };
Ora l'indirizzo di base UART dovrebbe essere modificato, l'indirizzo è definito nella configurazione dell'intestazione della scheda file.
Bersaglio file: area di lavoro/sources/u-boot-imx/include/configs/msc_sm2s_imx8mm.h
Modificare la definizione CONFIG_MXC_UART_BASE. Per UART1 questo sarebbe:
- // #definisce CONFIG_MXC_UART_BASE
- UART2_BASE_ADDR
- #definire CONFIG_MXC_UART_BASE
- UART1_BASE_ADDR
Infine, l'argomento del kernel della console dovrebbe essere modificato. Il valore può essere trovato nella stessa intestazione file. Cercare "console=ttymxc1..." e modifica "ttymxc1" in "ttymxc0". Il numero di indice è correlato all'indice UART ed è sempre l'indice UART meno 1. Quindi per UART 2 usiamo ttymxc1, per UART 3 usiamo ttymxc2 ecc.
Modifica del firmware affidabile ARM
Arm Trusted Firmware (imx-atf) non ha una propria routine di inizializzazione UART, tuttavia ha un indirizzo di base UART codificato e si basa sulla corretta inizializzazione UART da u-boot. Una diversa configurazione dell'indirizzo di base in u-boot e imx-atf molto probabilmente lascerà il processore bloccato in un gestore di eccezioni e non ci sarà nulla di visibile su UART (la CPU sembra bloccarsi senza una ragione visibile). Quando la porta UART viene modificata, questa modifica deve avvenire anche in imx-atf! La modifica della porta UART in imx-atf richiede una modifica dell'indirizzo di base. Questo valore è impostato in platform.mk file del processore.
Bersaglio file: spazio di lavoro/sources/imx-atf/plat/imx/imx8m/imx8mm/platform.mk
L'indirizzo di base UART corretto può essere trovato nel manuale di riferimento di imx8. In questo esample passiamo da UART2 a UART1 su imx8mm:
#IMX_BOOT_UART_BASE?= 0x30890000
IMX_BOOT_UART_BASE ?= 0x30860000
Modifica optee-os
Optee OS viene solitamente caricato quando sul sistema viene utilizzata la crittografia del modulo CAAM. Optee funziona sugli stessi core ARM Cortex-A53, ma in un'altra istanza completamente indipendente dal kernel. Optee richiede anche l'accesso UART e in questo caso significa una modifica dell'indirizzo di base.
Bersaglio file: spazio di lavoro/sources/optee-os/core/arch/arm/plat-imx/conf.mk
Questo example imposterà l'indirizzo di base UART da UART2 a UART1:
#CFG_UART_BASE ?= UART2_BASE
CFG_UART_BASE ?= UART1_BASE
Modifica del kernel
Il kernel richiederà solo poche modifiche all'albero dei dispositivi e solo se l'UART non è ancora disponibile nel kernel. In molti casi non sarà necessaria alcuna modifica. Tuttavia, verifica se l'istanza tty che desideri utilizzare esiste! Controlla la presenza di tty con un comando shell:
$ ls /dev/ttymxc*
Se ttymxc è già disponibile, non è necessaria alcuna modifica. Per esample, per UART2 questo sarebbe /dev/ttymxc1. Come già sappiamo, l'indice di tty è sempre l'indice dell'UART fisica meno 1. Se la tty richiesta non è disponibile, seguire la consueta procedura di integrazione UART.
Costruisci e prova
Per una ricostruzione sicura è necessario applicare una pulizia completa:
$ ./bitbake –c cleanall u-boot-imx linux-imx imx-atf optee-os
Costruisci nuovamente l'immagine con il comando build predefinito, ad esampon:
$ ./bitbake msc-immagine-base
A scopo di test, è necessario collegare un adattatore UART al vecchio UART. Non dovrebbero esserci più output sul vecchio UART! Il nuovo UART dovrebbe essere completamente funzionante, per questo verifica la connessione utilizzando la shell UART u-boot e la console Linux.
Supporto prodotto
Gli ingegneri e i tecnici di Avnet Embedded si impegnano a fornire supporto ai nostri clienti ogni volta che ne hanno bisogno. Prima di contattare il Supporto Tecnico di Avnet Embedded, consultare le rispettive pagine sul ns websito a
https://embedded.avnet.com/support/
per la documentazione, i driver e i download di software più recenti.
Se le informazioni fornite non risolvono il problema, contattare il nostro team di supporto tecnico Avnet Embedded come segue:
E-mail: support.boards@avnet.eu
Telefono: +49 (0)8165 906-200
Documenti / Risorse
![]() |
AVNET EMBEDDED MSC SM2S-IMX8M Debug porta UART Computer basati su ARM sul modulo [pdf] Istruzioni MSC SM2S-IMX8M, MSC SM2S-IMX8M Debug di computer basati su ARM porta UART sul modulo, Debug di computer basati su ARM porta UART sul modulo, Porta UART di computer basati su ARM sul modulo, Porta UART di computer basati su ARM sul modulo, Computer basati su ARM sul modulo, Computer basati sul modulo, computer sul modulo, modulo |