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.

[参考译文] RTOS/EVMK2H:构建 SBL

Guru**** 2953040 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/674663/rtos-evmk2h-building-sbl

器件型号:EVMK2H

工具/软件:TI-RTOS

evmk2h 的 TI wiki 指示可以通过 code composer 调试 SBL 操作。

我希望能够这样做、以便更熟悉此过程与引导自定义应用程序相关的工作原理。

您能否向我介绍有关如何构建 SBL 应用的文档? 我目前正在使用 c:/ti/pdk_k2hk_4_0_2/packages/ti/boot/sbl?

我已成功构建 PDK、但重建 PDK 似乎不会重建 SBL 或任何与引导相关的模块。

是否有任何有关使用 SBL 启动用户应用程序的分步教程?

谢谢、

Richard

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Richard、

    下面是介绍如何进行 SBL 编译的 wiki:
    processors.wiki.ti.com/.../L

    在 K2H 的情况下、您应该执行:
    CD ~/ti/processor_sdk_rtos_k2hk_4_02_00_09
    来源:setupenv.sh
    CD ~/ti/pdk_k2hk_4_0_8/packages/ti/boot/sbl
    使所有 bootmode=SPI Board=evmK2H SOC=K2H

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果可能的话,我需要一个具体的例子。 您提到的 wiki 仅提供了该流程的一般性。
    例如、当我构建 SBL 映像并尝试在调试器中运行时、它会加载正常并找到主入口点、但它没有加载任何符号、并且似乎是由 makefile 构建的、而不是调试。 如何修改编译、以便在编译过程中包含调试支持。 此外、我还希望看到有人逐步介绍获取用户应用并将其构建以与 SBL 配合使用以及将其刷写到存储器中的过程、以便实际可以使用该应用。 这种文件记录极为不充分,所存在的文件几乎毫无价值。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Richard、

    [引用]例如、当我构建 SBL 映像并尝试在调试器中运行时、它加载正常并找到主入口点、但它没有加载任何符号、并且看起来它是由 makefile 构建的、而不是在调试过程中。 如何修改编译以便在编译过程中包含调试支持。

    当你构建 SBL 源时、你会得到两个在~/ti/pdk_k2hk_4_0_8/packages/ti/boot/sbl/binary/evmK2H/spi/bin 中编译的二进制文件:MLO 和 SBL.out。 .out 文件是您应该用于通过 JTAG 进行调试的文件。

    MLO 用于使用位于~/ti/processor_sdk_rtos_k2hk_4_02_00_09/bin.中的 program_evm.js 脚本刷写电路板

    对于可加载的应用程序、通过以下方式创建:

    ~/ti/pdk_k2hk_4_0_8/packages/ti/boot/sbl/tools/out2rprc/bin/out2rprc.exe -->用于单核图像
    或
    ~/ti/pdk_k2hk_4_0_8/packages/ti/boot/sbl/tools/multicoreImageGen/bin/MulticoreImageGen.exe -->多核映像。

    例如、假设您已经通过 CCS 构建和调试了 qmSRIORtrK2HArmBiosTestProject。 您现在可以使用二进制文件~/ti/pdk_k2hk_4_0_8/packages/MyExampleProjects/qmSrioRtrK2HArmBiosTestProject/Debug/qmSrioRtrK2HArmBiosTestProject.out

    您可以使用 out2rprc.exe 对其进行转换、并调用新创建的二进制应用程序:
    out2rprc.exe qmSrioRtrK2HArmBiosTestProject.out 应用
    在~/ti/processor_sdk_rtos_k2hk_4_02_00_09/prebuilt-images.中复制新创建的应用程序 现在、您可以使用 program_evm.js 在板闪存和 MLO 上对其进行编程、应用程序将由 MLO 加载并执行(我已经验证过这一点(替换默认应用程序映像)、而 MLO 将使用 SD 卡在 K2G 板上执行)。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当我构建 SBL 时、它没有正确定义符号。 SBL 图像会跳转至当我通过 CCS 将其加载到 EVM 板时呈灰色显示的代码、并在我尝试运行时挂起。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    让我进一步检查一下。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我到目前为止所做的工作如下:

    我将 code composer 更新为8.0.0.00016版(TI 网站上的最新版本)

    我为 evmk2h 版本安装了处理器 SDK:4_02_00_09 (也是最新版本)

    我重建了 PDK 和所有示例工程、在 code composer 中运行时、这些工程看起来工作正常。

    (BTW)示例工程的 makefile 中存在错误。 它指向错误版本的编译器、我必须修复它)

    然后、我使用以下命令使用我在文件夹 C:\ti\pdk_k2hk _4_0_8\packages/ti\boot\sbl 中找到的 makefile 来重建 SBL:

    >gmake all bootmode=SPI Board=evmK2H SOC=K2H

    我收到的日志消息表明以下文件已从各自的目录成功编译:

    SBL_main.c
    sbl_rprc.c
    SBL_SPI.c
    SBL_SLAVE_BOOT.c
    SBL_a15.c
    SBL_SoC.c
    SPI_SoC.c
    SBL_init.S

    然后、链接器会成功运行创建 SBL.out 的操作

    objcopy 实用程序成功创建 sbl.bin

    因此、由于某种原因、我无法确定 makefile 在尝试运行 tirimage 时指示失败、即使 tirimage 程序的路径看起来正确。

    我能够导航到保存 sbl.bin 文件的文件夹、并通过手动键入命令成功创建 ticimage 尝试从 make 文件生成的关联 MLO 文件。

    生成的 MLO 文件的大小与重构建 SBL 之前文件夹中的原始 MLO 文件大小匹配。

    然后、我启动了 code composer 并使用以下 GEL 文件连接到 Arm0:

         C:\ti\ccsv8\ccs_base\emulation\boards\xticevmk2x\xtcievmk2h_arm.gel

    然后,我加载了我刚刚构建的 SBL.out 文件,它在 main()处成功暂停。

    此时,如果我尝试在主程序打开后立即进入 SBL_socInit()调用,程序光标将在 一个包含以下内容的段中“灰色”的行上结束:

    #if 已定义(A15_CORE)
      void (* monitorFunction)(void (*)(void)、...);
      
      /* A15启动调用*/
      monitorFunction =(void (*)) 0x1000;
      (*monitorFunction)(SBL_setNSMode);  <--- 程序光标停在这里、整个代码段会灰显、我想是因为它认为 A15_CORE 未定义。
      (*监控功能)(SBL_a15EnableNeon);
      (*monitorFunction)(SBL_a15EnableSMP);
    #endif

    不管怎样、此时我无法成功执行代码、如果我允许按 F8运行程序、程序似乎挂起而没有其他指示或警告。

    如果我中断正在运行的程序、程序会滞留在地址0x900处的无限分支循环中、其中有一条指令:

    00000900:  B 0x900

    很明显、成功构建的内容在调试器中不起作用、我需要能够了解我是否做了错误。

    此外、我能够使用 MLO 和另一个应用来刷写 NOR 存储器、以查看是否可以让 SBL 运行我的简单测试程序、当在 NOR ARM 中引导时、它在串行输出端口上不显示任何内容

    模式。 (即在闪存 NOR SPI EPROM 后设置为状态0010的 evmk2h 引导配置开关)。

    TI 的错误配置和完全不充分的文档导致整个过程出错。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Rahul
    我遇到的问题与 AL 描述的问题完全相同。 但是、当我研究将此修复添加到我的 SBL_SoC.c 副本中时、我注意到我的代码与您的代码不同
    上一帖子中引用的内容。


    我最近在 Windows 上安装了处理器 SDK 版本04.02.00.09以及最新版本的 code composer。

    您的帖子中第10行的#ifndef 在我的代码中是以下内容:
    #IF 定义(A15_CORE)

    同样、在第17行之后、在#endif 之前插入以下调用:
    (*monitorFunction)(SBL_a15EnableSMP);

    您能评论一下这些更改是否正确吗? (您的代码版本与我的代码版本不同)。

    我将尝试插入您的修复程序、然后重新测试以查看我是否能够继续。
    还有一点是 、当我尝试对其进行调试时、代码编写器中包含#if Defined (A15_CORE)语句的段会灰显、即使我的重新搜索显示了这一点
    A15_core 实际上是在 make 文件编译源代码时定义的。 我将把代码改回您的 #ifndefSECURE_BOOT 测试、看看这是否也会产生重大影响。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、再说一次、
    在您之前的帖子中、在第20行插入代码并将 第10行上的#if defined (A15_CORE)更改为#ifndef SECURE_boot 后、我能够运行 SBL 并成功地传输到我之前刷写到 NOR 存储器中的应用。 因此、这似乎修复了我的挂起。 我现在唯一的问题是第10行的 ifdef 是正确的。 请注意、即使 在#if Defined (A15_CORE)语句已就位的情况下、SBL 也成功从 NOR 闪存加载了用户应用程序、因此现在我将保持原样、 但我很好奇、为什么 Code Composer 指示 A15_CORE 符号是未定义的、即使在编译 SBL_SoC.c 时 makefile 确实定义了它。

    我将尝试重新刷写 MLO 以及我的应用程序、以查看我是否成功。

    如果我遇到任何其他问题、我将在此处重新发布。

    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Richard、

    很抱歉、您遇到了这些 SBL 代码问题、并且同意我们存在一些差距、并且始终可以通过我们的软件文档更友好地为用户提供更多体验。

    我将尝试帮助您进行此设置、但可能需要一些前后反馈、以便使设置正确无误。  首先、让我从尝试帮助您进行设置之前区分 GEL 文件和引导加载程序的情形开始。

    GEL 和引导加载程序是加载应用程序的两种冲突机制。 只有当器件上的 ROM 代码除了空闲 ARM 内核以等待用户使用仿真器进行连接外、在无引导模式下连接到器件时才应使用 GEL。 SBL 是一种执行 与 GEL 类似函数的机制、但在生产引导场景中、映像通过闪存传输、ROM 代码设置引导外设和时钟。

    调试 SBL 时、建议您取出 GEL 文件以确认 GEL 正确设置时钟和 DDR、但要确认加载应用程序。  调试 SBL 时、理想情况下、您应该在没有引导/SPI 引导模式下连接到内核、而不使用 GEL 文件、然后加载.out。

    接下来、 SBL 是生产加载软件、因此通常始终使用优化的设置进行编译、以减小大小和缩短启动时间、因此要调试 SBL、您需要更改编译器标志、以便可以执行完整的符号调试。  当前编译器设置位于 makefile 文件中、该文件位于 pdk_am57xx_1_0_10\packages/ti\boot\sbl\board\evmK2H\build

    SourceFiles
    
    CFLAGS 的#标志+=-Wall -O3
    
    SRC_CFLAGS =-I $(CFLAGS)-g -gdwarf-3 -gstrict-dwarf -Wall 

    您需要通过删除-O3来更改这些值、以生成单步执行的符号。 请注意、电路板库、UART、SPI 驱动程序也可能使用版本设置构建、因此您可能无法进入驱动程序 API。 引导监控器调用是指在 A15处于安全监控器模式时需要执行的对 BootROM 代码的调用、因此、当您可以看到汇编代码时、您可以在没有硬件断点的情况下进入引导监控器函数。

    最后、我注意到您使用的是 Processor SDK 4.02版本、在该版本中、ARM GCC 编译器在该版本之前从4.9.3升级到6.3.1、该版本似乎引入了错误。 之前版本编译器中的初始化代码在 ARM 内核中设置 VFP 模块、但在更高版本中、此模块不再启用、因此需要修改 SBL 代码以添加 SBL_VFPEnable、如 E2E 文章中所述:

    https://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/639/p/659405/2435779#2435779 

    这是 使用错误 ID PRSDK-3549进行跟踪的、将在4月1日起一周推出的下一个版本中解决。

    请尝试我们 在此处讨论的一些事项、并告知我们您的某些问题是否得到解决。 如果此设置仍有问题、我可以提供进一步的帮助。

    此致、

    Rahul

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Richard、

    阅读您的帖子后的另一个注意事项。 我们还不支持使用 Processor SDK RTOS 软件的 CCSv8。 我会在发行说明中坚持使用 CCS 版本。 CCS 只是一个n`t 开发的 IDE 环境、因此从 SDK 的角度来看、次要版本更新并不重要、但是如果您已经更新到 CCSv8、那么您可能会遇到 pdkProjectCreate 脚本的问题、该脚本期望 CCS 的版本为 ccsv7。

    当前的 SDK 计划是在2018年下半年更新到 CCSV8。

    此致、
    Rahul
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Richard、

    我在另一个主题上看到了您的帖子、但有些帖子似乎被删除了、所以让我直接回复您在那里的帖子。

    您可以从外部 GIT 中提取更新的 SBL 代码。 此版本已通过系统测试以确认修复:
    git.ti.com/.../sbl_soc.c

    此致、
    Rahul
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Rahul、
    感谢您在这方面的帮助。 实际上、我找到了另一个主题、在该主题中、您帮助了另一个用户解决了我遇到的相同问题。

    一些意见。
    我通过在 makefile 中将对 ccsv7的引用更新为 ccsv8来解决 pdkProjectCreate 脚本的问题、该脚本允许正确编译所有示例工程。

    我将保留有关 SBL 调试的其他注释以供将来参考、因为我的程序有一些特殊需求、需要对其进行轻微修改、这就是我想要对其进行调试的原因。

    我在下面链接的另一个线程中找到的信息使我能够最终解决 SBL 引导并将控制权转移到我的测试应用程序中的问题。

    这是我开始使用的线程的链接。 我能够重建 MLO、并将我的测试应用转换为二进制文件、并将其闪存到 NOR 存储器中、并且在将电路板设置为 NOR 引导模式后、一切都正常!

    我确实有一个问题、我在此处引用的主题中发布了这个问题:

    e2e.ti.com/.../2488108

    感谢您和 Yordan 在这方面的帮助。

    Richard
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    链接应为:
    e2e.ti.com/.../2488193
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    啊、我刚刚看到了您关于删除的注释。 无论如何、现在似乎可以正常工作。 再次感谢您的光临。 我将查看 git 集线器中的 SBL_SoC.c 文件、以确保我处于同步状态。