U-Boot的启动流程通常分为两个主要阶段:**阶段一(BL1,SPL)**: - **初始化基本硬件**:包括CPU、内存和中断控制器等 - **设备初始化**:对开发板的基本配置进行设置 - 。uboot启动流程详细分析?更多详情请大家跟着小编一起来看看吧!

uboot启动流程详细分析

uboot启动流程详细分析(1)

U-Boot的启动流程通常分为两个主要阶段:

**阶段一(BL1,SPL)**:

- **初始化基本硬件**:包括CPU、内存和中断控制器等。

- **设备初始化**:对开发板的基本配置进行设置。

- **搬运U-Boot到内存**:将U-Boot第二阶段的代码从固态存储介质读取到内存中。

- **调用第二阶段代码**:完成第一阶段的工作后,跳转到U-Boot的主执行部分即第二阶段代码。

**阶段二(BL2,U-Boot)**:

- **环境变量初始化**:加载和设置环境变量,这些变量可以由用户在启动时配置或通过命令行动态设置。

- **外部设备初始化**:初始化如串口、以太网、SD卡接口等外部设备,以便能够与外界通信。

- **内存管理初始化**:建立内存的数据结构,为内核的加载做准备。

- **引导内核**:根据配置或者命令,从存储设备上加载内核映像到内存,并跳转到内核入口点启动操作系统。

以上是U-Boot启动流程的概要。每个阶段的详细函数调用和操作可能因具体的硬件平台和U-Boot版本而有所不同。为了深入理解U-Boot的启动流程,可以通过查看U-Boot的源代码以及相关的文档来获取更详细的信息。

uboot启动流程详细分析

uboot启动流程详细分析(2)

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