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.

[参考译文] TDA4VM:在 ospi 下刷写 Uboot 并在 ospi 上运行

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1446941/tda4vm-flash-uboot-at-ospi-and-run-on-ospi

器件型号:TDA4VM

工具与软件:

SDK:0,902,0806
电路板:TDA4_EVM


您好、 TI 专家:

现在我们有了以下启动过程设计。( 让 SBL 将 A72的 PC 指针设置为直接指向存储在 ospi 中的 uboot):




我们从 ospi 开始。 同时、我们需要 uboot 在 ospi (XIP)上运行、而不是在 DDR 上运行。 我们需要如何设置和编译 uboot?   
如何编写 SBL 代码?

 

谢谢!
伊森

 

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

    您好、
    对此有什么建议吗?

    谢谢!
    伊森

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

    您好!

    是否有任何 TI 专家可以帮助解决此问题? 

    谢谢!
    伊森

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

    您好!

    这里有什么建议吗? 

    谢谢!
    伊森

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

    你好、伊森

      、是否要在 SRAM 中运行 SBL 并在 OSPI 闪存中运行 u-boot?对吧?

    此致

      Semon

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

    您好、Semon

    就是这样! 

    谢谢!
    伊森

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

    您好、Semon

    这里有什么建议吗? 

    谢谢!
    伊森

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

    您好、伊森

       我选中这一项、希望 BU 给出建议

    此致

      Semon

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

    您好、Semon

    我真的很感谢你。

    此致、
    伊森

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

    您好、Semon

    基于上述问题、我想补充另一个问题:
    UBoot 在 ospi (XIP)中运行、需要加载存储在 eMMC 中的内核和文件系统。
    有任何相关文档吗?

    此致、
    伊森

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

    您好、Semon

    TI XIP 专家有什么建议吗?


    此致、
    伊森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这里有什么建议吗? 
    ---------------
    您好、伊森
    请尝试启用 CONFIG_SPL_XIP_SUPPORT 并重新编译 u-boot
    此致
    Semon
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Semon

    非常感谢您的答复。
    我必须再次询问、我是否仍需要 ATF_OPTEE? 如有必要、如何编译它?

    因为我使用这种启动方法:μ s

    1.如何编译合并的 dev.appimage? (atf+opte+a72 spl)并将其刷写到 ospi 上的哪个位置?

    2.启用 CONFIG_SPL_XIP_SUPPORT 后、是否仍需要修改 uboot 链接文件? 编译后的 uboot.img 应该写入 ospi 的哪个地址?

    3. SBL 需要修改什么代码才能启动 combined_dev.appiamge? 我在 sbl_main.c 中没有看到相关代码

    此致、
    伊森

     

     

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

    您好、Semon
    当我在"j721e_evm_a72_defconfig"中启用了"CONFIG_SPL_XIP_support=y"后、出现了编译错误:


    此致、
    伊森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="555442" url="~/support/processors-group/processors/f/processors-forum/1446941/tda4vm-flash-uboot-at-ospi-and-run-on-ospi/5558015 #5558015"]当我在"j721e_evm_a72_defconfig"中启用"config_SPL_xip_support=y"时、发生编译错误:

    [报价]

    你好、伊森

        您可以在 j721e_spi.h 中定义此宏、如下所示:

    --------------------------------------------------------

    /*引导模式 B = 0 */
    #include
    #define BOOT_DEVICE_HYPERFLASH       0x00
    #define BOOT_DEVICE_OSPI       0x01
    #define BOOT_DEVICE_QSPI       0x02
    #define BOOT_DEVICE_SPI           0x03
    #define BOOT_DEVICE_ETHERNET       0x04
    #define BOOT_DEVICE_I2C           0x06
    #define BOOT_DEVICE_UART       0x07
    #define BOOT_DEVICE_NOR           BOOT_DEVICE_HYPERFLASH
    #define BOOT_DEVICE_XIP           BOOT_DEVICE_OSPI

    --------------------------------------------------------

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

    您好、Semon
    感谢您的回答。 现在、我已经成功编译了以下固件、但固件似乎没有什么不同:

    Q1:
      我仍然需要 ATF_OPTEE? 如有必要、如何编译它? 这是 我的启动:


    问题2:
       如何编译合并的 dev.appimage? (atf+opte+a72 spl)并将其刷写到 ospi 上的哪个位置?

    Q3:
      我需要在 SBL_main 中进行哪些修改? 有演示吗?

    此致、
    伊森

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

    您好、Semon

    "请尝试启用 CONFIG_SPL_XIP_SUPPORT 并重新编译 u-boot" 

    我的理解是、QSPI 以这种方式运行 XIP、然后 spl 初始化 DDR、再将 uboot.img 复制到 DDR 并运行它、对吗?

    此致、
    伊森

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="555442" url="~/support/processors-group/processors/f/processors-forum/1446941/tda4vm-flash-uboot-at-ospi-and-run-on-ospi/5558207 #5558207"]Q2:
       如何编译合并的 dev.appimage? (atf+opte+a72 spl)并将其刷写到 ospi 上的哪个位置?

    Q3:
      我需要在 SBL_main 中进行哪些修改? 是否有演示?[/QUOT]

    你好、伊森

       好的、我将让研发部门来调查这个问题

    此致

      Semon

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

    您好、Semon

    我有一个案例、其中 SBL 启动 mcu1_0。 Mcu1_0也在 ospi (XIP)上运行、并已成功启动。 下面是启动图:

    引导流程:

    Tibooot3.bin 在 ocmc 中运行。
    2、SBL 在 ocmc 中复制"虚拟应用程序1"、并运行"虚拟应用程序1"
    3、"虚拟应用1"跳转至0x501c0000m、其中  存储 mcu1_0应用。

    所以我认为对于 A72内核、如果我想 uboot 在 ospi (XIP)中运行、也可以执行此:

    (ATF+OPTEE+SPL)= combined_dev.appimage、其中 SBL 可以引导映像格式。


    1、A72 SRAM (或 ram)中的 SBL 复制 combined_dev.appimage
    2、combined_dev.appimage 运行并为 linux_kernel 否  
    初始化 DDR(以进行 uboot)和 A72系统初始化。
    3、combined_dev.appimage 跳转到 
    存储在 ospi 中的 uboot.bin 的起始地址。
    4、uboot 正在运行并从 eMMC 引导 Linux_kernel。

    此致、
    伊森



  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价 userid="555442" url="~/support/processors-group/processors/f/processors-forum/1446941/tda4vm-flash-uboot-at-ospi-and-run-on-ospi/5560561 #5560561"] SBL copy ambined_dev.appimage (位于 A72 SRAM (或 ram)中
    2、combined_dev.appimage 运行并为 linux_kernel 否  
    初始化 DDR(以进行 uboot)和 A72系统初始化。
    3、combined_dev.appimage 跳转到 
    存储在 ospi 中的 uboot.bin 的起始地址。
    4、uboot 正在运行并从 eMMC 引导 Linux_kernel
    [/报价]

    你好、伊森

       BU 确认、TI 从未在 XIP 模式下验证 u-boot、如果需要、应提供一个新功能。  

       您能解释一下为什么您需要 u-boot 在 XIP 中运行、事实上 SPL 已经在 SRAM 中运行、并将 u-boot 加载到 DDR 以运行吗

       有什么特别的要求吗?

     此致

       Semon

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

    您好、Semon


    感谢您的答复。

    我想让 uboot XIP 运行的原因很长。

    我们希望 mcu1_0在上电后的100ms ([50,100) ms)内发送 CAN 消息的第一个帧、但我们的 mcu1_0的代码超过1M、因此 can_early_response 演示不适合我们的项目。 (__LW_AT__因为 can_early_responce 演示都在 ocmc 中运行,但 ocmc 仅为1M ,且 ocmc 需要与 mcu1_0 app、sbl 和 ROM 代码共享。)

    在 SBL 中、该 TI 专家已确认初始化 DDR 的时间超过30ms。

    因此、为了无需初始化 DDR 和减少 SBL copy mcu1_0的代码运行地址、我根据 SDK 中的演示设计了 mcu1_0的 XIP 运行、操作成功。

    在默认 SDK 中、uboot 和 Linux_kernel 在 DDR 中运行、因此在 uboot 和 Linux_kernel 启动之前、必须初始化 DDR。 不在 SBL 中初始化 DDR 时、会发生此冲突。

    后来,我在文档中找到了第二种启动 HLOS 的方法,如下图中的红框所示:


    这与 can_boot_app 演示类似、但我们不想添加代码来在 mcu1_0中启动其他内核、而是将所有启动过程置于 SBL 中、因此我们也不选择此选项。  

    最后、只有一种方法。 我希望 uboot 直接在 ospi (XIP)中运行并延迟 DDR 的初始化(在 SPL 或 uboot 中)、但需要在运行 Linux_kernel 之前初始化 DDR。


    因此、如果我无法在 SBL 中初始化 DDR、让 uboot 在 ospi (XIP)上运行、并在 uboot 中初始化 DDR、然后再启动 Linux_kernel 运行、则上述所有问题均可解决。

    或者 uboot 可能无法在 ospi (无需 XIP)下运行、但 combined_dev.appimage 可以在启动 uboot 之前初始化 DDR、然后将 uboot 从启动地址(ospi)复制到运行地址(DDR)。 通过这种方式,上述所有问题也将得到解决。



    或者 TI 专家还能提供其他任何解决方案吗?


    此致

    伊森



  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [想要 uboot XIP 运行的所有开发人员的注意事项]: 

    此处应有一个新功能。


    您需要自己实现此功能。 TI 未给出任何指导建议、因此我们将关闭此案例。

x 出现错误。请重试或与管理员联系。