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.

[参考译文] Linux/TDA2EVM5777:在自定义编译环境中使用 DSP 时出现问题

Guru**** 2587365 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/634157/linux-tda2evm5777-problem-using-dsp-in-custom-build-environment

器件型号:TDA2EVM5777
主题中讨论的其他器件:TDA2

工具/软件:Linux

您好*!

在命令行自定义编译环境(CCS 外部)中启动 TDA2的 DSP 时遇到以下问题:  

环境描述

自定义资源表(rproc)

(笑声)
/*
Linux -分割->器件树:
reg =<0x0 0xA100_0000 0x0 0x200_0000>;
*/
#define DSP_SHMEM 0xa1004000
#define DSP_SHMEM_SIZE 0x1000000
/* OC_MEMORY */
#define IPC_MEM_virt 0x40300000
#define IPC_MEM_PHY 0x40300000
#define IPC_MEM_virt_size 0x80000...

结构 my_resource_table{
struct resource_table base;

unsigned int offset[rsc_NUM_entries ];/*应与实际定义中的"num"匹配*

/* rpmsg vdev 条目*/
struct fw_RSC_vdev rpmsg_vdev;
struct fw_rsc_vdev_vring rpmsg_vring0;
struct fw_rsc_vdev_vring rpmsg_vring1;

/*文本分割条目*/
struct fw_RSC_carveout text_cout;

/* devmem 条目*/
struct fw_RSC_devmem devmem0;
};

//extern char ti_trace_SysMIN_Module_State_0_outbuf__A;

#pragma DATA_SECTION (ti_ipc_remote_proc_ResourceTable、".resource_table")
#pragma DATA_align (ti_ipc_test_sipc_remote_table


)#pragma 指令= 4096 (proc_remote_remote_remote_remote_remote_spragma 指令)
1、 /*我们是实现此功能的第一个版本*/
RSC_NUM_ENTRIES、 /*表中的条目数*/
0、0、/*保留、必须为零*/
/*条目的偏移量*/
{
offsetof (struct my_resource_table、rpmsg_vdev)、
offsetof (struct my_resource_table、text_cout)、
offsetof (struct my_resource_table、devmem0)
、}、
/* rpmsg vdev 条目*/
{
TYPE_VDEV、virtio_ID_RPMSG、0、
RPMSG_DSP_C0_features、0、0、2、 {0、0}、
/*无配置数据*/
}、
/*两个振铃*/
{DSP_MEM_RPMSG_VRING0、4096、DSP_RPMSG_VQ0_SIZE、1、0}、
{DSP_MEM_RPMSG_VRING1、4096、DSP_RPMSG_VQ1_SIZE、2、0}、

{
TYPE_CARVEOUT、
DSP_SHMEM、0、
DSP_SHMEM_SIZE、0、0、"DSP_SHMEM"、
}、

{
TYPE_DEVMEM、
IPC_MEM_virt、IPC_MEM_PHY、
IPC_MEM_virt_size、0、0、"IPC_MEM_virt"、
},
};

链接器 cmd 文件

内存
{
IRAM_MEM:O = 0x00800000 l = 0x00008000 // 32kB 内部 SRAM */
OCMC_RAM1:O = 0x40300000 l = 0x00080000 // 512KB L3 OCMC SRAM1 *
SHMEM: O = 0xa1004000 l = 0xF00000
}

