移植u-boot详细过程

移植u-boot详细过程

ID:37737653

大小:431.53 KB

页数:29页

时间:2019-05-30

移植u-boot详细过程_第1页
移植u-boot详细过程_第2页
移植u-boot详细过程_第3页
移植u-boot详细过程_第4页
移植u-boot详细过程_第5页
资源描述:

《移植u-boot详细过程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、移植u-boot-1.3.4到S3C2440一.预备知识:1.首先,U-Boot1.3.4还没有支持s3c2440,移植仍是用2410的文件稍作修改而成的。2.2440和2410的区别:2440和2410的区别主要是2440的主频更高,增加了摄像头接口和AC‘97音频接口;寄存器方面,除了新增模块的寄存器外,移植所要注意的是NANDFlASH控制器的寄存器有较大的变化、芯片的时钟频率控制寄存器(芯片PLL的寄存器)有一定的变化。其他寄存器基本是兼容的。3.你开发板的boot方式是什么,开发板上电以后是怎么执行的。一般来说三星的开发板有三种启动方式:nand、nor

2、、ram。具体用那一种方式来启动决定于CPU的0M[0:1]这两个引脚,具体请参考S3C2440的datasheetnand:对于2440来说,CPU是不给nand-flash分配地址空间的,nand-flash只相当于CPU的一个外设,S3C2440做了一个从nand-flash启动的机制。开发板一上电,CPU就自动复制nand-flash里面的前4K-Bytes内容到S3C2440内部集成的SDRAM,然后把4K内容所在的RAM映射到S3C2440的0地址,从0地址开始执行。这4K的内容主要负责下面这些工作:初始化中断矢量、设定CPU的工作模式为SVC32模式

3、、屏蔽看门狗、屏蔽中断、初始化时钟、把整个u-boot重定向到外部SDRAM、跳到主要的C函数入口。nor:早期的时候利用nor-flash启动的方式比较多,就是把u-boot烧写到nor-flash里面,直接把nor-flash映射到S3C2440的0地址,上电从0地址开始执行。ram:直接把u-boot放到外部SDRAM上跑,这一般debug时候用到。4.u-boot程序的入口地址问题要理解程序的入口地址,自然想到的是连接文件,首先看看开发板相对于某个开发板的连接文件"/board/你的开发板/u-boot.lds",看一个2410的例子:ENTRY(_sta

4、rt)SECTIONS{.=0x00000000;.=ALIGN(4);.text:{cpu/arm920t/start.o(.text)*(.text)}.=ALIGN(4);.rodata:{*(.rodata)}.=ALIGN(4);.data:{*(.data)}.=ALIGN(4);.got:{*(.got)}__u_boot_cmd_start=.;.u_boot_cmd:{*(.u_boot_cmd)}__u_boot_cmd_end=.;.=ALIGN(4);__bss_start=.;.bss:{*(.bss)}_end=.;}(1)从ENTRY

5、(_start)可以看出u-boot的入口函数是_start,这个没错(2)从.=0x00000000也许可以看出_start的地址是0x00000000,事实并不是这样的,这里的0x00000000没效,在连接的时候最终会被TETX_BASE所代替的,具体请参考u-boot根目录下的config.mk.(3)网上很多说法是_start=TEXT_BASE,我想这种说法也是正确的,但没有说具体原因。本人的理解是这样的,TEXT_BASE表示text段的起始地址,而从.text:{cpu/arm920t/start.o(.text)*(.text)}看,放在text

6、段的第一个文件就是start.c编译后的内容,而start.c中的第一个函数就是_start,所以_start应该是放在text段的起始位置,因此说_start=TEXT_BASE也不为过。5.一直不明白的U-BOOT是怎样从4Ksteppingstone跳到RAM中执行的,现在终于明白了。关键在于:ldrpc,_start_armboot_start_armboot:.wordstart_armboot这两条语句,ldrpc,_start_armboot指令把_start_armboot这个标签的地方存放的内容(也即是start_armboot)移到PC寄存器里

7、面,start_armboot是一个函数地址,在编译的时候给分配了一个绝对地址,所以上面语句实际上是完成了一个绝对地址的跳转。而我一直不明白的为什么在start.S里面有很多BL,B跳转语句都没有跳出4Ksteppingstone,原因是他们都是相对于PC的便宜的跳转,而不是绝对地址的跳转。还有要补充一下LDR,MOV,LDR伪指令的区别。LDRR0,0x12345678//把地址0x12345678存放的内容放到R0里面MOVR0,#x//把立即数x放到R0里面,x必须是一个8bits的数移到偶数次得到的数。LDRR0,=0x12345678//把立即数0x12

8、34567

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。