【系统移植】开发板的启动过程(认识uboot)

在系统移植之前,需要先了解开发板启动的大致流程,了解了大致流程后,才知道开发板启动需要哪些东西。了解开发板启动的时候,一定会遇到闻所未闻的东西,所以我们了解的顺序是:

  • 了解开发板启动时涉及到的部件
  • 了解启动过程中涉及到的文件(uboot、内核镜像、设备树、根文件系统)
  • 了解开发板的整体启动流程

目录

1、开发板启动相关部件

2、认识 uboot 

(1) 什么是 uboot (BootLoader)

(2) uboot 的两种模式

3、认识Linux内核镜像、设备树文件

4、认识根文件系统

5、开发板启动过程(以 EMMC 启动为例)

(1) 运行 BL0(初始化)

(2) 加载 uboot 引导程序

(3) 加载 linux 镜像、设备树、根文件系统


1、开发板启动相关部件

下面是一个简单的开发板局部部件示意图:

BL0

存放在CPU内部IROM中的一段固化代码,这段程序是在芯片出厂的时候就已经设置好了的,一般是初始化软硬件,如内存初始化。

拨码开关

可用于控制开发板的启动状态。开关拨到不同的位置对应着不同的启动状态,如SD卡启动、EMMC启动等。

EMMC

EMMC 相当于硬盘,断电不丢失,我们后续在系统移植的时候,可以将开发板启动所需的内容保存到EMMC中,每次开发板启动的时候,直接从EMMC中获取。

RAM

随机存储器,对于CPU而言,无论是 EMMC 还是 SD卡都属于外部存储设备,CPU无法直接访问到这些设备。因此,访问这些外部设备的任务就交给了内存,也就是这里的RAM。

SD卡

默认情况下,开发板是EMMC启动,但是如果EMMC中没有uboot程序,此时若要启动开发板,需要依赖SD卡中的uboot程序来启动。SD卡中也可以保存开发板启动所需文件。

2、认识 uboot 

(1) 什么是 uboot (BootLoader)

嵌入式linux常用的 BootLoader是 uboot 。BootLoader是启动引导程序的统称,用于将软硬件环境初始化到合适的状态,为操作系统的运行加载和运行做准备。

BootLoader基本功能:

  • 初始化软硬件环境
  • 引导加载linux内核(加载linux程序和设备树)
  • 给linux内核传参
  • 执行用户命令

注意:uboot 包含了一系列的环境变量,这些环境变量就是传递给linux内核的参数,如等待交互的时间、自启动命令、自启动参数等。

(2) uboot 的两种模式

uboot 有两种工作模式:自启动模式(默认)、交互模式

自启动模式(默认)

        uboot启动后如果没有用户介入,在倒计时结束后会自动运行环境变量 bootcmd 中的命令(一般是加载linux镜像、设备树文件)

交互模式

        uboot 启动后在倒计时结束之前,按下任意键即可进入交互模式,交互模式下可以使用 uboot 命令,如修改环境变量、设置EMMC、从服务端下载文件等。

3、认识Linux内核镜像、设备树文件

我们平时所看到的Linux内核镜像有uImage、zImage,无论哪种,其实可以看做是Linux内核被压缩以后看到的文件。内核是计算机配置上的底层软件,主要包含了与硬件关系紧密的模块,如时钟管理、中断处理、设备驱动等(处于最底层)

设备树保存着存在于系统中的设备信息,当机器引导时,OS通过使用驱动程序(保存在Linux内核)和其他组件获得的信息建立此树,设备树的每一个节点是一个设备节点。

4、认识根文件系统

Linux一个重要的哲学是:一切皆文件。磁盘可以被当做是文件(只不过是挂载到了文件sda),串口也可以是文件,而这些文件都被保存在根文件系统中。

根文件系统首先是内核启动时所挂载的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。

5、开发板启动过程(以 EMMC 启动为例)

(1) 运行 BL0(初始化)

BL0是存放在CPU内部IROM中的一段固化代码,开发板在启动的时候会先运行BL0,随后会读取拨码开关的启动状态,后续开发板就知道是以哪种方式启动。

(2) 加载 uboot 引导程序

uboot 程序是一段引导程序,它会告诉CPU后续要做哪些事情,所以在完成初始化以后的第一件事就是加载 uboot 程序。

  • SD卡启动:BL0会把SD卡中的uboot程序读取到内存,然后运行uboot
  • EMMC启动:BL0会把EMMC中的uboot程序读取到内存,然后运行uboot

(SD卡 和 EMMC 终归属于外存,CPU无法访问外存,只有加载到内存,CPU才能访问)

(3) 加载 linux 镜像、设备树、根文件系统

uboot 会依次把linux、dtb、roofs从EMMC加载到内存

  • linux(linux系统的上层代码、驱动代码,即软件部分)
  • dbt(设备树,保存了硬件设备信息)
  • rootfs(根文件系统,并不属于内核,本质是文件,linux在运行的时候可能会要用到一些文件,根文件系统中就保存了linux运行所需的文件)

linux + dtb 才是一个完整的linux内核(对上提供系统调用接口,对下控制硬件运作),rootfs 其实就是我们所看到的各种文件,如 usr、bin、et,这些目录下保存了linux内核运行时会用到的二进制执行文件、配置文件。

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值