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.

[参考译文] 编译器/处理器 SDK-AM335X:为 SD 卡创建二进制文件

Guru**** 2931100 points

Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/662587/compiler-processor-sdk-am335x-creating-binary-file-for-sd-card

器件型号:PROCESSOR-SDK-AM335X
Thread 中讨论的其他器件:SYSBIOS

工具/软件:TI C/C++编译器

您好!

我回来时遇到另一个问题、即从 SD 卡将二进制文件加载到 BBB 中。  我已经为 GCC 项目完成了这项任务、我了解了正在发生的情况以及使用 pdkAppImageCreate.bat 文件时遇到的问题...  但现在我需要使用 TI 编译器来实现它。

我正在使用 CCS 7.2和 TI 17.9编译器... 还有 Sys/BIOS 6.46.5.55

我已经为编译后处理设置了正确的步骤、它正在生成{project}.bin、没有任何问题。  我甚至在工程属性中勾选了"Enable arm hex utility"、但这似乎不会影响 out 或 bin 文件。 然后、我手动使用"tiimage.exe"将页眉放在文件上、将其重命名为"app"、并使用 MLO 将其放在 SD 卡上。

(使用 GCC 时、它运行自己的"tiimage"、并且使用了错误的输入地址... 至少我手动运行它、以便我可以控制它)

但是、它不运行。。。 或者不加载... 或者输入错误... 或其他东西。

我尝试使用0x8000000的起始地址 、也尝试使用映射文件中显示的起始地址: 入口点符号:"_c_int00" 地址:8038fa34 没有人成功。

我从批处理文件中删除了注释、以获取"调试"信息、但这很小。 (批处理文件第147行)。

我有损。  当通过 JTAG XDS100 v2加载时、该程序在调试和发布构建中都能很好地工作。  但无法使用 SD 卡运行。

这是链接器输出级。  它不运行"tiimage"、因此我在构建完成后手动运行它以创建"app"。  我已验证"tiimage"是否正在执行它应该执行的操作。

