TI中文支持网
TI专业的中文技术问题搜集分享网站

AM5728: 可以在CCS里面修改和编译SBL并得到MLO可执行二进制文件吗

Part Number:AM5728

我在目录F:\ti\pdk_am57xx_1_0_17\packages\ti\boot\sbl\board\idkAM572x中找到了sbl_main.c源代码,在目录F:\ti\pdk_am57xx_1_0_17\packages\ti\boot\sbl\src\mmcsd中找到了从SD卡引导所需的一些基本函数,然后花了几天时间,创建了SDBOOT工程,我的设想是:PDK里面提供了SBL源代码,那我就可以在CCS里面以裸机的形式创建一个BOOT源代码工程,得到一个从SD卡引导的MLO可执行二进制文件。

以上设想不知道方向是否正确。

工程成功的编译通过,得到了.out文件,然后使用调试器让板子进入调试模式,程序初始化部分可以正常运行,能点亮板子上的LED,之后程序异常,出现异常,我猜测是因为这个工程得到的可执行程序是要在SD卡中引导并运行的,而我为了验证程序本身是否正确,是通过调试器来运行的,运行程序的环境不同,所以初始化完毕后程序就异常了。以上是我个人猜测,不知道理解是否正确。

  然后根据Processor SDK RTOS for AM57X_06_03_02的使用手册中提供的方法做如下操作:

  第一步,使用目录F:\ti\pdk_am57xx_1_0_17\packages\ti\boot\sbl\tools\out2rprc\bin中的可执行程序out2rprc.exe将工程的.out文件转换成二进制文件

  第二步,用目录F:\ti\pdk_am57xx_1_0_17\packages\ti\boot\sbl\tools\multicoreImageGen\bin中的可执行程序MulticoreImageGen.exe将第一步转换得到的二进制文件再转换成最终的二进制映像

  第三步,将第二步得到的最终的二进制映像复制到SD卡,并重命名为MLO,然后将卡插入板子,板子上电,板子无任何反应

  该板子提供了MLO文件,该文件在同一个SD卡中能将板子启动起来,PC端串口助手能打印出SBL的基本信息,板子上的LED有变化。

以上我所遇到的问题,不知道是哪个步骤引起的,望TI的工程师给予帮助,谢谢!

Nancy Wang:

您是使用SDK中预编译好的MLO没问题,自己的MLO运行没有反应是吗?以下链接参考过了吧。

software-dl.ti.com/…/index_Foundational_Components.html

,

user18914063:

是的,使用开发板的制造商提供的MLO没问题,我编译得到的不能从SD卡运行,这个文档仔细看了的

,

Nancy Wang:

MLO是否有使用tiImageGen 工具生成?

SBL/MLO image format: To generate the MLO, SBL uses tiImageGen tool to prepend the sbl.bin image with the TI header information.

也可以用仿真器调试symbol看一下卡在哪里。

,

user18914063:

我是用的out2rprc.exe  和 MulticoreImageGen.exe这两个工具得到的映像

,

user18914063:

哦,意思是这两个工具得到SBL.bin二进制文件,最后还要用tiImageGen.exe在转换一次才是最后可用的映像?

,

user18914063:

但是文档里,第4部分,4.6.3.2.4有关AM57xx的boot细节,又有下面这段话:The Am57xImageGen script uses out2rprc and multicoreImageGen format conversion tools to create the final application image. Graphical view of the multicore application image is provided below:

这段话里又明确说了,就是用out2rprc 和 multicoreImageGen 这两个工具来得到映像的呀

,

Nancy Wang:

user18914063 说:The Am57xImageGen script uses out2rprc and multicoreImageGen format conversion tools to create the final application image.

这个是应用程序application image镜像文件转换。

,

user18914063:

哦,好像明白了,这两个工具是针对一般的app.out,将其转换成映像,而我这里是SBL,不属于一般的app,所以是应该使用tiImageGen.exe才对?

,

user18914063:

那正确的映像生成顺序,是不是应该这样:

第一步 使用工具F:\ti\ccs1010\ccs\tools\compiler\gcc-arm-none-eabi-9-2019-q4-major\bin\arm-none-eabi-objcopy.exe 将SBL.out转换为SBL.bin

第二步 使用工具F:\ti\pdk_am57xx_1_0_17\packages\ti\boot\sbl\tools\tiImageGen\bin\tiimage.exe 将第一步的SBL.bin转换为SBL_ti.bin

第三步 将SBL_ti.bin拷贝到已正确初始化的SD卡中,并将文件重命名为MLO,即完成了MLO的创建和拷贝工作

以上三步,我是看的SDK使用文档中AM335x中关于MLO创建步骤的说明来操作的,AM57xx只提到tiImageGen转换,没提到第一步和第三步,应该是和AM335x一样的操作方法吧?

以下是SDK使用文档中AM335x创建SBL_ti.bin方法的截图

我按上述三个步骤得到的MLO拷贝到SD卡后,板子仍然无任何动作,在CCS中用调试器进调试模式是能正常点亮板子的LED灯的,另外,根据AM572x的技术参考手册第33章节,有如下对booting image镜像的存储器空间分配的说明,如下截图:

根据此截图,我在SBL的CCS工程中,在CMD文件里面,对AM5728内部RAM的分配如下所示:

MEMORY{

MMU_TABLE(RW) : o = 0x40370000, l = 0x10000 SBL_MEM(RWIX) : o = 0x40300000, l = 0x00070000 OCMC_RAM2(RWIX) : o = 0x40400000, l = 0x00100000 /* OCMC RAM */ OCMC_RAM3(RWIX) : o = 0x40500000, l = 0x00100000 /* OCMC RAM */}

//OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")//OUTPUT_ARCH(arm)

SECTIONS{ .text > SBL_MEM .stack > SBL_MEM .bss > SBL_MEM .cio > SBL_MEM .const > SBL_MEM .data > SBL_MEM .switch > SBL_MEM .sysmem > SBL_MEM .far > SBL_MEM .args > SBL_MEM .ppinfo > SBL_MEM .ppdata > SBL_MEM .heap > SBL_MEM RUN_START(bss_start) RUN_END(bss_end)

/* COFF sections */ .pinit > SBL_MEM .cinit > SBL_MEM

/* EABI sections */ .binit > SBL_MEM .init_array > SBL_MEM .neardata > SBL_MEM .fardata > SBL_MEM.rodata > SBL_MEM

}

不知道是否和内存分配有关系

赞(0)
未经允许不得转载:TI中文支持网 » AM5728: 可以在CCS里面修改和编译SBL并得到MLO可执行二进制文件吗
分享到: 更多 (0)