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.

[参考译文] CC1352R:将驱动程序库的各个部分链接到特定的部分

Guru**** 2562120 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1008805/cc1352r-linking-parts-of-driver-lib-to-specific-sections

器件型号:CC1352R

您好!

我正在开发一个定制的引导加载程序、该加载程序需要共享 ECDSA 和 SHA2驱动程序、以便使用应用程序代码验证签名。 因此、我需要将驱动程序代码放入引导加载程序扇区。 我一直在尝试按照   https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/950819/ccs-is-it-possible-to-link-a-static-library-at-a-particular-known-location-with-ti-s-msp432-toolchain?tisearch=e2e-sitesearch&keymatch=link%25252520library%25252520location#中的建议访问 https://www.ti.com/lit/ug/spnu118y/spnu118y.pdf?ts=1603906602444、 但我的链接器脚本似乎无法找到所使用的"drivers_cc13x2.aem4f"库。

下面的代码片段或多或少是我想要做的(但当然不正确、除了代码视图不允许我编写我真正想要的代码外):

.ecdsaCode: {
    -l drivers_cc13x2.aem4f (ECDSACC26X2.oem4f)
} > BOOT_LAST

基本上、我想将'debrivers_cc13x2.aem4f'库中的'ECDSACC26X2.oem4f'放入一个特定段中。 如果在没有任何规则的情况下编译工程以将库部分放入特定扇区、则工程创建最终编译文件时没有问题、因此这不是编译器和链接器通常无法找到库的问题。

我的问题是、如何将库的这个特定部分(由于某种原因、脚本在编译时无法检测到)链接到该部分?

此外、作为一个附带问题、我不确定这些库是否"独立"、即它们不需要驱动程序库的任何其他部分。 是否有关于这些器件相关性的信息?

此致、

Felix。

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

    您好、Felix、

    我假设将其作为引导加载程序工程的一部分添加将会起作用。  

    (您是否将引导加载程序作为单独的项目来实现、参考 BIM?)

    我不确定您在哪里看到了问题。 如果您的问题与链接器文件语法有关、我可以将此指南链接到您的网站:

    https://software-dl.ti.com/ccs/esd/documents/sdto_cgt_Linker-Command-File-Primer.html 

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

    您好、Marie、

    在"Allocate a Single Input Section from a Library"部分中"TI Linker Command File Primer"的底部、链接的内容是我要尝试实现的目标。 我认为我对语法没有任何问题、至少我不知道我是否需要为特定用例使用一些替代的链接器脚本语法。

    在工程中、我链接了名为"diries_cc13x2.aem4f"的共享静态库、其中包含我要放置在引导加载程序存储器空间中的段中的 ECDSA 和 SHA2代码。 该引导加载程序本质上是用于通过低于1GHz 15.4在器件上执行 OTA 固件更新的 BIM 实现。 不过、这与应用程序代码位于同一个项目中、但它们在闪存存储器空间中具有单独的段。 由于此处的闪存是限制因素、我希望将 ECDSA 和 SHA2驱动程序的闪存数据放置在引导加载程序部分、并与引导加载程序和应用程序代码共享该数据。

    在 CCS 中查看"Memory Allocation"查看器、我可以看到它们位于'drivers_cc13x2.aem4f'库中的'ECDSACC26X2.oem4f'中。 我试图按照文档在构建工程时将库段中的引用放置在特定段中。 但是、链接器似乎无法找到该库、即使它可以在该库中找到并链接引用的代码也是如此。 以下行是链接时来自控制台的错误消息:

    第67行:错误#10008-D:找不到文件"drivers_cc13x2.aem4f"

    使用链接器脚本中的以下条目:

    .ecdsaCode:>共享

      --library=drivers_cc13x2.aem4f

    如果我没有记错、则应引用"debecdasc26X2.oem4f"对象、将其从"dirrivers_cc13x2.aem4f"放置到"ecdsaCode"部分。

    最奇怪的是、当我再次查看"内存分配"查看器时、我要移动的符号已放置在那里、这很好。 但我仍然收到有关找不到库文件的错误消息(这是一个明显的谎言、因为它已经链接了符号并解析了存储器放置)。 我不确定是缺少什么内容、还是 CCS 存在问题/错误。 除了错误消息之外、其他所有内容似乎都按预期工作(但 IDE 当然不会生成最终文件、因为它声称存在错误)。

    我要问的是、是否有已知原因导致 CCS 链接器错误、即使链接器显然没有将其视为错误、因为它链接了目标文件和库文件。 我是否需要填写一些其他搜索路径(我已经在链接器路径中列出了库)、或者是否存在一些 IDE 限制等

    我想尝试解决此问题、因为它会导致引导加载程序开发直接受阻。 如果您有任何建议、如果您需要更具体的详细信息、或者如果我应该尝试其他电路板、请告诉我。

    此致、

    Felix。

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

    事实证明、我必须提供库的整个搜索路径、以便 CCS 接受该命令、即使它们已经是 CLI 链接器命令中列出的库的一部分。

    .ecdsaCode:>共享

      --library="C:\...\drivers_cc13x2.aem4f"