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.

[参考译文] CCS/TCI6630K2L:KeyStone II:具有 RTSC 平台的裸机 ARM 项目

Guru**** 2619565 points

Other Parts Discussed in Thread: TMS320C6678

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/652818/ccs-tci6630k2l-keystone-ii-bare-metal-arm-project-with-rtsc-platform

器件型号:TCI6630K2L
Thread 中讨论的其他器件:TMS320C6678

工具/软件:Code Composer Studio

大家好!

我的 CCS 设置如下:

  • CSS v7.4.0.00015
  • SYS/BIOS v6.52.0.12
  • XDCTools v3.50.4.43

使用 Code Composer Studio v7.4生成裸机 ARM 项目时出现问题。 我能够使用 GNU 6.3.1工具链创建空项目。 并进行编译。

正如我之前在 TMS320C6678方面的经验所说、下一步是为项目创建 RTSC 平台。

它的创建也很好,我可以在项目设置的“常规”->“产品”选项卡中选择它。

但是、使用以下消息编译整个项目失败:

Makefile:145:目标'test_arm.out'的配方失败
C:\Tools\ti\BIOS_6_52_00_12\packages/GNU\Targets\arm\rtsv7a\lib\boot.aa15fg (startup.oa15fg):在函数` fini'中:
/db/ztree/library/trees/xdctargets/xdctargets-o04/src/gnu/targets/arm/rtsv7A/startup.c:`:μ_fini'的多个定义
C:/tools/ti/ccsv7/tools/compiler/gcc-arm-none-eabi-6-2017-q1-update/bin/../lib/gcc/arm-none-eabi/6.3.1/hard/crti.o:(.fini+0x0):首先在此处定义
C:\Tools\ti\BIOS_6_52_00_12\packages/GNU\Targets\arm\rtsv7a\lib\boot.aa15fg (startup.oa15fg):在函数中`GNU_Targets_arm_rtsv7A_startupc':
/db/ztree/library/trees/xdctargets/xdctargets-o04/src/gnu/targets/arm/rtsv7A/startup.c:48:`μ_DSO_Handle 的多个定义
C:/tools/ti/ccsv7/tools/compiler/gcc-arm-none-eabi-6-2017-q1-update/bin/../lib/gcc/arm-none-eabi/6.3.1/hard/crtbegin.o:(.data+0x0):首先在此处定义
C:\Tools\ti\BIOS_6_52_00_12\packages/GNU\Targets\arm\rtsv7a\lib\boot.aa15fg (startup.oa15fg):在函数中`GNU_Targets_arm_rtsv7A_startupc':
/db/ztree/library/trees/xdctargets/xdctargets-o04/src/gnu/targets/arm/rtsv7A/startup.c:87:未定义对`XDC_RAUNTIME_System_EXIT__E'的引用
collect2.exe:错误:LD 返回1退出状态

这与 SYS/BIOS 库存在某种冲突。 这些错误可以修复引用 boot.aa15fg 和 syscalls.aa15fg 库的生成 linker.cmd 的注释行:

输入(
   "C:\users\win7user\workspace_v7\test_arm\Debug\configPkg\package\ccfg\build_pa15fg.oa15fg"
   //"C:\Tools\ti\BIOS_6_52_00_12\packages/GNU\Targets\arm\rtsv7a\lib\boot.aa15fg"
   //"C:\Tools\ti\BIOS_6_52_00_12\packages/GNU\Targets\arm\rtsv7a\lib\syscalls.aa15fg"
)

但此后、出现警告"找不到条目符号_c_int00;默认为008000d8"、这肯定会带来更多麻烦。

