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/PROCESSOR-SDK-AM57X:使用 U-boot 引导 SYSBIOS 应用程序

Guru**** 2589280 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/589808/rtos-processor-sdk-am57x-booting-sysbios-app-with-u-boot

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

工具/软件:TI-RTOS

我需要从 uboot 引导和 SysBIOS 应用程序、而不是 Linux zImage。 我已经从 CCS 编译和调试了我的应用程序、并生成了 app.out。 接下来、我需要使用 eMMC 中已刷写的 uboot 从 eMMC 引导我的应用。 这是可行的吗?

欢迎提出任何想法。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    为此、您需要修改 U-boot。 我也会要求 RTOS 团队进行评论。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    AM57xx 器件的 Processor SDK RTOS 目前不支持此功能。 您可以在 Processor SDK RTOS 中引用次级引导加载程序( SBL)中的代码,并在 Uboot 中集成该代码,以便从 uboot 加载和运行 DSP。 如果您使用 IPC、这意味着您的 DSP 不是独立于 ARM/Linux 代码运行、则可能需要实现早期启动晚期附加功能、如下所述:
    processors.wiki.ti.com/.../Early_Boot_and_Late_Attach

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

    感谢 Rahul 的帮助。

    我的应用程序正在 DSP1上运行。 所有其他内核停止。 想法是有一种机制、将 Fab 中的第一个应用加载到使用 SD 作为第一引导器件的原始 eMMC 中。 将 u-boot 安装到 eMMC 后、使用该 u-boot 还可以在 eMMC 上刷写最终应用。 我认为可以使用 u-boot 执行此任务、但似乎无法生成供 u-boot 使用的正确文件。 我已经阅读了一些有关'c_int00'入口点 RAM 位置的信息、该位置应该是0x8000000、但我无法将其放在该位置。

    我在 app.cfg 中包含了以下内容:

    Program.sectMap[".init {boot*(.text)}"]= new Program.SectionSpec();
    Program.sectMap[".init{boot*(.text)}"].loadAddress = 0x8000000;

    生成应用程序时、.map 文件显示:

    秘书长的报告
    TMS320C6x 链接器 PC v8.1.3
    秘书长的报告
    >> 2017年4月21日7:49:15日链接的星期五

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


    存储器配置

    名称源长度使用未使用的属性填充
    ------------ ---- ------ ---- ---- --------
    L2SRAM 00800000 00040000 00000000 00040000 RW X
    OCMC_RAM1 40300000 00080000 00032ab0 0004d550 RW X
    OCMC_RAM2 40400000 00100000 00000860 000ff7a0 RW X
    OCMC_RAM3 40500000 00100000 00000000 00100000 RW X
    EXT_RAM 8000000000 80019c5de 7fe63a22 RWIX

    如您所见、c_int00出现在0x80000120。  

    获得 app.out 后、我会按照说明生成一个.UB 文件:

    //在
    
    ~裸机工具中使用 objcopy 从 elf 可执行文件$μ C/gcc-arm-no-eabi-4_7-2013q3/bin/arm-none-eabi-objcopy -i ELF32-lLittle -O 二进制文件生成二进制//输出文件 sysbios.bin
    //创建 SYS/BIOS uimage。 kernel_start_addr 是
    应用程序的起始//地址。 这可以从
    //应用程序的映射文件中获得。
    //示例:如果我们的测试将整个应用程序放置在 EXT RAM 中的
    //地址0x8000000,kernel_start_addr 将为0x8000000。
    //
    // kernel_entry_point_addr 是 SYS/BIOS
    内核获得控制权时运行的第一个//函数的地址。
    //此函数的名称是_c_int00,其地址
    //可以从映射文件中获取。
    $$uboot/tools/mkimage -a arm -T 内核-C none -a -e -d sysbios.bin sysbios.UB
    //创建 uEnv.txt 文件以设置 u-boot 环境。 我们将设置
    // uvencmd 环境变量,将内核从 MMC 加载到
    //内存,然后从内存引导内核。
    //
    //示例 uEnv.txt 内容:
    // uvencmd=echo "从 SD 卡引导 SYS/BIOS 内核...";setenv loadaddr 0x81000000;fatload MMC 0 ${loadaddr}SYSBIOS.UB;bootm ${loadaddr}
    //
    //上述 uvencmd 命令适用于链接
    到地址0x80000000的 SYS/BIOS 应用程序。 

    此信息请访问 processors.wiki.ti.com/.../BIOS_with_GCC_(CortexA)

    我已将 uEnv.txt 更改为:  

    uenvcmd=echo "从 eMMC 引导 SYS/BIOS 内核...";setenv loadaddr 0x81000000;fatload MMC 1:1 ${loadaddr}SYSBIOS.UB;bootm ${loadaddr} 

    此外、我尝试将"loadaddr"更改为0x80000、并尝试了"bootm"。 根本不成功。

    如果我直接使用目录'C:\ti\pdk_am57xx_1_0_5\packages/ti\boot\sbl\tools'中的'tiimage'和'AM57xgen.sh'工具生成'LO'和'app',我一定会成功。 使用这些工具、我可以放入 MLO 和 app
    SD 和应用程序正常运行。 但是、当我将这些"LO"和"app"放在 eMMC 上时、它不起作用。 该 tiimageGen 可能无法与 eMMC 配合使用? 如果这最后一点得到解决,对我来说可能是可以的。

    最后一个想法是使用 FTP 服务器生成 SYSBIOS 应用程序、以便使用以太网远程机制更新目标硬件上的应用程序。

    此致。