AVNET EMBEDDED MSC SM2S-IMX8M Debug UART Port ARM-basierte Computer auf Modulanweisungen
Vorwort
Urheberrechtshinweis
Copyright © 2023 Avnet Embedded GmbH. Alle Rechte vorbehalten. Das Kopieren dieses Dokuments, die Weitergabe an andere sowie die Nutzung oder Mitteilung seines Inhalts sind ohne ausdrückliche Genehmigung von Avnet Embedded /MSC Technologies untersagt
GmbH. Zuwiderhandelnde sind schadenersatzpflichtig. Für den Fall der Erteilung eines Patents oder der Eintragung eines Gebrauchsmusters oder Designs bleiben alle Rechte vorbehalten.
Wichtige Informationen
Diese Dokumentation ist nur für qualifizierte Zielgruppen bestimmt. Das hier beschriebene Produkt ist kein Endbenutzerprodukt. Es wurde von geschultem Personal für die Weiterverarbeitung entwickelt und hergestellt.
Haftungsausschluss
Obwohl dieses Dokument mit größter Sorgfalt erstellt wurde, wird keine Garantie oder Haftung für die Richtigkeit oder Eignung für einen bestimmten Zweck übernommen. Die Informationen in diesem Dokument werden „wie besehen“ zur Verfügung gestellt und können ohne vorherige Ankündigung geändert werden.
Handelsmarken
Alle verwendeten Produktnamen, Logos oder Warenzeichen sind Eigentum ihrer jeweiligen Inhaber.
Allgemeine Informationen
Umfang
Dieses Dokument gilt für alle Avnet Embedded Computer-on-Modules auf Basis von NXP i.MX8- und i.MX9-CPUs, wie z.B.
- 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
Diese Liste erhebt keinen Anspruch auf Vollständigkeit, insbesondere da möglicherweise neue Boards auf den Markt kommen, für die möglicherweise die gleichen Verfahren gelten, und dieses Dokument möglicherweise nicht immer sofort aktualisiert wird.
Überarbeitungen und Änderungen
Revision | Datum | Kommentar | |
1.0 | 25.05.2023 | M. Koch | Erste Version |
So ändern Sie den Debug-UART-Port
Einführung
Viele ARM-basierte Systeme verfügen über eine serielle Konsole als Hauptzugriffsmöglichkeit für Debug- und Systemstartzwecke. Abhängig von den Kundenanforderungen kommt es in solchen Systemen häufig vor, dass der standardmäßige Debug-UART-Port auf einen anderen seriellen Port umgestellt werden muss. Mit Debug-UART-Port meinen wir den UART-Port, der alle U-Boot-Ein-/Ausgaben, Kernel-Bootlog-Ausgaben und Kernel-Shell bereitstellt, also im Grunde die gesamte UART-Kommunikation, die man in einem minimalen Yocto-Image sehen wird. Da der Standard-UART-Port nicht nur von einer Softwarekomponente, sondern von vielen Komponenten verwendet wird, einschließlich U-Boot, ATF-Firmware, Optee-OS und dem Kernel selbst, kann das Festlegen des Standard-UART-Ports eine Herausforderung sein, und zwar mehrview kann schnell verloren gehen. In diesem Dokument werden alle Schritte erläutert, die zur Erreichung dieser Aufgabe erforderlich sind. Zur einfacheren Erklärung wurde dieses Dokument für den NXP i.MX8 MINI-Prozessor und mscldk geschrieben, kann aber mit sehr geringem Aufwand auf alle Prozessoren der i.MX8- und i.MX9-Serie und andere Build-Systeme angewendet werden.
Umgebung vorbereiten
Das Ändern des Standard-Debug-UART-Ports erfordert eine Änderung des Codes in Yocto. Der einfachste Weg, dies zu tun, besteht darin, Yocto Devtool zu verwenden, um die Quellen für uns vorzubereiten. Die folgenden Yocto-Pakete müssen geändert werden:
- u-boot-imx (virtuell/Bootloader)
- linux-imx (virtuell/Kernel)
- atf-imx
- optee-os (nur wenn optee verwendet wird)
Quellen sollten mit devtool vorbereitet werden:
$ ./devtool ändert u-boot-imx
$ ./devtool Linux-IMX ändern
$ ./devtool atf-imx ändern
$ ./devtool optee-os ändern
Alle Quellen finden Sie im Verzeichnis „workspace“.
Code ändern
Ändern des Bootloaders
Im Bootloader findet eine grundlegende UART-Initialisierung statt, sodass das Muxing und die Basisadresse des UART-Ports geändert werden müssen. Die zweite Aufgabe von U-Boot besteht darin, Boot-Argumente an den Kernel zu übergeben. Hier muss das TTY-Argument der Konsole geändert werden. Die UART-Initialisierung und das Muxing erfolgen in den frühesten stage des Bootvorgangs in der SPL. Der Quellcode ist in der boardspezifischen spl.c zu finden file.
Ziel file: workspace/sources/u-boot-imx/board/msc/sm2s_imx8mm/spl.c
Öffnen Sie die file und navigieren Sie zur Funktion init_ser0():
static void init_ser0(void)
{
imx_iomux_v3_setup_multiple_pads(ser0_pads, ARRAY_SIZE(ser0_pads)); init_uart_clk(1);
}
Die Funktion aktiviert die Uhr für UART2(index 1 für physischen UART 2).
Wenn wir nun stattdessen UART1 verwenden möchten, könnten wir unsere eigene init_ser1-Funktion definieren:
static void init_ser1(void)
{
imx_iomux_v3_setup_multiple_pads(ser1_pads, ARRAY_SIZE(ser1_pads)); init_uart_clk(0);
}
Ersetzen Sie den Funktionsaufruf von init_ser0 durch init_ser1() in der Funktion board_early_init_f(). Außerdem stellen wir fest, dass die Struktur ser1_pads nicht definiert ist. Hierbei ist auf die Verkabelung von UART1 zu achten. Auf imx8mm kann UART1 mit uart1-Pads oder mit sai2-Pads gemuxt werden. Dementsprechend könnte ser1_pads wie folgt definiert werden:
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
};
Oder verwenden Sie 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 };
Jetzt sollte die UART-Basisadresse geändert werden. Die Adresse ist in der Header-Konfiguration der Platine definiert file.
Ziel file: workspace/sources/u-boot-imx/include/configs/msc_sm2s_imx8mm.h
Ändern Sie die Definition CONFIG_MXC_UART_BASE. Für UART1 wäre dies:
- // #define CONFIG_MXC_UART_BASE
- UART2_BASE_ADDR
- #define CONFIG_MXC_UART_BASE
- UART1_BASE_ADDR
Abschließend sollte das Konsolenkernargument geändert werden. Der Wert befindet sich im selben Header file. Suchen nach “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..
Ändern der ARM Trusted Firmware
Arm Trusted Firmware (imx-atf) verfügt über keine eigene UART-Initialisierungsroutine, verfügt jedoch über eine fest codierte UART-Basisadresse und ist auf die ordnungsgemäße UART-Initialisierung durch U-Boot angewiesen. Eine unterschiedliche Basisadresskonfiguration in u-boot und imx-atf führt höchstwahrscheinlich dazu, dass der Prozessor in einem Ausnahmehandler hängen bleibt und auf UART nichts sichtbar ist (die CPU scheint ohne ersichtlichen Grund hängen zu bleiben). Wenn der UART-Port geändert wird, muss diese Änderung auch in imx-atf erfolgen! Das Ändern des UART-Ports in imx-atf erfordert eine Änderung der Basisadresse. Dieser Wert wird in platform.mk festgelegt file des Prozessors.
Ziel file: workspace/sources/imx-atf/plat/imx/imx8m/imx8mm/platform.mk
Die korrekte UART-Basisadresse finden Sie im imx8-Referenzhandbuch. In diesem Example wir wechseln von UART2 zu UART1 auf imx8mm:
# IMX_BOOT_UART_BASE ?= 0x30890000
IMX_BOOT_UART_BASE ?= 0x30860000
Optee-OS ändern
Optee OS wird normalerweise geladen, wenn die CAAM-Modulkryptographie auf dem System verwendet wird. Optee läuft auf denselben ARM Cortex-A53-Kernen, jedoch in einer anderen völlig unabhängigen Instanz wie der Kernel. Optee erfordert außerdem UART-Zugriff und bedeutet in diesem Fall eine Änderung der Basisadresse.
Ziel file: workspace/sources/optee-os/core/arch/arm/plat-imx/conf.mk
Dieses Example setzt die UART-Basisadresse von UART2 auf UART1:
#CFG_UART_BASE ?= UART2_BASE
CFG_UART_BASE ?= UART1_BASE
Ändern des Kernels
Der Kernel erfordert nur wenige Änderungen am Gerätebaum, und zwar nur, wenn der UART noch nicht im Kernel verfügbar ist. In vielen Fällen sind überhaupt keine Änderungen erforderlich. Bitte überprüfen Sie jedoch, ob die TTY-Instanz, die Sie verwenden möchten, existiert! Überprüfen Sie die TTY-Präsenz mit einem Shell-Befehl:
$ ls /dev/ttymxc*
Wenn ttymxc bereits verfügbar ist, sind keine Änderungen erforderlich. Zum Beispielample, für UART2 wäre das /dev/ttymxc1. Wie wir bereits wissen, ist der Index von tty immer der Index des physischen UART minus 1. Wenn der erforderliche tty nicht verfügbar ist, befolgen Sie bitte das übliche UART-Integrationsverfahren.
Bauen und testen
Für eine sichere Wiederherstellung sollte eine vollständige Bereinigung durchgeführt werden:
$ ./bitbake –c cleanall u-boot-imx linux-imx imx-atf optee-os
Erstellen Sie das Image erneut, z. B. mit dem Standard-Build-Befehlampauf:
$ ./bitbake msc-image-base
Zu Testzwecken sollte ein UART-Adapter an den alten UART angeschlossen werden. Auf dem alten UART sollte es keine Ausgabe mehr geben! Der neue UART sollte voll funktionsfähig sein. Überprüfen Sie dazu bitte die Verbindung mithilfe der U-Boot-UART-Shell und der Linux-Konsole.
Produkt-Support
Die Ingenieure und Techniker von Avnet Embedded sind bestrebt, unsere Kunden bei Bedarf zu unterstützen. Bevor Sie den technischen Support von Avnet Embedded kontaktieren, konsultieren Sie bitte die entsprechenden Seiten auf unserer Seite webSeite unter
https://embedded.avnet.com/support/
für die neuesten Dokumentationen, Treiber und Software-Downloads.
Sollten die dort bereitgestellten Informationen Ihr Problem nicht lösen, wenden Sie sich bitte wie folgt an unser Avnet Embedded Technical Support-Team:
E-Mail: support.boards@avnet.eu
Telefon: +49 (0)8165 906-200
Dokumente / Ressourcen
![]() |
AVNET EMBEDDED MSC SM2S-IMX8M Debug UART-Port ARM-basierte Computer auf Modul [pdf] Anweisungen MSC SM2S-IMX8M, MSC SM2S-IMX8M Debug UART-Port ARM-basierte Computer auf Modul, Debug UART-Port ARM-basierte Computer auf Modul, UART-Port ARM-basierte Computer auf Modul, Port ARM-basierte Computer auf Modul, ARM-basierte Computer auf Modul, basierte Computer auf Modul, Computer auf Modul, Modul |