u-boot学习笔记.pdf
1、 u-boot-1.1.6 目录结构 . |-- board -->平台依赖,存放电路板相关源文件的目录,例如:dave、smdk2410等 |-- cpu -->平台依赖,存放与具体CPU型号相关源文件的目录,例如:arm720t、arm920t、i386等 |-- lib_arm -----------------------------------------------------------------------------------------------------> |-- lib_avr32 --> |-- lib_blackfin --> |-- lib_i386 -->平台依赖,用于存放对相应体系结构通用的文件,主要用于实现相关平台通用的函数 |-- lib_m68k -->比如lib_arm : |-- lib_microblaze -->存放对ARM体系结构通用的文件,主要用于实现ARM平台通用的函数 |-- lib_mips --> |-- lib_nios --> |-- lib_nios2 --> |-- lib_ppc -------------------------------------------------------------------------------------------------------> |-- lib_generic -->通用,对所有体系结构通用的库函数的实现,比如vsprintf、string等函数的实现 |-- include -->通用,头文件和开发板配置文件,所有开发板的配置文件都在 include/configs目录下 |-- common -->通用,通用的多功能函数实现,比如U-BOOT的命令setenv、bootm、cp等函数的实现 |-- drivers -->通用,通用设备的驱动程序 |-- disk -->通用,硬盘接口驱动程序 |-- dtt -->通用,传感器的驱动程序 |-- fs -->通用,存放文件系统相关的程序 ### U-Boot 1.1.6 目录结构及启动流程详解 #### 一、U-Boot 1.1.6 目录结构解析 U-Boot (Universal Boot Loader) 是一个支持多种处理器架构的开源BootLoader项目,广泛应用于嵌入式系统中。U-Boot 1.1.6 的目录结构清晰地体现了其模块化的设计思想,下面将对这些关键目录进行详细解读。 1. **board** - **用途**: 存放与特定硬件平台相关的源文件。 - **示例**: 包含了针对不同电路板(如 dave、smdk2410 等)的定制化代码。 2. **cpu** - **用途**: 存放与具体 CPU 型号相关的源文件。 - **示例**: 支持多种 CPU 架构,如 arm720t、arm920t、i386 等。 3. **lib_arm** 和 其他类似目录(如 lib_avr32、lib_blackfin、lib_i386、lib_m68k 等) - **用途**: 分别存放对应 CPU 架构下的通用库函数实现。 - **示例**: `lib_arm` 主要用于 ARM 架构,实现如字符串处理等通用功能。 4. **lib_generic** - **用途**: 实现跨架构的通用库函数。 - **示例**: 包括 vsprintf、字符串操作等通用函数。 5. **include** - **用途**: 存放头文件和开发板配置文件。 - **示例**: 所有开发板的配置文件位于 `include/configs` 目录下。 6. **common** - **用途**: 实现通用的功能函数,如 U-BOOT 命令。 - **示例**: 包含了如 setenv、bootm、cp 等命令的实现。 7. **drivers** - **用途**: 存放通用设备驱动程序。 - **示例**: 包括对各种常见外设的支持。 8. **disk** - **用途**: 存放硬盘接口驱动程序。 9. **dtt** - **用途**: 存放传感器驱动程序。 10. **fs** - **用途**: 存放文件系统相关的程序。 11. **nand_spl** - **用途**: 存放 NAND Flash 引导程序。 12. **net** - **用途**: 存放网络相关的程序。 13. **post** - **用途**: 存放上电自检的程序。 14. **rtc** - **用途**: 存放实时时钟 (RTC) 的驱动程序。 15. **examples** - **用途**: 提供应用例程,包括一些独立运行的应用程序的例子。 - **示例**: 包括 helloworld 示例。 16. **tools** - **用途**: 存放制作 S-Record 或者 U-boot 格式的映像等工具。 - **示例**: 包括 mkimage 工具。 17. **doc** - **用途**: 存放开发使用文档。 #### 二、U-Boot 启动流程解析 U-Boot 的启动流程涉及到多个阶段,下面是对该流程的一个概述: 1. **低级初始化(lowlevel_init)**: 这一步通常在板级支持包(BSP)中定义,执行最基础的硬件初始化工作。 2. **CPU 初始化(cpu_init_crit)**: 初始化 CPU 特定的硬件资源。 3. **重定位(relocate)**: 调整 U-Boot 在内存中的位置。 4. **开始引导(start_armboot)**: 进入 ARM 架构下的引导流程。 5. **主循环(main_loop)**: 进入 U-Boot 的命令行界面,等待用户输入。 ##### 启动流程细节 - **Start.S 文件**: 位于 `u-boot-1.1.6/cpu/xxx/start.S`,包含了启动阶段的汇编代码,用于初始化硬件和跳转到 C 语言环境。 - **reset 函数**: 处理复位过程,通常包含硬件复位操作。 - **cpu_init_crit**: 在 `u-boot-1.1.6/cpu/xxx/start.S` 中定义,用于 CPU 的临界区初始化。 - **lowlevel_init**: 在 `u-board/yyy/lowlevel_init.S` 中定义,执行特定于电路板的初始化操作。 - **relocate**: 重新定位 U-Boot 在内存中的位置,确保 U-Boot 位于正确的地址空间中。 - **start_armboot**: 位于 `u-boot-1.1.6/lib_arm/board.c`,用于开始 ARM 架构下的引导过程。 - **main_loop**: 定义在 `u-boot-1.1.6/common/main.c` 中,是 U-Boot 的主循环,负责提供命令行接口并处理用户的输入。 通过以上对 U-Boot 1.1.6 目录结构及启动流程的详细介绍,我们可以更深入地理解 U-Boot 的内部结构及其如何在嵌入式系统中发挥重要作用。这对于学习和开发基于 U-Boot 的嵌入式系统至关重要。
剩余40页未读,继续阅读
- 粉丝: 1
- 资源: 21
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 秋招信息获取与处理基础教程
- 程序员面试笔试面经技巧基础教程
- Python实例-21个自动办公源码-数据处理技术+Excel+自动化脚本+资源管理
- 全球前8GDP数据图(python动态柱状图)
- 汽车检测7-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- 检测高压线电线-YOLO(v5至v9)、COCO、Darknet、VOC数据集合集.rar
- 检测行路中的人脸-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、VOC数据集合集.rar
- Image_17083039753012.jpg
- 检测生锈铁片生锈部分-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、VOC数据集合集.rar
- 检测桌面物体-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord、VOC数据集合集.rar
- 1
- 2
前往页