段
{
.text > SHMEM
堆栈 > SHMEM
.bss > SHMEM
.cio > SHMEM
.const > SHMEM
.data > SHMEM
切换 > SHMEM
sysmem > SHMEM
.far > SHMEM
.args > SHMEM
.ppdinfo > SHMEM
.ppdata > SHMEM

/* COFF 段*/
.pinit > SHMEM
.cinit > SHMEM

/* EABI SECTIONS *
二进制文件 > SHMEM
.init_array > SHMEM
.neardata > SHMEM
fardata > SHMEM
rodata > SHMEM
.c6xabi.exidx > SHMEM
.c6xabi.extab > SHMEM
.resource_table > SHMEM{
main.obj (.resource_table)
}
}

调用 Makefile 中的 cl6x

(笑声)
top=${pWD}
toolchain=$(top)/linux_toolchain/C6000_7.4.2
TICLL=$(toolchain)/bin/cl6x
include=$(toolchain)/lib
target_name=dra7-dsp1-fw.xe66

CL6X_options=-abi=eram -run_linker ------compile_map=-membrand-linux-display_support=-membrand-linux-build=-d_display-map_with-d_display-map-membrand-linux-display-display-from-map_with-map_remot-linux-display-display-w_remotions=-linux-display-w_remote_display-w_remote_display-w_remote_display-linux-prisote_display-d=-prisecon_remotions=-d.pru.pru.pru.pru.pru.pru.pru.pru.pru.pru.pru.pru.







$(TICL)--abi=eabi -c main.c $(build_flags)

link_coge:
$(TICL)$(CL6X_OPTIONS)-o $(TARGET_NAME)-i $(INCLUDE)$(LINK)-u _c_int00...

导致错误:

[835.520532] remoteproc remoteproc2: RSC:type 3
[835.520544] remoteproc remoteproc2:RSC:type 0
[835.520553]
proc teproc remoteproc2:type 1 [835.520561] remoteproc:type 3
[835.571] proc remoteproc:v2:v520ec、vrec remoteec:v2:rec remoteec、v1:vrec remoteproc remotec、vrec、v1:
da a0000000、qsz 256、align 4096
[835.520591] remoteproc remoteproc2:vdev RSC:vring1:da a0004000、qsz 256、align 4096
[835.521595] remoteproc remoteproc 2:vring0:VA e1000000 dma 0xa1000000大小3000 dr [835.521595] remoteproc remotepproc2:vring1
dr e4000 vring1:vring1 dr e100premote4000 dr e4000
启动40800000。dsp
[835.521679] remoteproc remoteproc2:启动固件映像 dra7-dsp1-fw.xe66、大小为28540
[835.528810] omap_hwmod:mu0_dsp1:_wait_target_disable 失败
[835.528854] ommu 40mu
版本:83mu mu.0mu.mu.mu.mu:8340d1000 mu.mu.mu.mu.mu.mu.02000]

类型0
[835.528984] remoteproc remoteproc remoteproc 2:carveout RSC:da a1004000、PA 0、len 1000000、flags 0
[835.535316]
proc remoteproc remoteproc 2:carve1100000、DMA 0xa1100000、len 0x1000000 [ 835.662825] remoteproc:835.36] remoteSC:0836]

映射的 devmem PA 0x40300000、da 0x40300000、len 0x80000
[835.66311] remoteproc remoteproc 2:RSC:type 3
[835.663123] remoteproc remoteproc 2:RSC:type 0
[835.663131] remoteproc:type 1
[DSP 5.663mu 0x3640000 mu:crume363mu
:在 OMAP 403640h 中检测到的映射发生故障时发生故障 类型 mmmmufault
[835.663663] ommu 40d01000.mu:40d01000.mMU:errs:0x00000002 da:0xe3175f30 pgd:0xe5f2cc
4 * pgd:px00000000
[835.663699] remoteproc 8002:远程处理器835.6640proc 2


:远程控制器38600000 rm
类型1
[ 835.6664995] remoteproc remoteproc2:输入 rproc_crash_handler 工作
[ 835.665004] remoteproc remoteproc2:处理40800000.dsp 中的 crash #1
[835.665012]

omp removeproc remoteproc 2:恢复405.806178] dsp_mod_remote_dsp 3108d1:disable tegrobed_d1:disp1:ture_m8366dsp1:disable ture_remote_remote_remote_remote1:
failed1:ture83m8366.000.dsp1:ture_dsp1:teptepture_d1

我的映射中出现了问题,但是 和:为什么?

Tnx - Marco。

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

    您使用的 SDK 是哪个版本?

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

    我不使用 SDK 来构建它。 它是基于 cl6x 7.4.2的定制构建环境
    因为我们无法使用 XDC、RTOS 片段等... 我们必须完成几项安全检查、这些要求与 TI SDK 的工作方式不符... (ESP。在我们的案例中、与 CCS 的关联性不大。)

    我还得到了一个 Vision_sdk_2_12_02_00、我尝试将其用作指南...。
    我了解了"IPC"的内容... 它提供了类似于"从 Linux 运行"的代码示例。

    但它使用 XDC、SYS/BIOS、我遇到了与 IPU "剥离"过程中几乎相同的问题。

    批评:TI 对无法使用 CCS 和 SDK 的客户不会给予太多的关注、这对我来说是很好的。 获取信息以使处理器不以"通用"方式启动是一场艰难的斗争... (如上所述,我必须离开)。

    所以... 再次(与 IPI-Thread 相同的对话...) ->请帮助我启动 SDK 和 CCS 之外的 DSP。

    (供参考:到目前为止、IPU 内核上的"真正裸机"开发工作正常! 提取所需的所有内容需要很长时间、但现在我们能够构建非常小、高效的代码、并使用 rproc 来启动内核。 很好! 现在... 我必须对 DSP...执行同样的操作。)。

    Cu Marco

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

    关于 main.c 以及如何实现资源表:  

    我们的 main.c 非常简单…

    /**
    * main.c
    */
    
    #include "custom_rsc_table_dsp.h"
    
    void main (void)
    {
    while (1){
    //不执行任何操作
    。}
    }
    

    如果代码在目标上运行而没有错误和 MMU 违规、我们会继续执行一些有用的操作。  
    -> rproc-mechanism 似乎起作用... 已使用 resource_table、已完成映射... 但在代码启动期间、它会崩溃...  

    段分配

    也许它有帮助:  

    33段分配图
    34
    35路输出 属性/
    36章节页面来源 长度 输入段
    37 ---- -------- ------ --------
    38 .cinit 0 a1004000 00000000 未初始化
    39.
    40 .init_array
    41 * 0 a1004000 00000000 未初始化
    42.
    43 .stack 0 a1004000 00001000 未初始化
    44. a1004000 00000008 rts6600_elf.lib:boot.obj (.stack)
    45. a1004008 00000ff8 -孔--
    46.
    47 .text 0 a1005000 000005a0
    48 a1005000 00000100 rts6600_elf.lib:autobinit.obj (.text:_auto_init_elf)
    49 a10010010000000100 :cpy_tbl.obj (.text:copy_in)
    50 a1005200 000000c0 :exit.obj (.text:exit)
    51. a10052c0 000000c0 :tls.obj (.text:tls:init:_TI_tls_init)
    52. a1005380 000000a0 :memcpy64.obj (.text:memcpy)
    53. a1005420 00000080 :boot.obj (.text:_c_int00)
    54 a10054a0 00000060 :cppp_init.obj (.text:_TI_cppp_init)
    55 a1005500 00000040 :args_main.obj (.text:_args_main)
    56. a1005540 00000040 main.obj (.text)
    57. a1005580 00000020 rts6600_elf.lib:exit.obj (.text:abort)
    58.
    59 .fardata 0 a10055a0 0000000c
    60 a10055a0 0000000c rts6600_elf.lib:exit.obj (.fardata)
    61.
    62 .resource_table
    63 * 0 a1006000 000000d0
    64 a1006000 000000d0 main.obj (.resource_table:retain)
    65
    

    (由于 RAM 模型、因此为 UNINIT)。

    BTW:启动代码如何?

    一位同事告诉我、我不需要对它进行处理、它将由编译器"插入"并跳转到"main"本身。 真的吗?!
    (我不认为是这样、这说明了为什么代码在尝试启动时会崩溃...)  

    在 SDK 之外:是否有简单启动代码(TDA2-C6xx-DSP)的示例? 我找不到它在哪里。 (我在 CCS 中启动了一个简单的"hello worls"项目、现在想知道"makefile"目录中所有已知元素都在哪里、我知道它们是基本元素... ?)  

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

    我已将您的问题转交给专家。

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

    您需要在 DSP 代码中有一个矢量表、然后该表可以指向_c_int00代码。 编译器会将_c_int00插入到主代码中、但需要填充矢量表。
    矢量表的位置由 CTRL_CORE_CONTROL_DSP1_RST_VECT 或 CTRL_CORE_CONTROL_DSP2_RST_VECT 寄存器中编程的内容决定。 配置如下:
    /* DSPSS 引导地址*/
    WR_MEM_32 (CTRL_CORE_CONTROL_DSPx_RST_VECT、(DSPxSSBOOTADDRVALUE >> 10));

    因此、您需要从 A15中检查为此寄存器设置的值。

    您可以参考 starterware_XX_XX_XX\system_config\c66x\intvecs.asm 来了解如何创建 DSP 矢量表。 您应该至少实现了复位处理程序。

    从日志中可以看到、A15会解除 DSP 复位、DSP 找不到矢量表、因此代码执行会跳转到一些随机位置、从而产生故障。

    请尝试添加矢量表、并告诉我这是否适合您。

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

    您好 Piyali

    我再次回来、对该 MMU 错误稍微感到困惑:

    ommu 40d01000.MMU:IOMMU 故障:da bb3175f30标志0x0

    (信息:它始终是该地址:b3175f30... 不属于我的代码...)

    如果我将出厂的二进制文件加载到 DSP 中、一切都正常。 使用我自己的二进制文件时、将发生该错误。

    我检查了工作中的 ELF、发现矢量表必须放置在地址0xA1A3_6000...

    在 Linux 运行时、访问0x4A00_255C 仍然遇到一些问题。

    显示了一些值:0xFFFFF_FFFD 和0x0000_0000……

    在我的检查过程中、我发现 C6XL 插入了大量代码:

    _TI_ENABLE_EXIT_PROFILE_

    _TI_CINIT_Base

    (笑声)

    所以。 发生什么事了?

    我想、我已经拥有了在我的小型构建环境中启动 DSP 所需的一切、而且我已经收到了很多信息、以至于我无法查看如何操作。

    那么、让我们再次看看我有什么:

    我有一个自定义表会导致以下 RPROC 行为:

    [74.732441] remoteproc remoteproc 2:vdev RSC:ID 7、dfeatures 1、cfg len 0、2 vrings
    [74.732448] remoteproc teproc 2:vdev RSC:vproc 0:da a0000000、qsz 256、align 4096
    [74.732455] remoteproc:v73302:vringsz remote0:vring2:vring4000
    VA e1000000 DMA 0xa1000000大小3000 IDR 0
    [74.733115] remoteproc remoteproc2:vring1:VA e1004000 DMA 0xa1004000大小3000 IDR 1
    [74.733128] remoteproc remote2:加电408000.dsp
    [74.733136] remote40mu proc 1:
    tmsp 3107_md1000 mu.em1[_d1000 mu.em1_remot1:vap1:vap1_msp740.7d1000 mu.em1_de1000 mu.em1_de1000 mu.em1_mu.em1s:vap1:vap.em1u.em1u.em1u.em1u.em1u.em1u.em1u.
    版本3.0
    [74.739807] OMAP-iommu 40d02000.MMU:40d02000.MMU:版本3.0
    [74.739819] proc:type 3
    [74.739825] remoteproc remoteproc 2:rsc:type 0
    [74.739831] proc proc remoteproc:type 0、pre2、rm 40000a:rm
    carveout va e1100000、dma 0xa1100000、len 0x1000000
    [74.744498] removeproc remoteproc 2:carveout 映射0xa1200000至0xa1100000
    [74.744503] remoteproc remoteproc 2:rsc 类型0
    [74.744510] removeproc remoteproc 2:cereproc 0:cereproc 0:cereproc 0:cereproc 0:r100000、r100a1、rma 2
    carveout va e2100000、DMA 0xa2100000、len 0x200000
    [74.745193] remoteproc remoteproc 2:carveout 映射0xa1000000至0xa2100000
    [74.745199] remoteproc remoteproc2:RSC:类型1
    [74.745233]映射 remoteproc 2:0x300m、0x40000 pA
    

    当然、还有"我的"错误:  

    ommu 40d01000.MMU:IOMMU 故障:da bb3175f30标志0x0
    

    我的链接器文件现在如下所示:  

    -stack 0x001000 /*软件栈大小*/
    -heap 0x001000 /*堆区域大小*/
    
    --retain="*(.vects"
    
    #define RST_VEC 0xa1a36000
    
    内存
    {
    IRAM_MEM:O = 0x00800000 l = 0x00008000 // 32kB 内部 SRAM */
    OCMC_RAM1:O = 0x40300000 l = 0x00080000 // 512KB L3 OCMC SRAM1 *
    DATA_MEM:O = 0xa1200000 l = 0x1800000 //数据、文本、COFF 和公司 所有其他东西的空间*/
    CODE_MEM:O = 0xa1000000 l = 0x200000 /*数据、文本、COFF 和公司 用于所有其他内容的空间*/
    }
    
    段
    {
    /*启动 DSP */
    
    影响 > RST_VEC
    
    /*公共部分*/
    .text > CODE_MEM
    .const > CODE_MEM
    .cinit > CODE_MEM
    
    堆栈 > DATA_MEM
    .data > DATA_MEM
    .cio > DATA_MEM
    .far > DATA_MEM
    fardata > DATA_MEM
    堆栈 > DATA_MEM
    切换 > DATA_MEM
    sysmen > DATA_MEM
    .resource_table > code_mem{
    main.obj (.resource_table)
    }
    }
    

    (笑声) 我使用您在上面发布的位置的汇编器代码来生成类似于"启动代码"的内容。  

    我的主程序可能包含错误、因为我必须改进一些内容、例如矢量表的占位符... 我不敢说、如果这样做正确:  

    /**
    * main.c
    */
    
    #include "custom_RSC_table_dsp.h"
    
    #pragma DATA_SECTION (__ISR_Table、".vects")
    uint32 __ISR_Table[16]={
    0x00000000、0x00000000、0x00000000、0x00000000、
    0x00000000、0x00000000、0x00000000、0x00000000、
    0x00000000、0x00000000、0x00000000、0x00000000、
    0x00000000、0x00000000、0x00000000、0x00000000
    };
    
    
    void 计数器(void){
    unsigned int ui_loop = 0xFFFF;
    
    while (ui_loop--);
    }
    
    void main (void)
    {
    while (1){
    counter();
    }
    
    ~μ A 

    我的当前 makefile 文件:

    top=${pWD}
    toolchain=$(top)/linux_toolchain/C6000_7.4.2
    TICLL=$(toolchain
    )/bin/cl6x include=$(toolchain)/lib
    target_name=dra7-dsp1-fw.xe66
    
    list_of_obj=intvecs.obj main.obj
    
    cl6X_linker=-------build=-exclus_target_target=-map=-build=-map_warning=-membon_target=-build=d=-map_with-map_target_build=prisd_target_target_target=-map_target=-build=-build=prisd=-map_target_target_target_target=-map_target_target=-map_target=-map_target=-build=d=-map_target_target=-map_target=-map_target_target_target=-target=-target=-target=
    
    
    
    
    
    
    
    $(TICL)--abi=eabi -c main.c $(build_flags)
    $(TICL)--abi=eabi -mv6600 --abi=eabi -g intvecs.asm
    
    link_coge:
    $(TICL)$(CL6X_LINKER)-o $(target_name)-i $(include)$(link)
    
    版本:
    $(TICL)-版本
    
    清理:
    rm -rf *。obj
    rm -rf *。d
    RM -RF *。map
    RM -RF *。out
    RM -RF $(TARGET_NAME)
    

    可能是您(或其他人...) 能够简短地了解我的"东西"并识别必须导致崩溃的东西吗?

    嗯… 第一:感谢到目前为止帮助我的每个人。

    (BTW:如果我不启动 Linux 并启用 DSP、通过 REPROC 的 JTAG instad 推入 ELF、代码运行... 但现在、如果 CCS 的 GEL 脚本可以完成整个工作、当然、使用 CCS 不是我的目标。)

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

    使用 GEL 文件时、不会设置 MMU、而 DSP 访问的所有地址都被视为物理地址。

    当您通过 Linux 加载二进制文件时、内核会根据资源表为 DSP 设置 L2 MMU。 任何访问资源表中指定区域之外的区域的尝试都会导致 MMU 故障。 至少应在资源表中指定包含定时器的寄存器区域。

    git.ti.com/.../rsc_table_vayu_dsp.h

    我建议将与 L3/L4外设相对应的 DEVMEM 区域添加到资源表中、并验证 DSP 二进制文件是否正常工作。 之后、可以根据需要修剪资源表。

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

    这解释了为什么二进制文件可以加载到 DSP 中并将在 CCS 上通过 JTAG 运行。

    另一方面、我所做的是:
    我使用 Linux 的 CARVEOUT 进行代码/数据存储、并生成了两个 CARVEOUT 段、在这两个段上、我从 cl6x 的 linker.cmd 文件中拆分段。

    为什么要将外设添加到表中... 稍后、我只会使用其中的一部分... 在代码中、我可以看到(?!) 无需这样做...

    我的意图、为什么我"明白简化的地狱"是非常容易的:我们必须保证、我们的每个代码都在 DSP 上运行(安全相关!) 在我们自己的控制下。
    当 CL6X 添加代码时、我不知道它将执行什么操作... 我无法配置... 哇:这可能是一个表演的障碍。

    那么、可能有任何手册解释了我必须如何在 TDA2上自行"从头开始"启动 DSP、在 SDK 外部启动 DSP、并且不超过 CL6X 和我控制下的代码?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Marco、

    DSP 代码中的入口点是否与1KB 边界对齐? 这是使 DSP 脱离复位状态的要求。

    您是否说过、如果您在代码中具有无限 while 循环、则会看到异常?

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

    实际上、这对我来说并不是很清楚:我使用了 SDK "IPC"-Baremetal 目录中的基础知识... 所以我不是很满意... 嗯。

    请您从专家的角度介绍一下如何定义入口点?
    (可使用 A15上的特殊寄存器对其进行编程、... 由 Remoteproc 完成?)

    其他问题:
    是的、我认为尚未达到"main"代码、它在...之前崩溃 可能是"跳转"到它、或未对齐错误... 也可以是任何类型的无映射外围设备的访问(我不接触任何类型的外围设备... 如果是这样、必须使用一些代码、而这些代码不在我的控制范围内... cl6x-stuff?)。

    现在->我尝试检查代码、因为您提供了很多提示! 谢谢!
    (特别是:非法地址调用的目标是什么...)

    再次:请向我展示正确设置入口点的热态以及如何处理 A15的"CTRL_CORE_CONTROL_DSP2_RST_VECT"、还是由 Remoteproc 自动完成? 然后:如何在链接期间告知 cl6x 在 ELF-File 中设置"入口点"定义...

    我在这方面的信息泄漏了。。。 感谢你的帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Marco、

    >>请向我展示正确设置入口点的热态以及如何处理 A15的"CTRL_CORE_CONTROL_DSP2_RST_VECT"、还是由 Remoteproc 自动完成?

    通过 Remoteproc 从 ELF 二进制文件读取入口点。 您可以查看"readelf -A 的输出 "以查找入口点。 下面是一个示例输出。 您可以看到入口点与1024字节对齐。

    入口点地址: 0x95023800
    (笑声)
    章节标题:
    [19].vecs 程序 95023800 024800 000200 00 Ax 0 1024

    如果地址未对齐、则可以使用链接器命令文件中的"align"指令对齐包含复位矢量的段。

    您可以在此处找到链接器文档。

    www.ti.com/lit/pdf/spru186

    >>请您从专家的角度介绍一下如何定义入口点?

    请查看 SPRU186中"--entry_point"选项的用法。 如果您使用的是 C 代码、则默认情况下会在"_c_int00"定义此代码。

    此致、
    Venkat