免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4640 | 回复: 7
打印 上一主题 下一主题

学习uboot遇到的几个问题,想请教一下大家 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-01 13:42 |只看该作者 |倒序浏览
最近在研究uboot,大概三个星期了,对uboot的执行流程大致已经了解了,但是中间还是有几个问题一直搞不明白,

1 我们编译好的uboot.bin文件是要烧写到Nor Flash 或者 Nand Flash中去的,uboot.bin是不是就是纯粹的代码和数据,已经没有别的辅助信息了。

2 这个uboot.bin和linux下的可执行程序是不一样的,linux下可执行程序是ELF格式的,里面有很多辅助信息,如elf表头,段属性 等等,程序的执行是通过装载器对elf进行处理并进行装载才可以运行的,
   而uboot.bin已经可以理解为已经经过装载的elf文件,里面就是可执行的指令和一些数据,因为Arm处理器本身没有加载器

3 我们把uboot.bin烧写到了Nor Flash 的开始处,即地址为0,Arm处理器复位以后会从0地址处进行取地址并执行,这样uboot就执行起来了

4 如果生成uboot.bin的链接过程中基地址都定以为0,我认为这样执行uboot.bin没问题,但是我看uboot链接过程基地址不是0地址处,这样的话地址的重定位不久出错了吗?就是说一些指令在链接过程中地址重定位是并不是以0为基质,而我们烧写uboot.bin去时在0地址处?

以上都是我的理解,希望大家指点

论坛徽章:
0
2 [报告]
发表于 2011-12-01 16:03 |只看该作者
回复 1# q631951221


    1 我们编译好的uboot.bin文件是要烧写到Nor Flash 或者 Nand Flash中去的,uboot.bin是不是就是纯粹的代码和数据,已经没有别的辅助信息了。
是的,就是纯粹的代码(指令)和数据。


2 这个uboot.bin和linux下的可执行程序是不一样的,linux下可执行程序是ELF格式的,里面有很多辅助信息,如elf表头,段属性 等等,程序的执行是通过装载器对elf进行处理并进行装载才可以运行的,而uboot.bin已经可以理解为已经经过装载的elf文件,里面就是可执行的指令和一些数据,因为Arm处理器本身没有加载器
可以这么理解。不过有点不太一样的是,uboot.bin执行的环境都是绝对地址,而linux下的elf被加载执行,一般都是进程中的相对地址

3 我们把uboot.bin烧写到了Nor Flash 的开始处,即地址为0,Arm处理器复位以后会从0地址处进行取地址并执行,这样uboot就执行起来了
是的。就是cpu一点点执行对应的指令。

4 如果生成uboot.bin的链接过程中基地址都定以为0,我认为这样执行uboot.bin没问题,但是我看uboot链接过程基地址不是0地址处,这样的话地址的重定位不久出错了吗?就是说一些指令在链接过程中地址重定位是并不是以0为基质,而我们烧写uboot.bin去时在0地址处?
arm芯片刚上电后,是从0地址运行。
所以,我们首先要保证0地址有程序指令可以运行。所以我们把uboot.bin烧写到起始地址位0的Nor Flash中。
而uboot中开始的一段代码中,一般会由reload重载代码,即把uboot本身自己的这段代码,重新加载(uboot中执行拷贝指令),拷贝到对应的链接所指定的基地址。
对应的uboot这段开始的代码,是所谓的地址无关的PIC(position independent code)。
然后在重新执行对应的代码,执行到那段reload代码,经过判断,已经是reload过了,就不会再重新reload,会继续执行后面的代码。
而全部的代码,是以某个基地址为基地址链接过的,所以后面的代码执行,也就是我们所希望的了。
一般reload,都是被reload到对应的内存中。

更新关于初始化部分内容,可以参考:
Uboot中start.S源码的指令级的详尽解析 v1.6
http://bbs.chinaunix.net/thread-2312785-1-1.html

论坛徽章:
0
3 [报告]
发表于 2011-12-01 19:31 |只看该作者
回复 2# crifan

嗯,谢谢了,证明我的理论是正确的就踏实多了,呵呵!我现在去看看你提供的网址

论坛徽章:
2
2015年亚洲杯之阿曼
日期:2015-03-23 18:11:212015亚冠之大阪钢巴
日期:2015-09-07 13:54:16
4 [报告]
发表于 2011-12-01 23:17 |只看该作者
u-boot里面有一个很好用的地址
TEXT_BASE

论坛徽章:
0
5 [报告]
发表于 2011-12-02 11:29 |只看该作者
回复 4# CN薰様


    嗯 这个是链接时候重定位的基址

论坛徽章:
2
2015年亚洲杯之阿曼
日期:2015-03-23 18:11:212015亚冠之大阪钢巴
日期:2015-09-07 13:54:16
6 [报告]
发表于 2011-12-08 11:59 |只看该作者
回复 5# q631951221


    u-boot有2种方式加载

1. u-boot存放在NOR flash中,这种是可以片上执行的,例如powerpc,启动时CPU直接跳转到0x00000100或者0xFFFFF100或其他地址开始运行u-boot,此时u-boot会初始化CPU、SDRAM/DDR等,最后加载内核和根文件系统。
2. u-boot存放在DataFlash/NANDFlash中。这种情况u-boot不能直接在flash中执行,例如AT91RM9200。CPU内部总会有一个很小的bootloader。这个bootloader会初始化CPU、SDRAM/DDR,然后将u-boot拷贝到SDRAM/DDR的某一个地址,在通过跳转语句执行u-boot。在这种情况下,u-boot会跳过low level init,而直接加载内核和根文件系统。

论坛徽章:
0
7 [报告]
发表于 2011-12-09 16:19 |只看该作者
回复  q631951221


    u-boot有2种方式加载

1. u-boot存放在NOR flash中,这种是可以片上执行的, ...
CN薰様 发表于 2011-12-08 11:59



    嗯

论坛徽章:
0
8 [报告]
发表于 2011-12-17 00:23 |只看该作者
回复  q631951221


    u-boot有2种方式加载

1. u-boot存放在NOR flash中,这种是可以片上执行的, ...
CN薰様 发表于 2011-12-08 11:59



    之前听老师讲过,但是很少用就忘了,温习了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP