This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[FAQ] TDA4VM: PSDK QNX:修改 ARM SCR_EL3 EA 位

Part Number: TDA4VM

问:如何修改与 TI SDK QNX 版本一起使用的 SPL/SBL 引导映像以控制 SCR_EL3 EA 位?

  • 答:

    概述:

    对于 SBL 引导流程,TI Processor SDK QNX(从 SDK 7.3 开始)已将 ARM SCR_EL3 EA 位设置为 0 值。   可以按照 TI SDK QNX 版本文档中的说明为 SBL 引导流程修改 ARM SCR_EL3 EA 位。

    对于 SPL 引导流程,ARM SCR_EL3 EA 位默认设置为高电平。   在 QNX 上使用 SPL 引导流程时,为了调试目的或为了需要在 QNX 上生成 SIGBUS 的驱动程序,可以将 ARM SCRL_EL3 EA 位设置为低电平。

    针对 SBL 引导流程控制 SCR_EL3 EA

    有关修改 ARM SCR_EL3 EA 位的步骤,请参考 SDK 发布文档。  以下链接适用于 SDK 7.3。

    8.3. 如何处理当前异常级别的异常 - Processor SDK QNX J721E

    针对 SPL 引导流程控制 SCR_EL3 EA (uboot)

    发布文档将进行更新,以包含与下面的内容类似的内容。

    对于 SPL 引导流程,需要使用更新的 Arm Trusted Firmware (ATF) 重新编译 Uboot tispl.bin 二进制文件。  编译 Uboot + ATF 二进制文件的步骤如下:

    1) 下载并安装需要 Uboot 二进制文件的 Linux SDK。例如,SDK 7.3 版本的链接为 PROCESSOR-SDK-LINUX-J721E_07.03.00.05 | 德州仪器 TI.com.cn

     

    2) 在编译窗口中设置环境变量,这对以下步骤中的编译是必需的:

    • export PSDKLA_PATH=<PATH to PSDK Linux Installation>
    • export CROSS_COMPILE=${PSDKLA_PATH}/linux-devkit/sysroots/x86_64-arago-linux/usr/bin/aarch64-none-linux-gnu-

    3) 修改 arm-trusted-firmware,以便在 SCR_EL3 EA 位设置为 0 时进行编译

    按如下方式编辑该文件:${PSDKLA_PATH}/board-support/trusted-firmware-a-2.4/plat/ti/k3/common/plat_common.mk

    • 将HANDLE_EA_EL3_FIRST := 1
    • 修改为HANDLE_EA_EL3_FIRST :0

     4) 使用这些新设置重新编译 Arm Trusted Firmware,以生成更新的 bl31.bin

    • export CROSS_COMPILE=${PSDKRA_PATH}/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu//bin/aarch64-none-linux-gnu-

    • export GCC_LINUX_ARM_ROOT=${PSDKRA_PATH}/gcc-arm-9.2-2019.12-x86_64-aarch64-none-linux-gnu/
    • cd ${PSDKLA_PATH}/board-support/trusted-firmware-a-2.4
    • make -s -j32 PLAT=k3 TARGET_BOARD=generic SPD=opteed

     5) 备份旧的 bl31.bin 并使用新生成的映像进行覆盖。

    • cd ${PSDKLA_PATH}
    • cp ./board-support/prebuilt-images/bl31.bin ./board-support/prebuilt-images/bl31.bin.prebuilt
    • cp ./board-support/trusted-firmware-a-2.4/build/k3/generic/release/bl31.bin ./board-support/prebuilt-images/bl31.bin

     6) 按以下方式重新编译 uboot,这将采用更新的 bl31.bin 并生成 tispl.bin

    • cd ${PSDKLA_PATH}
    • make u-boot_clean; make u-boot

     7) 将 ${PSDKLA_PATH}/ board-support/u-boot_build/a72/tispl.bin 复制到引导介质中。如果使用 SD 引导,这将是 SD 卡的根目录。

     

    示例测试:  读取未启用的模块的地址,例如 0x28000000

    在 EA 位设置为 0 的情况下使用 tispl.bin:

    在 EA 位设置为 1 的情况下使用 tispl.bin: