AVNET EMBEDDED MSC SM2S-IMX8M Depuració del port UART Ordinadors basats en ARM en instruccions del mòdul
AVNET EMBEDDED MSC SM2S-IMX8M Port UART de depuració Ordinadors basats en ARM al mòdul

Pròleg

Avís de drets d'autor

Copyright © 2023 Avnet Embedded GmbH. Tots els drets reservats. Queda prohibida la còpia d'aquest document, el lliurament a tercers i l'ús o comunicació dels continguts del mateix sense l'autorització expressa d'Avnet Embedded /MSC Technologies.

GmbH. Els infractors són responsables del pagament dels danys i perjudicis. Tots els drets estan reservats en cas de concessió d'una patent o registre d'un model d'utilitat o disseny.

Informació important

Aquesta documentació està destinada només a un públic qualificat. El producte aquí descrit no és un producte d'usuari final. Va ser desenvolupat i fabricat per a un posterior processament per personal format.

Exempció de responsabilitat

Tot i que aquest document s'ha generat amb la màxima cura, no hi ha cap garantia ni responsabilitat sobre la correcció o la idoneïtat per a cap propòsit particular. La informació d'aquest document es proporciona "tal com està" i està subjecta a canvis sense previ avís.

Marques comercials

Tots els noms de productes, logotips o marques comercials utilitzats són propietat dels seus respectius propietaris.

Informació general

Àmbit

Aquest document s'aplica a tots els ordinadors en mòduls incrustats d'Avnet basats en CPU de les sèries i.MX8 i i.MX9 NXP, com per exemple

  • 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

Aquesta llista no pretén ser exhaustiva, sobretot perquè es poden presentar noves juntes per a les quals s'apliquen els mateixos tràmits, mentre que aquest document pot no ser sempre actualitzat immediatament.

Revisions i modificacions

Revisió Data Comenta
1.0 25.05.2023 M. Koch Versió inicial

Com canviar el port UART de depuració

Introducció

Molts sistemes basats en ARM inclouen una consola sèrie com a mitjà principal d'accés per a la depuració i l'obertura del sistema. Depenent dels requisits del client, és una necessitat freqüent en aquests sistemes que el port UART de depuració predeterminat s'hagi de canviar a un port sèrie diferent. Per port UART de depuració ens referim al port UART que proporcionarà totes les entrades/sortides d'U-Boot, la sortida del registre d'arrencada del nucli i l'intèrpret d'ordres del nucli, bàsicament tota la comunicació UART que es veurà en una imatge mínima de Yocto. Atès que el port UART predeterminat no l'utilitza només un component de programari, sinó molts components, inclosos u-boot, atf-firmware, optee-os i el propi nucli, establir el port UART predeterminat pot ser un repte, i mésview es pot perdre ràpidament. En aquest document s'explicaran tots els passos a seguir per aconseguir aquesta tasca. Per a una explicació més fàcil, aquest document va ser escrit per al processador NXP i.MX8 MINI i mscldk, però es pot aplicar a tots els processadors de la sèrie i.MX8 i i.MX9 i altres sistemes de compilació amb molt poc esforç.

Preparació de l'entorn

Canviar el port UART de depuració predeterminat requerirà modificar el codi a Yocto, i la manera més senzilla de fer-ho és utilitzar Yocto devtool per preparar-nos les fonts. Caldrà modificar els següents paquets Yocto:

  • u-boot-imx (virtual/carregador d'arrencada)
  • linux-imx (virtual/nucli)
  • atf-imx
  • optee-os (només si s'utilitza optee)

Les fonts s'han de preparar amb devtool: 

$ ./devtool modifica u-boot-imx
$ ./devtool modifica linux-imx
$ ./devtool modifica atf-imx
$ ./devtool modifica optee-os

Totes les fonts es poden trobar al directori "espai de treball".

Modificació del codi

Modificació del carregador d'arrencada

Al carregador d'arrencada es produirà una inicialització bàsica d'UART, de manera que caldrà modificar el muxing i l'adreça base del port UART. La segona tasca d'u-boot és passar arguments d'arrencada al nucli i aquí caldrà modificar l'argument tty de la consola. La inicialització i el muxing d'UART es produeixen als primers stage del procés d'arrencada a l'SPL. El codi font es pot trobar a la placa específica spl.c file.

Objectiu file: workspace/sources/u-boot-imx/board/msc/sm2s_imx8mm/spl.c

Obriu el file i navegueu a la funció init_ser0():

static void init_ser0(void)
{
imx_iomux_v3_setup_multiple_pads(ser0_pads, ARRAY_SIZE(ser0_pads)); init_uart_clk(1);
}

La funció activa el rellotge per UART2 (índex 1 per a UART físic 2).

Ara, si volem utilitzar UART1, podríem definir la nostra pròpia funció init_ser1:

static void init_ser1(void)
{
imx_iomux_v3_setup_multiple_pads(ser1_pads, ARRAY_SIZE(ser1_pads)); init_uart_clk(0);
}

Substituïu la crida a la funció de init_ser0 per init_ser1() a la funció board_early_init_f(). A més, observem que l'estructura ser1_pads no està definida. Aquí caldrà estar al corrent del cablejat de l'UART1. A imx8mm, UART1 es pot mux a pads uart1 o a coixinets sai2. En conseqüència, ser1_pads es podria definir com:

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
};

O bé, utilitzant 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 };

