目录
第一部分 背景介绍
一、什么是uboot?
二、为什么要有uboot
三、uboot的需要解决的问题?/uboot的作用?
第二部分 准备工作
一、代码来源
二、查看工具
第三部分 uboot结构分析
一、uboot_jiuding目录分析(位置:uboot_jiuding/)
- 文件夹分析
- 文件分析
第四部分 uboot工作过程
内容
一、uboot源码分析1-启动第一阶段
第一部分 背景介绍
一、什么是uboot?
U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目。
(1)uboot就是universal bootloader(通用启动代码),通用的意思就是在各种地方都可以用。所以说uboot具有可移植性。
(2)uboot具有可移植性并不是说uboot在哪个开发板都可以随便用,而是说uboot具有在源代码级别的移植能力,可以针对多个开发板进行移植,移植后就可以在这个开发板上使用。
二、为什么要有uboot?
首先要说明嵌入式Linux相关设备的启动流程:
嵌入式系统上电后先执行uboot,然后uboot负责初始化DDR,初始化Flash,然后将OS从Flash中读取到DDR中,然后启动OS(OS启动后uboot就无用了)
所以要使用uboot来完成OS启动前的相关准备。(在goole这个问题的时候,看到了知乎中有网友提问“问什么不把uboot和Linux系统写在一起”,结合网友回答,主要是为了提高Linux中的代码的代码可移植性,尽量将硬件相关的代码分开来,这样就可以在内核中屏蔽掉硬件的相关配置,从而提高内核的兼容性。)
三、uboot的需要解决的问题?/uboot的作用?
1、自身可开机直接启动
2、能引导操作系统内核启动并给内核传参
3、能提供系统部署功能
4、能进行SoC级和板级硬件管理
(1)uboot中实现了一部分硬件的控制能力(uboot初始化了部分硬件),因为uboot为了实现一些任务必须让这些硬件工作,譬如uboot要实现刷机必须能驱动iNand,譬如uboot在刷机时要在LCD上显示进度条就必须能驱动LCD,譬如能通过串口提供操作界面就必须驱动串口。譬如uboot要实现网络功能,就必须驱动网卡芯片。
(2)SoC级就是SoC内部外设,板级就是SoC外开发板上的硬件(譬如网卡、iNand)
第二部分 准备工作
一、代码来源
本代码来自朱老师物联网中嵌入式核心课程中提供的九鼎的x210开发板的uboot。
二、查看工具
使用Source Insight查看代码。
第三部分 uboot结构分析(位置:uboot_jiuding/)
文件夹分析
- api:和硬件功能无关的功能函数的API,uboot移植时基本不用管,这 些函数是uboot本身使用的。
- api_examples:示例代码
- board:board文件夹下每一个文件夹下都代表一个开发板,这个文件夹下就是描述这个开发板的信息。board目录下有多少个文件夹,就表示当前的uboot可以支持多少个开发板
- common:是普遍的,这个文件夹下放的是一些与具体硬件无关的普遍