我的项目不使用 SYS/BIOS、那么在没有 SYS/BIOS 的情况下创建项目(和 RTSC 平台)的正确方法是什么? 也许我需要创建 RTSC 配置文件(或者编辑 RTSC 平台内的某些文件)来禁用与 SYS/BIOS 库的连接?

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

    如果您不使用 SYS/BIOS、为什么需要基于 RTSC 的工程?

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

    Todd、

    实际上、我在之前的 Keystone 1项目(C6678)中使用了 RTSC (不带 SYS/BIOS)。 例如、我在 RTSC 配置文件中添加了 CSL 库、这是使其显示在 CSS 包含路径中而不进行硬编码的唯一方法。

    RTSC 配置文件的另一种用法是很好地管理生成的链接器脚本中的段。

    因此、在生成的*。out 文件中没有 SYS/BIOS 引用、将--rtsName=""传递给 XDCTools。 在*.map 文件中只引用了一个存根 XDC*函数。

    昨天、我尝试使用相同的 RTSC 使用逻辑为 TCI6630K2L 处理器创建 C6x 项目、一切都很顺利。 我能够创建不带 SYS/BIOS 的 C6x 项目、同时获得 RTSC 优势。

    Yurii

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

    [引用 user="Yurii Monakov"]昨天我尝试使用 相同的 RTSC 使用逻辑为 TCI6630K2L 处理器创建 C6x 项目、一切都很顺利。 我能够在没有 SYS/BIOS 的情况下创建 C6x 项目、同时获得 RTSC 优势。

    那么、我可以关闭这个线程、然后...对吧?

    Todd

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

    [引用 user="ToddMullanix"]这样我就可以关闭此线程了...对吗?

    否、原始问题未解决。 如果没有链接 SYS/BIOS 库、我仍然无法创建 ARM 平台。

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

    我无法重现您的错误。 您可以附加示例项目吗?

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

    Todd、

    很抱歉耽误你的回答。 我终于成功地使用 RTSC 编译裸机 ARM 项目了。
    但这种方法并不容易。 在这条艰难的道路上,我们应该克服以下问题:

    如果您有自定义 RTSC 平台、则无需在单独的 RTSC 配置文件中。 如果您具有单独的 RTSC 配置、CCS 将首先编译它、然后在同一文件夹中编译 RTSC 平台。 因此、第二个编译将覆盖自定义 RTSC 配置的所有文件(包括链接器脚本)。 这非常令人困惑、因为 cfg 文件中的更改不会反映在链接器脚本中。 如果您选择其中一个标准/EVM 平台、则构建过程只发生一次。
    单独配置文件的另一个问题是并行编译。 如果打开此选项、make 实用程序将并行运行 RTSC 配置和 RTSC 平台的构建。 这会导致文件系统争用条件、因为这些进程写入同一目录。 编译可以成功完成、失败的概率相同。
    也许有一些方法可以设置 RTSC 平台和 RTSC 配置之间的相关性、但我没有找到它。
    3.要自定义链接器脚本和链接的库,应编辑自定义 RTSC 平台目录中的软件包/build.cfg 文件。
    4.要禁用与 SYS/BIOS 库的链接、请将--rtsName=""参数传递给 XDC 工具。 之后、链接器将会抱怨缺少入口点(_c_int00)。  这可以修复为将 GNU 链接器选项中的"设置起始地址"设置为_start (标准 C 入口点)。
    5.如果要将 CSL 库链接到项目中,则会出现另一个问题。 在 C66x 项目中、可通过在平台的 build.cfg 中使用以下行来实现此目的:

       var cslSettings = xdc.useModule('ti.csl.Settings');
       cslSettings.deviceType ="K2L";

    但这在 ARM 项目中不起作用(链接器会抱怨缺少 XDC_*函数)。 令人惊讶的是、通过以下行可以实现正确的行为:

       var cslPackage = xdc.loadPackage ('ti.csl');
       cslPackage.Settings.deviceType ="K2L";

    6.没有对此进行过多调查,但对 XDC 存储库路径顺序(在 c66x 项目中找到)有某种依赖性。 其中一项工作是:
       -自定义平台路径(在我的案例中为项目的本地路径)
       - SYS/BIOS 路径
       - PDK 路径

    在附件中、您可以找到包含3个项目的测试工作区:

    1. 裸机 c66x RTSC 工程
    2. 裸机 a15f RTSC 工程(通过平台的 build.cfg 链接 CSL)
    3. 裸机 a15f 非 RTSC 工程(供参考)

    e2e.ti.com/.../k2l_5F00_test.zip

    此致、

    Yurii