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.

关于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打印的地址也是一样的,为什么没有启动呢?请各位大神指点迷津啊,小弟不胜感激啊!

  • 请问您用的UBL是starterware里的bootloader吗? 一定要用UBL么?AISgen工具里可以完成基本的初始化。
  • 你好,我用的是DaVinci-PSP-SDK-03.20.00.14那个文件boot-strap里面的UBL,我想在我的应用程序之前进行一些特殊的操作,所以想用UBL程序.

  • 你好,我还有个问题,就是我的应用程序在不调用标准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.我不明白是为什么?
  • 你的应用程序binary是什么格式的?从UBL是按它是不带格式的binary,一整块搬过去的。
  • 找到问题了,我的应用程序有问题,谢谢

  • 你好!我还有个问题,就是我的应用程序在不调用标准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这样写就不行.

  • .text:Entry > 0xC1080000

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

    但是如果我调用了标准的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:

  • 感谢您的答复,我现在把他的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指定到固定地址.

     

     

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

    在init.asm里:


    MODE_USR .set 0x10
    MODE_FIQ .set 0x11
    MODE_IRQ .set 0x12
    MODE_SVC .set 0x13
    MODE_ABT .set 0x17
    MODE_UND .set 0x1B
    MODE_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