正在制作./src/sysbios/sysbios.aea8fnv ...
gmake[2]:对于"全部"没有要做的事情。
'构建目标:RNDK_NDOUT'
'调用:ARM 链接器'
"C:/ti/ccsv7/tools/compiler/ti-cgt-arm_17.9.0.STS/bin/armcl -mv7A8 -code_state=32 -me -O2 -opt_for_speed=3 -define=am3359 -define=AM335x --define=SOC_AM335x 
--define=bbbAM335x --diag_warning=225 --diag_wrap=off --display_error_number -z -m"RNDK_map"--heap_size=0x800 --stack_size=0x800 -i"C:/ti/ccsv7/tools/compiler/ti-cgt-arm_17.9.0.STS/lib
-i"C:/ti/ccsv7/tools/compiler/ti-cgt-arm_17.9.0.STS/include "--reread_libs --define=A8_core=1 --diag_wrap=off --display_error_number --warn_sections --xml_link_info="rNDK_linkInfo.xml"
--rom_model -o "RNDDIS_NDK.out""./main.obj ""./LCD/lcd.obj "./ti/custom/cpsw_driver_customization.obj "./ti/ndk/hal/timer_bios/lltimer.obj ***已调整的长列表**** "./ti/starterware/platform/gpio.obj "./ti/starterware/platform/usb.obj "./ti/starterware/system/cp15.obj "./tools/common.obj
"./usb/rndis.obj ""./usb/stats.obj ""./usb/usbdriver.obj "-l"configPkg/linker.cmd"-llibc.a '已完成构建目标:RNDIS_NDK.OUT' ''''调用:ARM 十六进制实用程序' "C:/ti/ccsv7/tools/compiler/ti-cgt-arm_17.9.0.STS/bin/armhex -o "RNDIS_NDK.hex""RNDIS_NDK.OUT" 转换为扩展的 Tektronix 格式... "RNDIS_NDK.OUT".text =>.text "RNDIS_NDK.OUT".CONST.1 =>.CONST.1 "RNDIS_NDK.OUT".CONST.2 =>.CONST.2 "RNDIS_NDK.OUT".INIT_array =>.INDIST_autobRAY "RNDK_OUT.OUT= .RNDK_RNDK 警告:RNDK_RNDK_OUTx2_RNDK 文件被写入到.NDK 中 正在将数据写入自动生成的文件 RNDIS_NDK.x3 '完成构建:RNDIS_NDK.hex' '' "C:/ti/ccsv7/utils/tiobj2bin/tiobj2bin.bat "RNDIS_NDK.out""RNDISK_NDK.bin""C:/ti/ccsv7/tools/compiler/ti-cgt-arm_17.9.0.STS/bin/armofd.exe "C:/ti/ccsv7/tools/compiler/ti-cgt-arm_17.9.0.STS/bin/armhex.exe "C:/ti/ccsv7/utils/tiobj2bin/mkhex4bin.exe "ROMS { ALL_MEM:O = 0x80369838、 构建完成'****'

我看到的所有其他帖子都来自错误查找和运行这些可执行文件的人员。  我在运行它们进行转换时没有任何问题、只能尝试通过 BBB 和 SD 卡将其加载到 BBB。

有什么想法我甚至可以开始寻找?   我无法知道它是否将输出正确转换为二进制文件。  

我必须假设 MLO 正在加载此映像、但配置有误、或某些入口点设置有误。  

谢谢。

-CSW

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

    仔细查看您提到的其他主题、您是否偶然遇到过这一个?
    e2e.ti.com/.../425603

    想知道这是否有一些信息会使您移动。

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

    从 TI 处理器 SDK RTOS 发行说明中可以知道、我们支持基于 Cortex A8平台的唯一 ARM 工具链是我们随软件开发套件一起提供的 ARM GCC 工具链。

    假设 TI 编译器和 GCC 编译器都创建 ELF 二进制文件、因此、如果正确创建.out、则创建引导映像的后处理步骤将保持不变。 您需要使用 obj-copy 实用程序创建平面二进制文件、然后将 TIIMAGE 标头附加到该二进制文件、如下所述:
    processors.wiki.ti.com/.../AM437x

    请注意、您需要按照此处的引导加载程序使用说明中所述正确设置入口点:
    processors.wiki.ti.com/.../AM437x

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

    Rahul、
    感谢您的回复、但它仍然无法正常工作... 我的所有步骤都在下面、但简而言之、我已经按照您提供的步骤执行了、但没有成功。

    提醒一下、我确实有这些引导加载程序步骤适用于使用 GCC 编译器构建的项目、但我们公司的企业级工具是 TI 编译器、因此我需要在该环境中构建和测试我的单元。

    此外、我还能够使用新创建的项目来获得失败、该项目使用 TI 编译器使 LED 闪烁。  从 JTAG 工作、但不引导加载。  那么、这是一个仍然失败的微小示例。

    首先、我知道 MLO 引导加载程序可以正常工作、因为它已成功用于加载在 GCC 中编写的工程。 因此我没有更改它(是否需要为 TI 项目更改它?)。   它是在将映像解压到 SD 卡后从 sd_card.img.gz 中获得的(文件的日期为6/25/17,为83,028字节)。

    此外、我会定期在二进制编辑器中打开"app"文件、以确认头文件是否正确地预先写入到文件中、如"tiimage.exe"所执行的操作。

    我已经执行了 arm-none-eabi-objcopy、tiimage、 mkhex4bin 等、... 在 tiobj2bin.bat 和 pdkAppImageCreate.bat 之后、尝试手动执行这些进程、并只是确认正在发生什么。

    我查阅了以下网页:
    processors.wiki.ti.com/.../AM437x
    但是、该应用程序相对较小(261K)、因此我认为它不会对大小产生影响。 但为了进行确认、我检查了输出 linker.cmd 文件。    我看到了这种记忆 ... 定义 SRAM_LO、SRAM_HI、OCMC_RAM 和 DDR、这些段 仅使用 DDR。 所有内容都位于地址0x80000+的 DDR 中

    这不是一个"加载时间过长"的问题、因为我已经等了很长时间(几分钟)、而且从未出现过。  再说一遍、小 LED 闪存演示程序(大小为93k)也会发生此故障

    ---- 这是我的步骤的长版本---

    考虑到我尝试的其他排列、实际上要花费更长的时间。  但我不想浪费太多的时间告诉你我尝试过的所有事情。  

    (我刚才再次尝试这些以确认):
    我尝试过使用

    ${TI_PDK_INSTALL_DIR}/packages/pdkAppImageCreate.bat 

    它让我失败了... 这是我所期望的(因为我没有链接到任何 PDK 工具,所以没有设置该环境)。

    /packages/pdkAppImageCreate.bat /packages C:/ti/ccsv7/tools/compiler/ti-cgt-arm_17.9.0.STS C:/Users/scott/workspace_v7/RNDIS_NDK/Release RNDISD_NDK AM335x ARM
    makefile:355:无法
    将目标'post-build'失败'csv7'的配方识别为内部或外部命令、
    可操作的程序或批处理文件。
    gmak[2]:[编译后处理]错误1 (忽略) 

    因此、我直接转到命令提示符以手动执行它。 我还修改了批处理文件以打开回显、并将正向斜杠更改为反向斜杠、以确保 Microsoft Windows 不会出现任何问题。

    找不到该工具

    'c:\ti\ccsv7\tools\compiler\ti-cgt-arm_17.9.0.sts/bin/arm-no-eabi-objcopy'不能识别为内部或外部命令、 

    因为该工具是 GCC 工具。 我搜索并找到了其中的两个、并将命令行更改为指向较新的命令行、该命令行位于:C:\ti\ccsv7\tools\compiler\gcc-arm-none-eabi-2017-Q1-updat\bin

    然后、我收到以下警告:

    C:\ti\ccsv7\tools\compiler\gcc-arm-none-eabi-6-2017-q1-update\bin\arm-none-eabi-objcopy:RNDK_out:警告:未为`.arm.exidx'段设置 sh_link 

    我不确定、因为我对 ELF 格式不是很熟悉。 但它已移至下一步。

    它在"tiimage"上也失败了、这也不是一个意外、因此我也修复了该路径。  没有大问题。

    我最终得到了一个"bin"文件和一个"app"。 我手动验证了"TI 标头"中的正确值、因此我确信"tiimage.exe"正在正常执行。
    我加载了它、没有任何东西。 但我没有预料到、因为入口地址设置为0x8000000。 因此、我将其更改为映射文件中列出的值:0x80390d30
    我删除了"bin"和"app"并重新运行脚本、但该"app"仍然不起作用。

    接下来、我将"arm-none-eabi-objcopy"更改为使用我在 C:\ti\gcc-arm-none-eabi-4_9-2015q3中找到的其他位置。  我 dn=o 不知道是否存在任何显著差异。

    我得到了相同的警告、并且得到了相同的 bin 和 app 文件。 但这也不起作用。

    最后、我的脚本手动执行如下所示:

    C:\ti\pdk_am335x_1_0_7\packages/pdkAppImageCreate.bat C:\ti\pdk_am335x_1_0_7\packages C:\ti\gcc-arm-none-eabi-4_9-2015q3 C:\Users\SCK\workspace_v7\RNDIS_NDK\Release R35x_NDK 

    我注意到的有趣之处是、应用文件的开头具有8字节的标头、后跟静态文本、请参阅下面的屏幕截图。  因此、我知道我不能使用0x80000000作为入口点、因为它在开头不是可执行代码。  这是否意味着其中一个步骤、如"arm-none-eabi-objcopy.exe"正在移动实际入口点?   如果是、我发现它被转移到了哪里?

    或者、当 SYS/BIOS 配置在覆盖范围内和超出控制范围内执行所有操作时、我应该如何在位置0x00处放置某种"跳转"指令以跳转到"_c_int00"入口点?

    我认为解决此问题的方法是对链接器脚本进行一些修改、以更改段的顺序... 但我不知道是什么。

    我希望这有助于解释我所做的工作、并帮助我们了解如何在 TI 编译器环境中实现这一点。

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

    Chris、

    感谢您提供详细信息。 我想、根据这里的描述、我对您要做的事情有一个很好的了解。

    您n`t 了创建应用程序映像的大部分步骤、但也没有提到过是否已尝试使用 SBL/MLO 进行调试。 SDK 中提供的引导加载程序与任何其他可通过仿真器加载和调试的应用程序代码类似。 如果您从该位置加载引导加载程序的.out \packages/ti\starterware\binary\bootloader\bin 并在 下的文件 SBL_main.c 中的源代码中设置断点 \packages/ti\starterware\bootloader\src

    这将告诉您引导加载程序是否能够正确检测应用程序中的入口点、以及是否正确加载了应用程序。 如果它正确地找到入口点并正确加载应用程序、则我同意您的观点、即在您使用 TIIMAGE 实用程序提供的入口点、您需要将 Cinit00放置在0x8000000。 以下 Wiki 中对此进行了介绍:

    在您的 CCS 项目中、链接顺序至关重要。 在 CCS 项目"编译设置"中、配置链接顺序、以便在从 SYSBIOS 生成的链接器命令文件链接其他段之前、首先将 c_int00放置在 DDR 的基址上。 对于 GCC 编译、RTOS 似乎按照引导加载程序的预期将其放置在0x8000000:

    要确认这个放置、需要检查的另一件事是查看在构建结束时生成的.map 文件、并确认入口点被放置在位置0x80000000处

    此致、

    Rahul

    PS:请参阅调试引导问题的常见调试步骤。其中、我们强调了检查入口点配置的必要性。

    http://processors.wiki.ti.com/index.php/Processor_SDK_RTOS_Boot#Common_Steps_to_debug_application_boot 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    啊...
    这是另一种情况。 我稍后要介绍、因为我认为这不会对您有所帮助...
    仅使用 JTAG 加载过程进行调试后、我甚至不知道如何将 CCS 连接到正在运行的 BBB 并让其暂停。 CCS 似乎坚持通过 XDS100v2调试器加载和替换所有内容。 因此、无论已经加载的 MLO 是什么、现在都消失了。

    我花了大约30分钟时间来了解 CCS 和 wen 站点、它们试图弄清楚如何在 BBB 中附加正在运行的程序而不加载它。 运气差。 我将"Perspective"更改为"Debug"、但所有菜单选项都呈灰色、直到我通知 CCS 加载程序。

    我将深入研究这个问题、并在这个周末尝试一下(现在请注意其他事项)。 但我想确认我看到你在谈论什么,所以它打开了另一条途径来理解这一点并确定正在发生的事情。

    谢谢。 我将在几天内提出"成功"或要求提供更多援助的请求。

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

    虽然我尚未使用 Sitara 器件完成此操作、但我已使用其他器件完成此操作。 这里的关键是您不能使用"Debug"工具栏按钮、因为正如您指出的那样、这将替换内存中已有的程序。  

    "Debug"工具栏按钮可完成多个步骤:

    • 构建活动项目。
    • 启动调试配置(.ccxml)并切换到 Debug 透视图
    • 连接到目标处理器
    • 从活动项目加载程序代码

    要与目标板上已驻留的程序连接、您需要独立执行这些步骤中的每一个。 如果程序已驻留、您不需要重新构建它、因此我们将跳过该步骤。

    1. 打开“目标配置”窗口(View->Target Configurations)
    2. 在"Edit"视图中、在 Target Config"窗口中找到.ccml 文件、然后右键单击"Launch Selected Configuration"
      • 此时、您应该处于"Debug"视图中
    3. 连接到您的目标(Run->Connect Target)
      • 此时、您应连接到目标板
    4. 您不想加载程序、但您可能希望从程序加载调试符号
      • Run->Load->Load Symbols...(运行->加载->加载符号...) 然后从项目中选择可执行文件

    希望这能让您快速入门。

    -Scott

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

    Scott、Rahul、

    以上都不起作用...

    1. 我尝试创建一个目标配置并将其打开。  在我执行"连接到目标"之前、它似乎正常工作 、它告诉我器件保持在复位状态。

    什么??  这是一块裸板、甚至 EEMC 也已擦除。  在我加载某个东西之前、该板会一直处于死状态。  除了 JTAG 之外、没有任何连接器悬空。  它认为它被保持在复位状态的什么位置?

    但是、当我的项目打开时、它会下载并运行我的"Blink LED"测试程序。  那么、为什么它会拒绝让我使用这一个一次性目标配置文件连接到器件?

    因此、我可以忘记尝试附加到 MLO 引导加载程序或我的代码。  但是、正如我在启动时所说的、在 GNU 中构建时、整个过程都起作用、除非我必须手动更改入口点以匹配地图文件告诉我的入口点。  因此,我的结论是,《劳工法》运作良好。

    2. 我试图遵循 Rahul 提供的链接:

    processors.wiki.ti.com/.../Accessing_c_int00

    有一条语句"要将.text 符号放置在显式地址、请向工程中添加自定义链接器命令(.cmd)文件"...  真的吗?  什么名字?  在哪里?  我刚创建了一个 custom.cmd 文件、它对输出没有影响。  无论文件是否存在、映射文件都完全保持不变。

    如果它能告诉我一些不那么模糊的东西、这实际上可能解决了我的问题。  那么、再说一次、它可能不会。  我尝试手动将_c_init00分配到位置0x80000、链接的表示它不适合。  双  我需要在那里执行一条"跳转到_c_int00"指令。  而不是整个入口点。  由于 Sys/BIOS 在我的背面做了所有事情、我不知道这是怎么做的。

    -CSW

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

    Scott、Rahul、

    更新... 但它仍然是坏的。  

    但我确实设法让它连接和加载...  问题是我在选择"Connect"时没有突出显示 A8内核。  显然、我想连接到 M3内核。  (当我第一次调试项目时、它会询问我哪个内核。  它还记得了。  我从项目中导入了相同的"ccxml"文件、但不知道我想连接到 A8。  为什么??  为什么它在记住我的项目时不知道要从"ccxml"中使用哪个内核。  真的很烦人。  但我离开了...)

    好的、第一步。  在 GNU 中写入时、一个残酷简单的"Flash the LED"程序会工作、但在 TI 编译器中写入时不会工作。 相同的代码。

    GNU 版本具有一个映射文件、其内容为:

    c_int00 0x80000000 bb4 C:\ti\BIOS_6_46_05_55\packages/GNU\Targets\arm\rtsv7a\lib\boot.aa8fg (boot.oa8fg)
    0x80000000 _c_int00 

    因此、我们可以看到入口点位于存储器位置的开头、这是我们所期望的。  另一方面、TI 版本映射文件显示:

    输出文件名: 
    入口点符号:"_c_int00"地址:80008698 

    因此、我们可以看到它不匹配。  我知道无法强制它匹配。  Sys/BIOS 提供了这些东西...

    因此、将 GNU 版本的应用程序与"bootloader_boot_boot_mmcsd_a8host_debug_ti.bin"放在 SD 卡上 、我将其重命名为 MLO。  

    我 插入了 CD 卡、然后连接了 JTAG、加载了"bootloader_boot_boot_mmcsd_a8host_debug.out"加载程序、该加载程序应与代码的 MLO 匹配。  在开始时停止、加载了"SBL_main.c"文件、并能够单步执行引导加载程序。  这一切都很好。  它加载了"app"并读取了 TI 标头、按照预期将程序加载到地址0x80000。  一切正常。

    我在将应用程序设置为0x80008698的入口点时重复此操作 、因为映射文件告诉我这一点。 它确实加载了映像、我可以看到地址 0x80008698。 但是、这是问题所在。  MLO 假定入口点和基址相同。  嗯、这永远不会奏效。

    这是 MLO SBL_mmcsd.c 第221行中的代码:

    pDestAddr =(uint8_t *) imageHdr.load_addr;
    *pEntryPoint = imageHdr.load_addr;
    } 

    那么、我应该如何为"_c_int00"位置设置一个与目标地址不同的入口点?  因为这正是 TI 版本的工具对我的作用!

    或者... 我该如何告知 TI 版本的编译器工具将"_c_int00"函数(或其等效的 BL 指令)放置在0x80000000位置以匹配加载地址?  如果我可以告诉编译系统放置它的位置、我很乐意用 BL 指令添加一个微型汇编器代码。  但是、遗憾的是、Sys/BIOS 不允许我执行我可以找到的操作。

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

    为了使该机制正常工作、您的加载地址和入口点需要对齐。 我仍建议使用 wiki 中提供的指导、但修改此指导以匹配链接器输出
    processors.wiki.ti.com/.../Accessing_c_int00

    对于入口点为.text:_c_int00的 DSP/C28x 器件、似乎提供了该指导。 因为您使用的是 TI ARM 编译器、并且您的入口点被放置在.c_int00段中。 请尝试使用 TI ARM 编译器团队在此处提供的以下语法、并告知我们您是否仍然遇到此问题。
    e2e.ti.com/.../2209073


    此致、
    Rahul

    n`t:请注意、用于 Cortex A8的 TI ARM 编译器不是 TI 支持的此器件用例、因此这是一个定制设置、开箱即可使用 SDK 设置。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Rahul Prabhu"]Chris、

    为了使该机制正常工作、您的加载地址和入口点需要对齐。 我仍建议使用 wiki 中提供的指导、但修改此指导以匹配链接器输出
    processors.wiki.ti.com/.../Accessing_c_int00

    [/报价]

    Rahul、

    我已经阅读过这个。 我已经尝试过、 但这不能为我提供足够的信息... "将自定义链接器命令(.cmd)文件添加到您的项目"

    什么是链接器 cmd 文件??   我将重复: Sys/BIOS 构建环境擦除并重新写入构建脚本。  那么、我应该如何放入我自己的呢?

    我只是随意创建了一个"command.cmd"文件、然后将其放入项目中。  没有区别。

    [引用用户="Rahul Prabhu"]

    对于入口点为.text:_c_int00的 DSP/C28x 器件、似乎提供了该指导。 因为您使用的是 TI ARM 编译器、并且您的入口点被放置在.c_int00段中。 请尝试使用 TI ARM 编译器团队在此处提供的以下语法、并告知我们您是否仍然遇到此问题。
    e2e.ti.com/.../2209073
    [/报价]

    根据其中一份答复,它显然没有说明在哪里粘贴这一条文字。  我刚才将其添加到了 CFG 脚本中:

     我添加了".c_int00{boot.aea8f (.text)}:加载> 0x80000000,运行> 0x80000000"到脚本。  当然、XDC 全部烧条。

    JS:"c:/Users/scott/workspace_v7/TI_BLinkTest/app.cfg、第1行:编译产生了1个语法错误。
    JS:"./package/cfg/app_pea8fnv.cfg、第195行:编译产生1个语法错误。 (C:/Users/scott/workspace_v7/TI_BLinkTest/app.cfg #1)
    gmake.exe:***[package/cfg/app_pea8fnv.xdl]错误1 

    那么、我的问题仍然是: 当构建环境在我的背面和封面下面执行所有这些操作时、如何强制构建环境将这些值设置为我想要的值?

    我知道负载点和入口点需要位于何处。  我知道入口点需要具有什么地址。 我知道需要将哪个符号设置到该地址。  我知道需要将哪个段名设置到该地址...  当 XDC 和 Sys/BIOS 运行我的背面的所有内容并且不让我控制时、我该如何操作?   

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

    Chris、

    需要将其他 E2E 的语法添加到您已添加到项目的 custom.cmd 文件中、而不是.cfg 文件中。 XDC 工具不会使用.cmd 文件。 只有在决定放置符号时、TI ARM 连接器实用程序才会使用该符号。

    此致、
    Rahul

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

    Rahul、

    你能说明这一点吗?  我所做的一切都是随机改变、因为什么都不是特定的。

    在我的"custom.cmd"文件中:

    c.c_int00{boot.aea8f (.text)}:加载> 0x80000000,运行> 0x80000000 

    错误:

    "./custom.cmd"、第1行:错误#10008-D:找不到文件".c_int00"
    "./custom.cmd"、第1行:错误#10021-D:期望文件名、选项、存储器或段、而不是"{"./custom.cmd"
    、第1行:错误#10021-D:预期文件名
    、未在链接过程中遇到错误#blink.10" 

    然后我更改了标签:

    ._c_int00{boot.aea8f (.text)}:加载> 0x80000000,运行> 0x80000000 

    错误:


    "./custom.cmd"、第1行:错误#10008-D:找不到文件"._c_int00"
    "./custom.cmd"、第1行:错误#10021-D:需要文件名、选项、内存或段、而不是"{"
    "./custom.cmd"、第1行:错误#10021-D:需要文件名、选项、存储器或段、而不是":"
    错误#10010:链接期间遇到错误;未构建"TI_BLinkTest.out"

    再次更改标签:

    _c_int00{boot.aea8f (.text)}:加载> 0x80000000,运行> 0x80000000 

    静态:

    "./custom.cmd"、第1行:错误#10008-D:找不到文件"_c_int00"
    。./custom.cmd"、第1行:错误#10021-D:需要文件名、选项、存储器或段、而不是"{"./custom.cmd"
    、第1行:错误#10021-D:错误
    #Link10:不需要文件名、而不是"TI_linkout" 

    还可以…… 这已经足够了...  让我们尝试制作一个"链接器"外观脚本:

    SECTIONS{
    .text:c_int00 > 0x8000000
    } 

    无错误、但入口点仍为0x80008698。  已尝试".._c_int00" "_c_int00" 等...   

    尝试将 E2E 中的文本粘贴到"部分"中

    SECTIONS{
    .text:.c_int00{boot.aea8f (.text)}:加载> 0x80000000,运行> 0x80000000
    } 

    不。 错误:

    "./custom.cmd"、第2行:错误#10008-D:找不到文件"boot.aea8f"
    。./custom.cmd"、第2行:错误#10026-D:期望输出段、组或联合、而不是":"
    。/custom.cmd"、第2行:警告#10068-D:没有匹配的段
    ;未在链接中遇到错误#10010"TI_link" 

    ( boot.aea8f 是 XDC 生成的启动条目吗?  但在本例中不是这样。  那么、在这种情况下、它是什么呢?  这种情况记录在哪里?)

    因此、我尝试删除了该文件、并使用"_c_int00" "._c_int00" ".c_int00" ".c_int00""...

    SECTIONS {
    .text:c_int00:load > 0x8000000,run > 0x8000000000
    } 

    无构建错误、但映射文件中的入口点仍然存在

    输出文件名: 
    入口点符号:"_c_int00"地址:80008698 

    它不工作。

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

    它现在工作了...

    我在项目的根级别中有一个"custom.cmd"文件。  在地毯爆炸了一堆不同的东西之后、我深入到地图文件中、以了解这个神秘 SYSBIOS 库提供的位置  
    "_c_int00"。  基于80008698的地址、我查看了映射文件、结果是它被称为 boot.aea8fnv... 、如果我正在正确读取映射文件、则从目标文件 boot.oea8fnv 中提取出来。

    入口点符号:"_c_int00"地址:80008698
    
    800085a0 0000007c SYSBIOS.aea8fnv:ARM_TaskSupport_ASM.obj (.text:_ti_SysBIOS_family_ARM_TaskSupport_buildTaskStack)
    8000861c 0000007c TI.targets.arm.rtsarM.aea8fnv:assert.oea8fnv (.text:xdc_runtime_assert_raud__i)
    --> 80008698 00000074 boot.aea8fnv:boot.oea8fnv (.text)
    8000870c 00000074 SYSBIOS.aea8fnv:BIOS.obj (.text:ti_SysBIOS_family_ARM_A8_intcps_Hwi_dispatchFIQC_I)
    

    接下来、我必须在 custom.cmd 文件中创建"section"、以告诉它在地址8000000000处加载该文件:

    部分{
    .text:_c_int00{boot.aea8fnv (.text)}> 0x8000000
    } 

    但这个失败的原因是"找不到文件"。  (为什么??  链接器知道该文件链接时的位置。。。?)。  因此、我为该文件缓存了 BIOS_xx_yy_yy 文件夹、并找到了该文件夹。 然后、我将绝对路径放入脚本中:

    部分{
    .text:_c_int00{C:\ti\BIOS_6_46_05_55\packages/ti\targets\arm\rtsarm\lib\boot.aea8fnv (.text)}> 0x8000000
    } 

    重新运行编译、并获得它应该位于的入口点。

    入口点符号:"_c_int00"地址:80000000
    输出 属性/
    书帖页面来源 长度 输入段
    --- -------- ------ --------
    .text:_c_int00
    * 0 80000000 0000008c
    8000000 00000074 boot.aea8fnv:boot.oea8fnv (.text)
    80000074 00000008 rtsv7A8_a_le_n_v3_eabi.lib:args_main.obj (.tramp._args_main.1) 

    然后、我可以使用"arm-none-eabi-objcopy.exe"和"tiimage.exe"程序创建"app"、将其加载到 SD 卡上、并且可以正常工作。  我要执行该操作的小批处理文件是

    C:\ti\ccsv7\tools\compiler\gcc-arm-no-eabi-6-2017-Q1-updates\bin\arm-none-eabi-objcopy.exe -O 二进制 TI_BLinkTest.out TI_BLinkTest.bin
    
    C:\ti\pdk_am335x_1_0_7\packages/ti\starterware\tools\ti_image\tiimage.exe 0x80000000 TI_BLinkTest.bin 无应用程序 

    其中(在本例中)编译器输出文件名为"TI_BlinkTest.out"、并生成名为"app"的文件。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您在此处分享解决方案 Chris、很高兴看到您在使用 TI ARM 编译器时解决了您的引导问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    没问题。
    个人而言、当有人发布"我通过更改该-E 设置来解决问题"等内容时、我会感到很烦人... 而不提供细节。 我认为他们应该为我们其他人提供详细资料。

    OTOH、我非常不情愿地说、论坛让我以2315分的"专家"身份被描述为"专家"。 我比"专家"更"失落和烦恼...