AVNET 嵌入式 MSC SM2S-IMX8M 调试 UART 端口基于 ARM 的计算机模块指令
AVNET 嵌入式 MSC SM2S-IMX8M 调试 UART 端口基于 ARM 的计算机模块

前言

版权声明

版权所有 © 2023 安富利嵌入式有限公司。版权所有。未经 Avnet Embedded /MSC Technologies 明确授权,禁止复制本文档、向他人提供以及使用或传播其内容

有限公司。违法者须承担赔偿损失的责任。如果授予专利或注册实用新型或设计,则保留所有权利。

重要信息

本文档仅适用于合格的受众。本文描述的产品不是最终用户产品。它是由经过培训的人员开发和制造的,用于进一步加工。

免责声明

尽管本文档是在极其谨慎的情况下生成的,但并不暗示对任何特定用途的正确性或适用性做出保证或承担责任。本文档中的信息按“原样”提供,如有更改,恕不另行通知。

商标

所有使用的产品名称、徽标或商标均为其各自所有者的财产。

一般信息

范围

本文档适用于所有基于 NXP i.MX8 和 i.MX9 系列 CPU 的 Avnet 嵌入式计算机模块,例如

  • 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 M·科赫 初始版本

如何更改调试UART端口

介绍

许多基于 ARM 的系统都配有串行控制台,作为调试和系统启动目的的主要访问方式。根据客户的要求,在此类系统中,经常需要将默认的调试 UART 端口切换到不同的串行端口。通过调试 UART 端口,我们指的是 UART 端口,它将提供所有 U-Boot 输入/输出、内核引导日志输出和内核 shell,基本上所有 UART 通信都将在最小的 Yocto 映像中看到。由于默认 UART 端口不仅仅由一个软件组件使用,而是由许多组件使用,包括 u-boot、atf-firmware、optee-os 和内核本身,因此设置默认 UART 端口可能具有挑战性,并且超过view 很快就会丢失。本文档将解释实现此任务所需遵循的所有步骤。为了更容易解释,本文档是针对 NXP i.MX8 MINI 处理器和 mscldk 编写的,但可以轻松应用于所有 i.MX8 和 i.MX9 系列处理器以及其他构建系统。

准备环境

更改默认的调试 UART 端口需要修改 Yocto 中的代码,最简单的方法是使用 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

所有源都可以在“workspace”目录中找到。

修改代码

修改引导加载程序

在引导加载程序中,将会发生一些基本的 UART 初始化,因此需要修改多路复用和 UART 端口的基地址。 u-boot 的第二个任务是将启动参数传递给内核,这里需要修改控制台 tty 参数。 UART 初始化和复用发生在最早的 s 中tagSPL 中的引导过程。源代码可以在板子特定的 spl.c 中找到 file.

目标 file: 工作区/源/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);
}

将board_early_init_f()函数中init_ser0的函数调用替换为init_ser1()。此外,我们注意到 ser1_pads 结构未定义。这里需要注意UART1的接线。在 imx8mm 上,UART1 可以复用至 uart1 焊盘或 sai2 焊盘。因此,ser1_pads 可以定义为:

静态 iomux_v3_cfg_t const ser1_pads[] = {
IMX8MM_PAD_UART1_RXD_UART1_RX | IMX8MM_PAD_UART1_RXD_UART1_RX DEFAULT_UART_PAD_CTRL,IMXXNUMXMM_PAD_UARTXNUMX_TXD_UARTXNUMX_TX | DEFAULT_UART_PAD_CTRL,空
};

或者,使用 sai2:

静态 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 空};

现在应该修改UART基地址,该地址在板头配置中定义 file.

目标 file: 工作区/源/u-boot-imx/include/configs/msc_sm2s_imx8mm.h

修改CONFIG_MXC_UART_BASE的定义。对于 UART1,这将是: 

  • // #定义 CONFIG_MXC_UART_BASE
  • UART2_BASE_ADDR
  • #定义CONFIG_MXC_UART_BASE
  • UART1_BASE_ADDR

最后,应该修改控制台内核参数。该值可以在同一标头中找到 file. 搜索 “console=ttymxc1…”,并将“ttymxc1”修改为“ttymxc0”。索引号与UART索引相关,且始终为UART索引减1。因此,对于UART 2,我们使用ttymxc1;对于UART 3,我们使用ttymxc2,以此类推。

修改ARM可信固件

Arm 可信固件 (imx-atf) 没有自己的 UART 初始化例程,但它有一个硬编码的 UART 基地址,并且依赖于 u-boot 中正确的 UART 初始化。 u-boot 和 imx-atf 中不同的基地址配置很可能会使处理器陷入异常处理程序中,并且 UART 上将看不到任何内容(CPU 似乎因不明原因而挂起)。当 UART 端口更改时,imx-atf 中也必须发生此更改!更改 imx-atf 中的 UART 端口需要修改基地址。该值在platform.mk中设置 file 处理器。

目标 file:工作区/源/imx-atf/plat/imx/imx8m/imx8mm/platform.mk 

正确的UART基地址可以在imx8参考手册中找到。在这个前amp我们在 imx2mm 上从 UART1 更改为 UART8:

#IMX_BOOT_UART_BASE?= 0x30890000
IMX_BOOT_UART_BASE?= 0x30860000

修改 optee-os

Optee OS 通常在系统上使用 CAAM 模块加密时加载。 Optee 在相同的 ARM Cortex-A53 内核上运行,但在与内核完全独立的实例中。 Optee 还需要 UART 访问,在这种情况下,这意味着基地址修改。

目标 file: 工作区/源/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 实例是否存在!使用 shell 命令检查 tty 是否存在:

$ ls /dev/ttymxc*

如果 ttymxc 已经可用,则无需修改。对于前amp文件,对于 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 应功能齐全,为此请使用 u-boot UART shell 和 Linux 控制台验证连接。

产品支持

安富利嵌入式工程师和技术人员致力于在客户需要时随时提供支持。在联系 Avnet Embedded 的技术支持之前,请查阅我们的相应页面 web网站
https://embedded.avnet.com/support/
获取最新文档、驱动程序和软件下载。

如果此处提供的信息不能解决您的问题,请联系我们的安富利嵌入式技术支持团队,如下所示:

电子邮件: support.boards@avnet.eu
电话: +49 (0)8165 906-200

安富利嵌入式徽标

文件/资源

AVNET 嵌入式 MSC SM2S-IMX8M 调试 UART 端口基于 ARM 的计算机模块 [pdf] 指示
MSC SM2S-IMX8M, MSC SM2S-IMX8M 模块上调试 UART 端口基于 ARM 的计算机, 模块上调试 UART 端口基于 ARM 的计算机, 模块上 UART 端口基于 ARM 的计算机, 模块上端口基于 ARM 的计算机, 模块上基于 ARM 的计算机, 基于计算机模块上的计算机、模块上的计算机、模块上的计算机

参考

发表评论

您的电子邮件地址不会被公开。 必填字段已标记 *