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

求助:关于AM335X的U-BOOT代码拷贝到SDRAM的问题。

你好!

        我用的u-boot,是ti网上下载的”u-boot-2013.01.01-psp06.00.00.00“的版本。我用的是从SD卡启动,对于AM335X,知道MLO是在内部RAM运行,而u-boot.img是在外部SDRAM运行, 那么MLO里面应该有拷贝u-boot.img到SDRAM的代码,我查阅了一下:

         在MLO的代码里,如果我用sd启动,那么在"/driver/mmc/spl_mmc.c"里面,函数spl_mmc_load_image(void)是不是实现了代码从SD卡拷贝到SDRAM动作(因为在spl_mmc_load_image(void)里面,调用了file_fat_read(CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME,(u8 *)spl_image.load_addr,0),其中 CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME = "u-boot.img",  spl_image.load_addr = 0x80800000),接着MLO里调用jump_to_image_no_args(spl_image_info *spl_image) (路径:/common/spl/spl.c), 在这个函数里面,调用了image_entry((u32 *)boot_params_ptr_addr)   ( (其中:image_entry = 0x80800000).),跳转到外部SDRAM运行,不知我的理解是不对的?

         倘若前面的理解是正确的,那么,在u-boot.img的board_init_f ( 路径:arch/arm/lib/board.c) 里面,调用relocate_code ,做代码重新定位,把代码定位到0x8fb4c000,这又有什么作用。

          我在u-boot下,分别用go 命令执行对应地址的程序,得出如下结果:

1. 从0x80800000开始执行:

go 0x80800000
## Starting application at 0x80800000 …

U-Boot 2013.01.01 (Feb 11 2014 – 10:21:13)

U-Boot code: 80800000 -> 80851A94  BSS: -> 80CA3DF0
I2C:   ready
monitor len: 004A3DF0
ramsize: 10000000
TLB table from 8fff0000 to 8fff4000
Top of RAM usable for U-Boot at: 8fff0000
Reserving 4751k for U-Boot at: 8fb4c000                                        Reserving 1152k for malloc() at: 8fa2c000                                      Reserving 32 Bytes for Board Info at: 8fa2bfe0                                 Reserving 128 Bytes for Global Data at: 8fa2bf60                               New Stack Pointer is: 8fa2bf50                                                 RAM Configuration:                                                             Bank #0: 80000000 256 MiB                                                      relocation Offset is: 0f34c000                                          
                                                                               gd->relocaddr = 8fb4c000                                                                                                                                      gd->start_addr_sp = 8fa2bf50                                                    
                                                                                                                  
                                     the code in board_init_f() is end, will return to crto.s                        
                                                                               (接下去打印的信息,同启动u-boot.img一样,在此处省略)。

 

2.  从 0x8fb4c000 处开始执行:

go 0x8fb4c000
## Starting application at 0x8FB4C000 …

U-Boot 2013.01.01 (Feb 11 2014 – 10:21:13)

U-Boot code: 80800000 -> 80851A94  BSS: -> 80CA3DF0
I2C:   ready
monitor len: 004A3DF0
ramsize: 10000000
TLB table from 8fff0000 to 8fff4000
Top of RAM usable for U-Boot at: 8fff0000
Reserving 4751k for U-Boot at: 8fb4c000                                        Reserving 1152k for malloc() at: 8fa2c000                                      Reserving 32 Bytes for Board Info at: 8fa2bfe0                                 Reserving 128 Bytes for Global Data at: 8fa2bf60                               New Stack Pointer is: 8fa2bf50                                                 RAM Configuration:                                                             Bank #0: 80000000 256 MiB                                                      relocation Offset is: 0f34c000                                                                                 
                                                                               gd->relocaddr = 8fb4c000                                                                                                                                      gd->start_addr_sp = 8fa2bf50                                                    
                                                                                                               the code in board_init_f() is end, will return to crto.s                        
                                                                                                                      undefined instruction                                                          
pc : [<9ee99a74>]          lr : [<9ee99808>]                                   
sp : 8fa2bf50  ip : 8fa2bfe0     fp : 8fa2c668                                 
r10: 00000002  r9 : 00000000     r8 : 8fa2bf60                                 
r7 : 8fb9e490  r6 : 8fb4c000     r5 : 8fa2bf60  r4 : 8fa2bf50                  
r3 : 8fb72d2c  r2 : 8fb4c000     r1 : 8fa2bf60  r0 : 8fb4c000                  
Flags: Nzcv  IRQs off  FIQs on  Mode SVC_32                                    
Resetting CPU …                                                              
                                                                               
resetting …                                                                                                                                                 U-Boot SPL 2013.01.01 (Feb 11 2014 – 10:21:13)

(接下去打印的内容,同系统复位以后,从MLO开始执行,在执行u-boot.img的内容一样,在此处省略)。

从上面两个打印内容,是不是可以看出,其实在0x8fb4c000其实也是有应用代码的,而且从打印的内容可以判断,在0x8fb4c000处的代码也是u-boot.img,只是在执行完board_init_f ( 路径:arch/arm/lib/board.c),返回_main(路径:arch/arm/lib/crto.s) ,在里面,出现了问题,致使系统复位,从MLO开始执行。

OK,那么,想问下:

1.   上面理解的MLO拷贝代码u-boot.img到外部SDRAM的流程,是否正确?(上文黄色背景的内容)。

2.   为什么需要执行代码重新定位,把代码重新拷贝到0x8fb4c000,在MLO里面不是已经把u-boot.img解压到0x80800000地址了吗,为什么在u-boot.img里面,还需要调用relocate_code把代码重新定位到0x8fb4c000上呢?

3.   ti有没有详细介绍这个的文档?对于像我这种新手,要搞懂对应IC的u-boot,难度还挺大的,如果有,能否给个链接?

不好意思,接触这个不太久,比较菜,有什么地方错了,还请谅解。。。

 

tony2:

2. 是为了改变uboot中变量的位置。

3.没有的啦,这个不关ti的事情。

haolin xie:

回复 tony2:

你好!

      “是为了改变uboot中变量的位置”,您是否能够说得详细点?

       为什么既然已经在SDRAM里面了,为什么还需要更改位置?从哪方面考虑?

haolin xie:

回复 Yaoming Qin:

你好!

        很谢谢你的答复,对我很有帮助,至少困扰了我很久,谢谢。。。

leo chen:

回复 haolin xie:

研究的好深入,学习了!

以我的经验,现在这么深入的研究uboot,意义不是特别大啊,有些浪费时间

haolin xie:

回复 leo chen:

你好!

       我现在也只是在学习阶段,觉得不知道从哪里下手,能否给点建议?

Yaoming Qin:

回复 haolin xie:

我建议是读代码,调试代码。

我前面发过一个帖子,讲怎么用ccs 调试uboot的,您可以看看

haolin xie:

回复 Yaoming Qin:

谢谢,能否给个链接?麻烦了

赞(0)
未经允许不得转载:TI中文支持网 » 求助:关于AM335X的U-BOOT代码拷贝到SDRAM的问题。
分享到: 更多 (0)

© 2026 TI中文支持网   网站地图 鲁ICP备2022002796号-1