一、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 实验步骤
1
、将资料中“
u-boot
镜像”中的
u-boot-fs4412.bin
拷贝到
ubuntu
的家目录下
2
、在终端输入如下命令,制作一个
512
字节的空镜像
$ sudo dd if=/dev/zero of=zero.bin count=1
显示如下信息,则表示制作成功
3
、 执行如下命令,将
uboot
追加到
zero.bin
之后生成
win-u-boot-fs4412.bin
$ cat zero.bin u-boot-fs4412.bin > win-u-boot-fs4412.bin
把zero.bin和u-boot-fs4412.bin输出重定向到win-u-boot-fs4412.bin中。我们希望把uboot烧到1扇区之后,所以前面需要加一个空的zero.bin。
4
、 再执行如下命令,制作一个
1M
的空镜像(用于擦除
SD
卡中原有的数据)
$ sudo dd if=/dev/zero of=clear.bin count=2048
5、 把生成的
win-u-boot-fs4412.bin
和
clear.bin
拷贝到
windows
下
6
、 将
SD
卡插入到电脑上(卡槽
/USB
读卡器均可),使其在
windows
下识别(若不识别,
可能是已经在
ubuntu
中识别了,在可移动设备中将其断开即可)
7
、双击打开资料中“
ImageWriter
”下的“
Win32DiskImager
”
8
、 在弹出的界面中先选择要烧写的镜像文件(
clear.bin
),然后选择要烧写的设备(
SD
卡)
最后单击“
Write
”进行烧写
9
、 在弹出的对话框中单击“
Yes
”
10
、在弹出的对话框中单击“
OK
”完成烧写
因为
clear.bin
为空镜像,所以写入后
SD
卡中的前
2048
个扇区中的数据被擦除
11
、再选择
uboot
镜像完(
win-u-boot-fs4412.bin
),然后单击“
Write
”进行烧写
12
、在弹出的对话框中单击“
Yes
”
13
、在弹出的对话框中单击“
OK
”完成烧写
14
、将
SD
卡插入开发板的卡槽,调整拨码开关为
SD
卡启动,查看
uboot
是否能正常启动
注:
uboot
正常启动后
LED2
灯会点亮且终端上也会打印
uboot
相关的信息
?