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/AM5728:ti.osal 包的链接问题

Guru**** 2931100 points

Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/669273/rtos-am5728-linking-problem-with-ti-osal-package

Thread 中讨论的其他器件:SYSBIOS

工具与 Env:

  • CCS 7.4
  • SYSBIOS 6.52
  • XDCTOOLS 3.50.4.
  • GCC (CCS 附带的版本)
  • PROCESSOR-SDK-RTOS-AM57xx 4.02

问题简介:

   为了构建一个 Cortex-A15 SYSBIOS 项目、在这个项目中、至少调用一次到由模块"ti.drv.uart"实现的运行时接口、链接器抱怨对已包含其库的模块"ti.osal"中定义的函数的未定义引用。

问题详细信息:

  • main.c:(请注意、我只列出了代码的基本部分、因为我只关注链接问题、因此省略了运行时验证或初始化。)
  • app.cfg:

VAR CSL = xdc.useModule('ti.csl.Settings');
CSl.deviceType ="am572x";
VAR UART = xdc.useModule('ti.drv.uart.Settings');
UART.socType ="am572x";
VAR OSAL = xdc.useModule('ti.osal.Settings');
OSAL.socType ="am572x";
OSAL.osType ="tirtos";


  • debug/linker.cmd:在生成的链接器脚本中、我可以看到包含了正确的 osal 和 UART 库、并且 osal 库出现在语句'input()'中的 UART 库之前。
  • 在 CCS 工程的链接阶段、链接器抱怨"未定义对 OSAL_getThreadType 的引用"、"未定义对 SemaphoreP_pend 的引用"和"未定义对 SemaphoreP_post 的引用"。

问题解决方法:

权变措施1:

手动添加一些函数调用、并使 main.c 如下所示:

在向"未定义"等式接口添加一些调用后、链接问题消失了。 请注意、添加的代码没有任何运行时逻辑、只是提供了一种方法来证明问题确实是链接问题。

权变措施2:

在第一个有问题的链接阶段完成并出现未定义的引用错误后、打开文件'linker.cmd'、将'input'更改为'Group'、问题将消失。

在 binutils LD 文档中,Group 的解释是“GROUP该命令类似于INPUT,但命名的文件都应该是归档文件,并且会重复搜索,直到没有创建新的未定义引用”。 因此、在链接库时、该组比输入更适合。

权变措施3:

修改 app.cfg 以使代码"var OSAL = xdc.useModule('ti.osal.Settings');"出现在"xdc.useModule('ti.csl.Settings');"和 "xdc.useModule('ti.drv.uart.Settings');"之前。 然后、在生成的 linker.cmd 中、osal 的库将出现在 CSL 和 UART LLD 的库之后。 链接阶段运行良好、因为链接器会在加载 osal 库时解析引用。

我个人的结论:

    "Workaround2 (解决方法2)"是最好的。 但我想它需要对 xdctools 进行一些改进。

    我想这个问题可以被视为 RTSC 开发工具的错误。 我希望 xdctools 可以通过在链接器脚本中使用 input()和 Group()命令来区分目标文件和存档。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里发表评论。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、我仍在编辑我的帖子。 我在使用粘贴在内部的代码发布时遇到了一些问题。

    我必须为代码拍摄屏幕截图、否则无法成功编辑帖子、这非常奇怪。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您遇到的问题是由 ARM 链接器行为引起的、在这种行为下、它会以特定顺序扫描库中的符号。 我们在测试此处所述的设置时遇到了此问题:

    processors.wiki.ti.com/.../Processor_SDK_RTOS_FAQ

    n`t 的解决方法是强制链接器尝试以循环顺序查找符号、因此、如果链接器没有找到它环绕的符号、则会重新扫描一些先前扫描的库、以查找链接顺序中的符号。 您可以使用2或链接器标志--start-group 和--end-group 执行此操作,如下所示:

    --start-group -lgcc -LC -lrdimon $(Board_LIB)$(peripheral_LIB)-WL,--end-group

    我将尝试向 XDC 团队提出这个问题、并查看他们在链接所有模块时是否可以提供一些修复。

    此致、
    Rahul