- 1
- 0
- 约1.33万字
- 约 12页
- 2017-11-29 发布于江西
- 举报
uboot 启动流程分析
U-Boot启动流程
大多数bootloader都分为stage1和stage2两大部分,u-boot也不例外。依赖于CPU体系结构的代码(如设备初始化代码等) 通常都放在stage1,且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。
u-boot启动大致流程如图1所示:
??????????????????????????????????????????????????????????????????????????????????????? 图 1
Stage1
在flash中执行的引导代码,也就是bootloader中的stage1,负责初始化硬件环境,把u-boot从flash加载到RAM中去,然后跳到lib_arm/board.c中的start_armboot中去执行。
u-boot的stage1代码通常放在start.s文件中,它用汇编语言写成,其主要代码部分如下:
1)??定义入口由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash) 的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本来完成。
2)??设置异常向量(Exception Vector) 。
3)??设置CPU的速度、时钟频率及中断控制寄存器。
4)??初始化内存控制器
5)??将ROM中的程序复制到RAM中。
6)??初始化堆栈
7)??转到RAM中执行,该工作可使用指令ldr pc, _start_armboot来完成。
Stage2
lib_arm/board.c中的start_armboot是C语言开始的函数,也是整个启动代码中C语言的主函数,同时还是整个u-boot(armboot) 的主函数,该函数主要流程分析如下:
void start_armboot (void){??? init_fnc_t **init_fnc_ptr;??? char *s;#if !defined(CFG_NO_FLASH) || defined (CONFIG_VFD) || defined(CONFIG_LCD)??? ulong size;#endif#if defined(CONFIG_VFD) || defined(CONFIG_LCD)??? unsigned long addr;#endif??? /* Pointer is writable since we allocated a register for it */??? /* 给全局数据变量gd安排空间 */??? gd = (gd_t*)(_armboot_start - CFG_MALLOC_LEN - sizeof(gd_t));??? ??? /* compiler optimization barrier needed for GCC = 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, sizeof (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[] = {??? cpu_init,???????????????? /* basic cpu dependent setup */#if defined(CONFIG_SKIP_RELOCATE_UBOOT)??? reloc_init,??????????? /* Set the relocation done flag, must?????????????????????????? do this AFTER cpu_init(), but as soon????????????????????
您可能关注的文档
- NTN轴承讲座.ppt
- NIT考试相关问题.doc
- nste-acs多支血管病变靶血管的判定.ppt
- NOKIA_GSM_BSS_网络健康检查手册.doc
- NTP规划与部署指导.doc
- OA 办公系统应用.ppt
- OA办公管理系统概要设计说明.doc
- OA系统功能模块及使用说明书.doc
- OA系统在企业管理中的应用.doc
- OBDII故障码库.doc
- 初中九年级英语Unit 13环境保护主题听说整合教学设计.docx
- 85分式方程及其解法课件人教版数学八年级上册.pptx
- 基于核心素养的博物馆主题说明文写作教学设计与实施——以九年级英语为例.docx
- 53一次函数的意义第课时课件浙教版八年级数学上册.pptx
- 大单元视角下“人民民主政权的巩固”与历史关键能力进阶教学设计——以初中历史中考复习课为例.docx
- 五年级数学下册典型例题解析人教版期末重点攻克.pptx
- 小学四年级信息技术《智启信息时代:查找网上信息的基石》教学设计及反思.docx
- 大疆域·大人口·大战略:中国国家空间认知的初步建构.docx
- 人教版(一年级起点)小学英语四年级上册Revision 1 Lesson 2教学设计.docx
- 大单元结构化复习:旧民主主义革命时期(18401919)的内忧外患与救亡图存.docx
原创力文档

文档评论(0)