一、uboot概述
1.1 开发板启动过程
开发板上电后首先运行SOC内部iROM中固化的代码(BL0),这段代码先对基本的软硬件环境(时钟等...)进行初始化,然后再检测拨码开关位置获取启动方式,然后再将对应存储器中的uboot搬移到内存,然后跳转到uboot运行。
uboot开始运行后首先对开发板上的软硬件环境做进一步初始化,然后将linux内核、设备树(dtb)、根文件系统(rootfs)从外部存储器(或网络)搬移到内存,然后跳转到linux运行。
linux开始运行后先对系统环境做初始化,当系统启动完成后,Linux再从内存中(或网络)挂载根文件系统 。
所以首先需要在SD卡中刷一个uboot。
1.2 Bootloader
Bootloader
在操作系统运行之前运行的一小段代码,用于将软硬件环境初始化到 一个合适的状态,为操作系统的加载和运行做准备(其本身不是操作系统)
Bootloader基本功能
-> 初始化软硬件环境
-> 引导加载linux内核
-> 给linux内核传参
-> 执行用户命令
注:bootloader是启动引导程序的统称,嵌入式linux常用的bootloader是uboot
1.3 常用的Bootloader
二、SD卡启动盘制作
2.1 SD卡存储结构
SD卡的存储以扇区为单位,每个扇区的大小为512Byte, 其中零扇区存储分区表(即分区信息),后续的扇区可自行分区和格式化;
若选择SD卡启动,处理器上电后从第一个扇区开始将其中的内容搬移到内存,所以我们把uboot放到从第一个扇区开始之后的空间, 之后的空间根据个人需求可进行分区和格式化
2.2 实验步骤
$ sudo dd if=/dev/zero of=zero.bin count=1
$ cat zero.bin u-boot-fs4412.bin > win-u-boot-fs4412.bin
$ sudo dd if=/dev/zero of=clear.bin count=2048