U-BOOT启动大致流程

  针对U-BOOT的分析,首先从链接文件开始,这是针对编译过的,没有编译过的,则直接从start.S文件开始,这里以u-boot-2009.11为例,对于S3C2440A来说,其内核是arm920t,所以其文件位置位于cpu\arm920t\start.S

 

1. start.S最先执行的是start_code函数,此函数源码中,有如下动作

1.1 将CPU设置成SVC32模式

1.2 关闭看门狗、关中断、设置时钟分频系数,这三部分一般会放到与板级相关的初始化文件lowlevel_init.S中,位置:board\samsung\smdk2410\lowlevel_init.S

1.3 CPU初始化,关闭MMU、caches

1.4 跳转到lowlevel_init.S文件中的lowlevel_init函数,位置:board\samsung\smdk2410\lowlevel_init.S

 

2. lowlevel_init.S文件中的lowlevel_init函数对内存控制器进行初始化,然后再返回到start.S中,接着后面的动作

 

3. 内存初始化后,返回到start.S中动作如下

3.1 将U-BOOT重定向到内存中运行,即复制到内存中去

3.2 对栈进行初始化

3.3 清BSS段

3.4 跳转到board.c文件中的start_armboot函数,位置:lib_arm\board.c

 

4. board.c文件中的start_armboot函数大致做如下动作

4.1 NOR FLASH、NAND FLASH、串口、网卡、MMC等初始化,这些都是与具体的CPU、板上的器件强相关的初始化

4.2 跳转到main.c文件中的main_loop函数,位置:common\main.c

 

5. main.c文件中的main_loop函数大致做如下动作

5.1 设置启动次数、Modem功能、版本号、启动延时等

5.2 循环读取用户输入信息,执行相应操作

 

其文件的跳转流程是start.S-->lowlevel_init.S-->start.S-->board.c-->main.c

 

posted @ 2021-07-25 18:00  秋水寒林  阅读(264)  评论(0编辑  收藏  举报