uboot启动流程详细分析(简述uboot启动流程)

2023-01-11 05:13:31 发布:网友投稿 作者:网友投稿
热度:17

针对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

1.uboot启动总体流程 uboot启动主要分为两部分arch级初始化和板级初始化。 下面具体分析各个初始化。

2.arch级初始化 入口点是 arch/arm/lib/vectors.S 文件中的_start。 _start 开始的是中断向量表,跳转到 reset 函数里面, reset 函数在 arch/arm/cpu/armv7/start.S 里面。 reset 函数跳转到了 save_boot_params 函数,save_boot_params 函数又跳转save_boot_params_ret 函数,该函数主要分为五个功能。

下一篇:vivo光遇闪退解决方法?
上一篇:wewritetoeachotherallthetime是什么意思