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.

[参考译文] CCS/STARTERWARE-Sitara:从 U-boot 运行裸机应用程序

Guru**** 2540810 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/598961/ccs-starterware-sitara-running-bare-metal-application-from-u-boot

器件型号:STARTERWARE-Sitara

工具/软件:Code Composer Studio

您好!

我想构建一个独立的应用程序,在 UART 中打印一些字符,并希望通过 u-boot 进行循环和运行:

我的理解是:

1.独立应用程序不需要计时器(节拍数)(对吧?)

2.我需要 main()函数。 在主函数内,我可以创建一个循环并写入 UART 接口寄存器,如下所示:

  void main()

   {

…………

while (1)

//等待 FIFO 中有空间。
while (CHKBIT_REGB (UART + UART_SSR、TX_FIFO_FULL))

//发送字符。
OUT_REGB (UART + UART_THR、IN_DATA);

       }

   }

使用交叉编译的编译会创建 elf 文件、然后将其转换为十六进制文件、 并使映像创建 u-boot 可加载二进制文件。

4.我假设在从 u-boot 迁移到独立应用程序时 u-boot 初始化仍然可用。

5、按照我的理解、我们无法从 main 返回 u-boot。

这些假设是否正确? 此独立应用程序是否可以正常工作?

能否使用 bootel 命令而不是转换 elf->hex->u-boot_hdr_img?

此致、

已运行

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    顺便说一下、您是否考虑使用 RTOS? 您可以在以下位置找到它: software-dl.ti.com/.../index_FDS.html
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、RAN、

    请检查 /board-support/ /examples/standalone/hello_world.c 示例。 它上没有使用计时器。 您可以根据 main 中编写的独立 HOWTO 指南、通过 UART 或 TFTP 在地址0x8030000处加载它 /README 文件。

    此致、
    Kemal

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

    您好、Kemal、

    非常感谢您为我回答了最初的问题。
    不过,我想就同一个问题提出以下问题:
    从 u-boot 成功执行该操作后、我尝试直接从 MLO 加载独立器件。
    在 MLO 源代码中、我首先需要编辑加载地址。
    我下载的独立应用程序是 uC/OS、它使用0x8000000作为起始地址。
    因此、将其更改为 CFG 加载地址从0x80008000更改为0x8000000后、引导过程正常。
    但令我惊讶的是、u-boot 也能正常启动(同时期望仅在加载地址为0x80008000的情况下启动)。
    这是怎么可能的?

    谢谢、
    已运行

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

    尝试使用 mw.b 0x80000000 0xff 0x8000命令清理该区域、或打开/关闭电路板电源、因为 DDR 存储器将保持其内容直到断电。

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

    您好、Kemal、

    您的建议非常有帮助。 我希望您能在以下方面提供帮助:
    我尝试使用.ld 脚本在 eclipse 中加载独立应用程序构建。
    ld 脚本的示例语法为:
    MEMORY {.Code:origin = 0x80100000,length =(30*1024*1024)}
    MEMORY {.InitData:origin = 0x81F00000,length =(4 * 1024*1024)}  
    MEMORY {.NonInitData:origin = 0x82300000,length =(29 * 1024*1024)}  
    MEMORY {.ConfigFiles:origin = 0x84000000,length =(4 * 1024*1024)}  
    MEMORY {.HeapData:origin = 0x84400000,length =(32 * 1024*1024)}  
    MEMORY {.DMAData:origin = 0x86400000,length =(1024 * 1024)}
    MEMORY {.TTBData:origin = 0x86500000,length =(32 * 1024)}

    但是 bin 文件现在非常大30M、我如何使脚本创建一个所需大小(不大于实际代码)的 bin 文件、正如 hello_world 示例中所做的那样(hello_world 示例仅获取起始地址、而不是长度)

    我尝试  从以下内容中进行更改:

    MEMORY {.Code:origin = 0x80100000,length =(30*1024*1024)}

    更改为

    MEMORY {.Code:origin = 0x80100000,length =(1*1024*1024)}

    但它没有帮助。

    加载附加的脚本。

    作为替代方法-如果.bin 文件太大,是否有方法以其他格式将独立应用程序加载到 u-boot/MLO 中?


    谢谢、
    已运行

    e2e.ti.com/.../ld.txt