如何在新的 iMX8/8X 板上启用 Linux BSP L5.4
1 介绍
1.1 目标
本应用笔记介绍了在新的自定义 i.MX8/8X 板上启用标准 Linux BSP L5.4 的一般过程,帮助用户快速移植标准 Linux BSP 版本代码到自定义 i.MX8/8X 板上,并提示用户注意那些需要修改的关键部分。
1.2 示例板
本应用笔记使用 i.MX8QXP 汽车参考板作为示例板,因为标准的 Linux BSP版本不支持该参考板。更多详细信息,请联系恩智浦代表。
该板的硬件设计基于 i.MX8QXP MEK 板,但有如下变化:
• i.MX8QXP C0 芯片
• 三星汽车级 LPDDR4 和 eMMC5.1
• MIPI-CSI,配备 NVP6324 汽车 AHD 解决方案
• LVDS 显示器,配备 TI DS90UB947/948 Serdes(通过 FPD Link III),用于汽车应用
• MIPI-DSI 显示器,配备 Maxim 96752/96755 Serdes(通过 GMSL2),用于汽车应用
• 恩智浦 TJA1101 汽车 100Mbps 以太网 PHY
• 用于 Carplay/AA 的 USB3.0 host 和用于调试的 USB2.0 OTG
1.3 Linux BSP 的版本
本应用笔记以 L5.4.47_2.2.0 Linux BSP 版本为例。查询所有 i.MX Linux BSP 的版本,请参见“面向 i.MX 应用处理器的嵌入式Linux”(Embedded Linux for i.MX Applications Processors)。
以下章节介绍了移植 SCFW、ATF、U-Boot 和 Linux 内核的一般过程。每项都可以独立编译,您可从以下链接下载软件包或源码:
• SCFW
https://www.nxp.com/webapp/Download?colCode=L5.4.47_2.2.0_SCFWKIT-1.6.0&appType=license
• Arm® Trusted Firmware (ATF)
git clone https://source.codeaurora.org/external/imx/imx-atf -b rel_imx_5.4.47_2.2.0
• U-Boot
git clone https://source.codeaurora.org/external/imx/uboot-imx -b rel_imx_5.4.47_2.2.0
• imx-mkimage
git clone https://source.codeaurora.org/external/imx/imx-mkimage -b rel_imx_5.4.47_2.2.0
• Linux Kernel
git clone https://source.codeaurora.org/external/imx/linux-imx -b rel_imx_5.4.47_2.2.0
2 生成 DDR 配置文件
i.MX 8/8X DDR 寄存器编程辅助工具(RPA)是 Excel 电子表格工具,用于为用户具体的 DDR 配置(DDR 芯片类型、容量等)进行 DDR 初始化。RPA 以两种格式(参见单独的 Excel 工作表选项卡)启动 DDR 初始化:
• DDR 压力测试脚本
这种格式专门用于 DDR 压力测试,首先复制“DDR 压力测试脚本 CBT”选项卡上的内容,再将其粘贴到一个文本文件中,以.ds 文件扩展名命名该文档。请在执行 DDR 压力测试时使用此文件。
• DCD CFG 文件
这种格式是 SCU 固件(SCFW)专用的配置文件。在这种情况下,用户复制“DCD CFG 文件 CBT”选项卡上的内容,并将其粘贴到一个文本文件,以.cfg 文件扩展名命名该文档并将该文件放入相应的 SCFW 板级文件目录中。
2.1 下载 RPA 工具
注意
在所有情况下,RPA 修订参照都是最低 SCFW 版本,参见“i.MX 8/8X 系列 DDR 工具版本”表。在某些情况下,还可以进行 BSP 调节。
要获取最新的 RPA,请参见以下链接:
• i.MX8QM DDR 寄存器编程辅助工具(RPA)
• i.MX8QXP/DXP/DX DDR 寄存器编程辅助工具(RPA)
要参照 L5.4.47_2.2.0 BSP 和 SCFW 1.6.0,请在以下步骤中使用 MX8QXP_C0_B0_LPDDR4_RPA_1.2GHz_v14.xlsx RPA 版本。
2.2 使用 RPA 工具
要使用 RPA 工具为用户自定义板上的具体 DDR 生成新的 DDR 压力测试脚本和 DCD CFG 文件,请按以下步骤操作。
1. 从 DDR 供应商处获取所需的 DDR 数据手册
要在 RPA 工具中填写 DRAM 参数,请使用 DDR 供应商提供的 DDR 数据手册,通常可从 DDR 供应商的网站下载。用户也可直接联系 DDR 供应商获取此数据手册。
2. 更新“寄存器配置”选项卡上的芯片信息表
在图 2 突出显示的芯片信息表中更新以下信息:
• 制造商
• 存储器型号
• 每个片选信号通道的容量(Gb)
• 片选信号数量
• 行地址的数量
• 列地址的数量
• BANK 地址的数量
• 总线宽度
• 时钟周期频率(MHz)
其他参数将使用上述信息自动计算并填入表格。
3. 更新“BoardDataBusConfig(板数据总线配置)”选项卡上的数据总线映射
通常,由于物理布局的限制,DDR 芯片和 SOC 之间数据引脚的物理连接并不是直接配对的。因此,我们需要一个映射表来记录DDR 数据引脚的物理连接,并将这些信息放入 DDR 控制器的寄存器中,使 DDR 数据引脚能够正确进行逻辑连接。在图 3 突出显示的行中,根据硬件原理图更新 DDR 芯片和 SOC 之间数据引脚的物理映射。其他参数将根据用户的输入自动更新。
例如,从图 4 的示例板示意图中,我们可以发现 DDR 芯片上的 DQ0_A 引脚与 iMX8QXP 上的 DDR_DQ13 引脚相连,因此我们在圈出的单元格中输入 13,对于其他引脚,请遵循相同的方法。
4. 将“DCD CFG 文件 CBT”和“DDR 压力测试脚本 CBT”选项卡中的文本复制到文件
单击 RPA 工具中的“DCD CFG 文件 CBT”选项卡,将所有文本复制到一个文件中,命名为 BOARD_NAME.cfg。该文件稍后将在移植 SCFW 时使用。
单击“DDR 压力测试脚本 CBT”选项卡,将所有文本复制到一个文件中,命名为 BOARD_NAME.ds。该文件稍后将在DDR 压力测试中使用。
3 SCFW 移植
SCFW 移植
系统控制器单元(SCU)对硬件的许多底层功能进行了抽象。在 SCU 上运行的软件称为 SC 固件(SCFW)。SCFW 提供以下功能和服务。
• 系统初始化和启动
• 系统控制器通信
• 电源管理
• 资源管理
• 引脚配置
• 计时器
• 中断
• 安全
• 其他
大多数 SCFW 代码仅在 SCFW 移植工具包中以目标文件格式提供,用户无法修改。但对于与板级相关的设置,SCFW 移植工具包提供了 board.c 文件的源代码,其中包含了与板级相关的初始化功能和自定义特性。本章重点介绍如何为新板级移植 board.c文件。
3.1 提取 SCFW 代码
要提取 SCFW 代码,请按以下步骤操作。
1. 从应用(Apps)下载 SCFW 1.6.0 软件包 imx-scfw-porting-kit-1.6.0.tar.gz。
2. 解压文件。
3. 转到软件包文件夹。
4. 使用以下命令提取 SCFW 代码。
$chmod a+x imx-scfw-porting-kit-1.6.0.bin
$./imx-scfw-porting-kit-1.6.0.bin
1. 阅读并接受许可证后,提取 imx-scfw-porting-kit-1.6.0 文件夹中的 SCFW 代码。除了代码之外,还有在 imx-scfw-portingkit-1.6.0/doc/pdf 文件夹提取的版本文档,包括版本说明、API 用户指南和更详细的移植指南。对于 i.MX8/8X 产品的新用户和开发员,这些文档非常有用。如对 SCFW 有任何疑问,请先查看这些文档。
2. 使用以下命令提取 i.MX8QXP 专有的 SCFW 代码。
$cd imx-scfw-porting-kit-1.6.0/src/
$tar zxvf scfw_export_mx8qx_b0.tar.gz
代码位于 imx-scfw-porting-kit-1.6.0/src/scfw_export_mx8qx_b0/路径。
我们可以将此路径设为 SCFW_DIR。
$cd imx-scfw-porting-kit-1.6.0/src/
$tar zxvf scfw_export_mx8qx_b0.tar.gz
3.2 创建新的板级文件
每块板都有自己独特的硬件设计,在 SCFW 层面可能有各种板操作。因此,SCFW 在 SCFW_DIR/platform/board/下为每个受支持的板提供板级文件夹。
板级文件夹包含以下部分:
• board.bom:包括 PMIC 驱动的信息
• board.c:与板相关的操作
• board.h:board.c 的标头文件,包括 board.c 中使用的宏定义
• Makefile:用于编译 board.c 的 makefile
• dcd/:DDR 配置文件的文件夹,通常至少包含以下两个脚本:
— ddr_stress_test_parser.cfg:用于为 DDR 压力测试编译 SCFW。
— BOARD_NAME.cfg:在“Using RPA tools(使用 RPA 工具)”中生成的 ddr 脚本,用于编译 SCFW 以供正常系统使用。
为了简化移植,用户可以直接从参考板级文件夹 mx8qx_mek 复制这些文件,并根据自身要求修改。
由于具体修改取决于板的设计和最终产品的用例,本文档未列出详细的修改,但以下三点,通常需要用户在 board.c 文件中自行改。
1. 在 board_system_config()函数中
SCFW 提供的一个主要特性是资源分区。它将资源划分到不同的域以保护系统。默认情况下,我们将为 M4 内核创建一个分区,在 board.c 中的 board_system_config()中执行。通常,M4 的资源分区按以下步骤进行:
a. 将所有资源标记为不可移动。
b. 为 M4 内核创建一个新分区。
c. 将 M4 子系统的所有资源和引脚标记为可移动。
d. 将 M4 内核需要使用的资源和引脚标记为可移动。
通常这部分需要根据板的设计和用例进行修改。
完整版查看:
AN13275.pdf
(2.36 MB, 下载次数: 17)
|