赞
踩
在系统移植之前,需要先了解开发板启动的大致流程,了解了大致流程后,才知道开发板启动需要哪些东西。了解开发板启动的时候,一定会遇到闻所未闻的东西,所以我们了解的顺序是:
目录
下面是一个简单的开发板局部部件示意图:
BL0
存放在CPU内部IROM中的一段固化代码,这段程序是在芯片出厂的时候就已经设置好了的,一般是初始化软硬件,如内存初始化。
拨码开关
可用于控制开发板的启动状态。开关拨到不同的位置对应着不同的启动状态,如SD卡启动、EMMC启动等。
EMMC
EMMC 相当于硬盘,断电不丢失,我们后续在系统移植的时候,可以将开发板启动所需的内容保存到EMMC中,每次开发板启动的时候,直接从EMMC中获取。
RAM
随机存储器,对于CPU而言,无论是 EMMC 还是 SD卡都属于外部存储设备,CPU无法直接访问到这些设备。因此,访问这些外部设备的任务就交给了内存,也就是这里的RAM。
SD卡
默认情况下,开发板是EMMC启动,但是如果EMMC中没有uboot程序,此时若要启动开发板,需要依赖SD卡中的uboot程序来启动。SD卡中也可以保存开发板启动所需文件。
嵌入式linux常用的 BootLoader是 uboot 。BootLoader是启动引导程序的统称,用于将软硬件环境初始化到合适的状态,为操作系统的运行加载和运行做准备。
BootLoader基本功能:
注意:uboot 包含了一系列的环境变量,这些环境变量就是传递给linux内核的参数,如等待交互的时间、自启动命令、自启动参数等。
uboot 有两种工作模式:自启动模式(默认)、交互模式
自启动模式(默认)
uboot启动后如果没有用户介入,在倒计时结束后会自动运行环境变量 bootcmd 中的命令(一般是加载linux镜像、设备树文件)
交互模式
uboot 启动后在倒计时结束之前,按下任意键即可进入交互模式,交互模式下可以使用 uboot 命令,如修改环境变量、设置EMMC、从服务端下载文件等。
我们平时所看到的Linux内核镜像有uImage、zImage,无论哪种,其实可以看做是Linux内核被压缩以后看到的文件。内核是计算机配置上的底层软件,主要包含了与硬件关系紧密的模块,如时钟管理、中断处理、设备驱动等(处于最底层)
设备树保存着存在于系统中的设备信息,当机器引导时,OS通过使用驱动程序(保存在Linux内核)和其他组件获得的信息建立此树,设备树的每一个节点是一个设备节点。
Linux一个重要的哲学是:一切皆文件。磁盘可以被当做是文件(只不过是挂载到了文件sda),串口也可以是文件,而这些文件都被保存在根文件系统中。
根文件系统首先是内核启动时所挂载的第一个文件系统,内核代码映像文件保存在根文件系统中,而系统引导启动程序会在根文件系统挂载之后从中把一些基本的初始化脚本和服务等加载到内存中去运行。
BL0是存放在CPU内部IROM中的一段固化代码,开发板在启动的时候会先运行BL0,随后会读取拨码开关的启动状态,后续开发板就知道是以哪种方式启动。
uboot 程序是一段引导程序,它会告诉CPU后续要做哪些事情,所以在完成初始化以后的第一件事就是加载 uboot 程序。
(SD卡 和 EMMC 终归属于外存,CPU无法访问外存,只有加载到内存,CPU才能访问)
uboot 会依次把linux、dtb、roofs从EMMC加载到内存
linux + dtb 才是一个完整的linux内核(对上提供系统调用接口,对下控制硬件运作),rootfs 其实就是我们所看到的各种文件,如 usr、bin、et,这些目录下保存了linux内核运行时会用到的二进制执行文件、配置文件。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。