完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 一只耳朵怪 于 2018-6-21 15:46 编辑
你好! 我用的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,难度还挺大的,如果有,能否给个链接? 不好意思,接触这个不太久,比较菜,有什么地方错了,还请谅解。。。 |
|
相关推荐
8个回答
|
|
|
|
|
|
你好! “是为了改变uboot中变量的位置”,您是否能够说得详细点? 为什么既然已经在SDRAM里面了,为什么还需要更改位置?从哪方面考虑? |
|
|
|
1. 初步来看过程差不多这样。
2. 代码重定位是uboot来定义的,uboot 框架不仅仅支持ARM处理器,还支持其他各种处理器,某些处理器要求重定位。 3. linux上解释代码的文档的确很少,ti只是移植了uboot到自己的处理器上,所以还是遵循了uboot的风格,没有多说文档,最好的方式是读代码和google。 另外,关于uboot的移植可以参考附件中的文档 如果我的回答解决了您的问题,请确认答案,谢谢!:) |
|
|
|
jvwueurw 发表于 2018-6-21 07:53 你好! 很谢谢你的答复,对我很有帮助,至少困扰了我很久,谢谢。。。 |
|
|
|
研究的好深入,学习了! 以我的经验,现在这么深入的研究uboot,意义不是特别大啊,有些浪费时间 |
|
|
|
你好! 我现在也只是在学习阶段,觉得不知道从哪里下手,能否给点建议? |
|
|
|
我建议是读代码,调试代码。 我前面发过一个帖子,讲怎么用ccs 调试uboot的,您可以看看 如果我的回答解决了您的问题,请确认答案,谢谢!:) |
|
|
|
jvwueurw 发表于 2018-6-21 08:38 谢谢,能否给个链接?麻烦了 |
|
|
|
只有小组成员才能发言,加入小组>>
334 浏览 1 评论
528 浏览 2 评论
NA555DR VCC最低电压需要在5V供电,为什么用3.3V供电搭了个单稳态触发器也使用正常?
773 浏览 3 评论
MSP430F249TPMR出现高温存储后失效了的情况,怎么解决?
649 浏览 1 评论
对于多级放大电路板,在PCB布局中,电源摆放的位置应该注意什么?
1126 浏览 1 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
55浏览 29评论
111浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
250浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
197浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
54浏览 13评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 10:32 , Processed in 1.201110 second(s), Total 91, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号