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

关于UBL启动裸机程序的问题!

各位大神:

我有个关于UBL启动自己裸机程序的困扰.请各位大神帮忙.我自己做的板子,CPU是OMAPL138,自己先做了个简单的测试程序,LED灯闪烁(代码运行在DDR2里).我先没有使用UBL.只是将这个测试程序用AISGEN封装了下,再用NANDWriter下载到NAND,然后选择Nand启动,上电后,没有任何异常,LED灯正常闪烁.UART2打印进入程序如下:

.但是我现在需要加UBL启动自己的裸机程序问题就来了.我首先使用的是官方的UBL,UBL的.out的程序由AISGEN封装,由于在AISGEN做了所需要的所有初始化(包括NAND,DDR2,UART,GPIO等等),我屏蔽了UBL源程序的DEVICE_init()函数,只保留了UART2的初始化程序,DEVICE_NANDInit程序.并且在此处增加了测试DDR2读写的代码,即写入128个数,再读出来,不相等就打印出来并且whle(1);卡在那里.然后我把这个封装好的UBL.BIN用NANDWriter下载到了目标板上.再把那个测试程序的也用NANDWriter下载到了目标板上.选择Nand启动,上电后打印如下:

就是进入不了正常的测试程序.我查看了测试程序的MAP.

这个测试程序的入口也是正确的地址.与UBL打印的地址也是一样的,为什么没有启动呢?请各位大神指点迷津啊,小弟不胜感激啊!

Shine:

请问您用的UBL是starterware里的bootloader吗? 一定要用UBL么?AISgen工具里可以完成基本的初始化。

boss BAO:

回复 Shine:

你好,我用的是DaVinci-PSP-SDK-03.20.00.14那个文件boot-strap里面的UBL,我想在我的应用程序之前进行一些特殊的操作,所以想用UBL程序.

boss BAO:

回复 Shine:

你好,我还有个问题,就是我的应用程序在不调用标准system_config.lib的情况下,我加入了init,asm 等文件.我在.CMD文件中 写.text:Entry>0xC1080000的时候,我的.Map文件中,Entry分配的地址不是0xC1080000.但是如果我调用了标准的system_config.lib,并且使用 .init: {system_config.lib<init.obj> (.text)} load > 0xC1080000这句话,我的.Map文件中,Entry分配的地址就是0xC1080000.我不明白是为什么?

Tony Tang:

回复 boss BAO:

你的应用程序binary是什么格式的?从UBL是按它是不带格式的binary,一整块搬过去的。

boss BAO:

回复 Tony Tang:

找到问题了,我的应用程序有问题,谢谢

boss BAO:

回复 Tony Tang:

你好!我还有个问题,就是我的应用程序在不调用标准system_config.lib的情况下,我加入了init,asm 等文件.我在.CMD文件中 写.text:Entry > 0xC1080000的时候,我的.Map文件中,Entry分配的地址不是0xC1080000.但是如果我调用了标准的system_config.lib,并且使用 .init : {system_config.lib<init.obj> (.text)} load > 0xC1080000这句话,我的.Map文件中,Entry分配的地址就是0xC1080000.我不明白是为什么?这个问题还是没解决,就是CMD文件中使入口函数指定在确定位置的.text:Entry > 0xC1080000这样写就不行.

Tony Tang:

回复 boss BAO:

boss BAO.text:Entry > 0xC1080000

这里有Entry是个符号,或者说是函数名吧,需要你在代码里实现这个函数。我估计你的代码里没有吧,默认的入口函数是_c_int00,来源于rts library.

boss BAO但是如果我调用了标准的system_config.lib,并且使用 .init : {system_config.lib<init.obj> (.text)} load > 0xC1080000

system_config.lib里的C:\ti\OMAPL138_StarterWare_1_10_04_01\system_config\armv5\cgt\init.asm里实现的Entry:

boss BAO:

回复 Tony Tang:

感谢您的答复,我现在把他的system_config.lib去掉,将init.asm文件加入工程,在CMD文件将.init : {system_config.lib<init.obj> (.text)} load 这句话改为.text:Entry > 0xC1080000,但是MAP分配的地址就是随机的,

map如下:

cmd文件如下:

init.asm

不知道是不是由于.text:Entry > 0xC1080000这样写有什么不妥?其实我就是不想用标准lib,我想自己在init,asm文件里做些操作.但是我又没办法将Entry指定到固定地址.

 

 

Tony Tang:

回复 boss BAO:

简单按这样改一下就可以了:

在init.asm里:

MODE_USR .set 0x10MODE_FIQ .set 0x11MODE_IRQ .set 0x12MODE_SVC .set 0x13MODE_ABT .set 0x17MODE_UND .set 0x1BMODE_SYS .set 0x1F

I_F_BIT .set 0xC0

;**************************** Code Seection *********************************** .sect text1

;; This code is assembled for ARM instructions; .state32

cmd里:

SECTIONS{ text1 : load > 0xC1080000

赞(0)
未经允许不得转载:TI中文支持网 » 关于UBL启动裸机程序的问题!
分享到: 更多 (0)