uboot 启动流程分析

uboot 启动流程分析

ID:10274419

大小:111.50 KB

页数:12页

时间:2018-06-14

uboot 启动流程分析_第1页
uboot 启动流程分析_第2页
uboot 启动流程分析_第3页
uboot 启动流程分析_第4页
uboot 启动流程分析_第5页
资源描述:

《uboot 启动流程分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、U-Boot启动流程大多数bootloader都分为stage1和stage2两大部分,u-boot也不例外。依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在stage1,且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。u-boot启动大致流程如图1所示:                                                                                       图1>Stage1在flas

2、h中执行的引导代码,也就是bootloader中的stage1,负责初始化硬件环境,把u-boot从flash加载到RAM中去,然后跳到lib_arm/board.c中的start_armboot中去执行。u-boot的stage1代码通常放在start.s文件中,它用汇编语言写成,其主要代码部分如下:1)  定义入口由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。2)  设置异常向量

3、(ExceptionVector)。3)  设置CPU的速度、时钟频率及中断控制寄存器。4)  初始化内存控制器5)  将ROM中的程序复制到RAM中。6)  初始化堆栈7)  转到RAM中执行,该工作可使用指令ldrpc,_start_armboot来完成。>Stage2lib_arm/board.c中的start_armboot是C语言开始的函数,也是整个启动代码中C语言的主函数,同时还是整个u-boot(armboot)的主函数,该函数主要流程分析如下:voidstart_armboot(void){   init_fn

4、c_t**init_fnc_ptr;   char*s;#if!defined(CFG_NO_FLASH)

5、

6、defined(CONFIG_VFD)

7、

8、defined(CONFIG_LCD)   ulongsize;#endif#ifdefined(CONFIG_VFD)

9、

10、defined(CONFIG_LCD)   unsignedlongaddr;#endif   /*Pointeriswritablesinceweallocatedaregisterforit*/   /*给全局数据变量gd安排空间*/   gd=(gd

11、_t*)(_armboot_start-CFG_MALLOC_LEN-sizeof(gd_t));      /*compileroptimizationbarrierneededforGCC>=3.4*/   __asm____volatile__("":::"memory");   /*给板子数据变量gd->bd安排空间*/   memset((void*)gd,0,sizeof(gd_t));   gd->bd=(bd_t*)((char*)gd-sizeof(bd_t));   memset(gd->bd,0,size

12、of(bd_t));   monitor_flash_len=_bss_start-_armboot_start;      /*顺序执行init_sequence数组中的初始化函数*/   for(init_fnc_ptr=init_sequence;*init_fnc_ptr;++init_fnc_ptr){       if((*init_fnc_ptr)()!=0){           hang();       }   }   /*初始化函数列表:   init_fnc_t*init_sequence[]={   

13、cpu_init,                /*basiccpudependentsetup*/#ifdefined(CONFIG_SKIP_RELOCATE_UBOOT)   reloc_init,           /*Settherelocationdoneflag,must                          dothisAFTERcpu_init(),butassoon                          aspossible*/#endif   board_init,      

14、     /*basicboarddependentsetup*/   interrupt_init,       /*setupexceptions*/   env_init,             /*initializeenvironment*/   init_bau

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

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

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