Ara s'hauria de modificar l'adreça base UART, l'adreça es defineix a la configuració de la capçalera de la placa file.

Objectiu file: workspace/sources/u-boot-imx/include/configs/msc_sm2s_imx8mm.h

Modifiqueu la definició CONFIG_MXC_UART_BASE. Per a UART1 això seria: 

  • // #definir CONFIG_MXC_UART_BASE
  • UART2_BASE_ADDR
  • #definir CONFIG_MXC_UART_BASE
  • UART1_BASE_ADDR

Finalment, s'hauria de modificar l'argument del nucli de la consola. El valor es pot trobar a la mateixa capçalera file. Cerca “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..

Modificació del firmware de confiança d'ARM

Arm Trusted Firmware (imx-atf) no té una rutina d'inicialització UART pròpia, però té una adreça base UART codificada i es basa en la inicialització UART adequada des de l'u-boot. Una configuració d'adreça base diferent a u-boot i imx-atf probablement deixarà el processador enganxat en un controlador d'excepcions i no hi haurà res visible a UART (la CPU sembla que es penja sense cap motiu visible). Quan es canvia el port UART, aquest canvi també ha de passar a imx-atf! Canviar el port UART a imx-atf requereix una modificació de l'adreça base. Aquest valor s'estableix a platform.mk file del processador.

Objectiu file: workspace/sources/imx-atf/plat/imx/imx8m/imx8mm/platform.mk 

L'adreça base UART correcta es pot trobar al manual de referència imx8. En aquest exampCanviem de UART2 a UART1 a imx8mm:

# IMX_BOOT_UART_BASE ?= 0x30890000
IMX_BOOT_UART_BASE ?= 0x30860000

Modificació d'optee-os

El sistema operatiu Optee normalment es carrega quan s'utilitza la criptografia del mòdul CAAM al sistema. Optee funciona amb els mateixos nuclis ARM Cortex-A53, però en una altra instància completament independent com el nucli. Optee també requereix accés UART i en aquest cas significa una modificació de l'adreça base.

Objectiu file: workspace/sources/optee-os/core/arch/arm/plat-imx/conf.mk

Aquest exampli establirà l'adreça base UART de UART2 a UART1: 

#CFG_UART_BASE ?= UART2_BASE
CFG_UART_BASE ?= UART1_BASE

Modificació del nucli

El nucli només requerirà poques modificacions a l'arbre del dispositiu, i només si l'UART encara no està disponible al nucli. En molts casos, no caldrà cap modificació. Tanmateix, verifiqueu si la instància tty que voleu utilitzar existeix! Comproveu la presència de tty amb una comanda de shell:

$ ls /dev/ttymxc*

Si el ttymxc ja està disponible, no cal fer cap modificació. Per example, per a UART2 seria /dev/ttymxc1. Com ja sabem, l'índex de tty és sempre l'índex de l'UART físic menys 1. Si el tty requerit no està disponible, seguiu el procediment habitual d'integració UART.

Construir i provar

Per a una reconstrucció segura, s'ha d'aplicar una neteja completa:

$ ./bitbake –c cleanall u-boot-imx linux-imx imx-atf optee-os

Torneu a crear la imatge amb l'ordre de compilació predeterminada, per exempleampLI:

$ ./bitbake msc-image-base

Amb finalitats de prova, s'ha de connectar un adaptador UART a l'UART antic. No hi hauria d'haver més sortida a l'antiga UART! El nou UART hauria de ser completament funcional, per això, si us plau, verifiqueu la connexió utilitzant l'intèrpret d'ordres UART u-boot i la consola Linux.

Suport al producte

Els enginyers i tècnics d'Avnet Embedded es comprometen a oferir suport als nostres clients sempre que sigui necessari. Abans de posar-vos en contacte amb el suport tècnic d'Avnet Embedded, consulteu les pàgines respectives del nostre weblloc a
https://embedded.avnet.com/support/
per obtenir la documentació més recent, els controladors i les descàrregues de programari.

Si la informació que s'hi proporciona no resol el vostre problema, poseu-vos en contacte amb el nostre equip d'assistència tècnica d'Avnet Embedded de la següent manera:

Correu electrònic: support.boards@avnet.eu
Telèfon: +49 (0)8165 906-200

Logotip d'AVNET EMBEDDED

Documents/Recursos

AVNET EMBEDDED MSC SM2S-IMX8M Port UART de depuració Ordinadors basats en ARM al mòdul [pdfInstruccions
MSC SM2S-IMX8M, MSC SM2S-IMX8M Depuració d'ordinadors basats en el port UART ARM al mòdul, depuració d'ordinadors basats en el port UART ARM al mòdul, ordinadors basats en el port UART ARM al mòdul, ordinadors basats en el port ARM al mòdul, ordinadors basats en ARM al mòdul, ordinadors basats en ARM en mòdul, ordinadors en mòdul, mòdul

Referències

Deixa un comentari

La teva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats *