嵌入式开发之Linux系统移植3-uboot的烧写及使用

网友投稿 1044 2022-05-29

1.何为uboot

1.1.linux系统的启动过程

用一个动画来说明开发板如何引导Linux启动的,以三星Exynos4412开发板为例:

首先是三星公司在SOC内部有一部分固件BL0,通电自启,启动后会读取拨码开关,用来判断启动来源,SD卡还是EMMC?

然后通过目标位置读取我们准备好的一段bootloader程序,并启动bootloader。

再往后,BL0工作结束,任务交接给bootloader。bootloader来往内存中搬运,Linux运行需要的核心内容,Linux内核、dtb、rootfs.

内存搬运完成后,启动Linux来工作,自己停止工作。

Linux内部被启动后,然后加载运行环境和rootfs等

1.1.1. Bootloader

在操作系统运行之前运行的一小段代码,用于将软硬件环境初始化到

一个合适的状态,为操作系统的加载和运行做准备(其本身不是操作系统)

1.2.Bootloader基本功能

-> 初始化软硬件环境 -> 引导加载linux内核 -> 给linux内核传参 -> 执行用户命令

注:bootloader是启动引导程序的统称,嵌入式linux常用的bootloader是uboot

1.3.常见的Bootloader

2.uboot启动盘的制作

2.1.资料准备

u-boot 镜像(镜像的制作,后续发出)

Ubuntu操作系统环境,可以上虚拟机

ImageWriter 工具,写入SD

2.2。SD卡存储结构

SD卡的存储以扇区为单位,每个扇区的大小为512Byte, 其中零扇区存储分区表(即分区信息),后续的扇区可自行分区和格式化;

若选择SD卡启动,处理器上电后从第一个扇区开始将其中的内容搬移到内存,所以我们把uboot放到从第一个扇区开始之后的空间, 之后的空间根据个人需求可进行分区和格式化

2.3.操作步骤

烧写工具默认从0扇区开始烧写,这里我们自己在uboot之前放一个512字节的空镜像,因为BL0是从1扇区开始读取,三星告诉我们的。

1、u-boot镜像”中的u-boot-fs4412.bin拷贝到ubuntu的家目录下

2、在终端输入如下命令,制作一个512字节的空镜像

$sudoddif=/dev/zeroof=zero.bincount=1

3、执行如下命令,将uboot追加到zero.bin之后生成win-u-boot-fs4412.bin

$catzero.binu-boot-fs4412.bin>win-u-boot-fs4412.bin

4、再执行如下命令,制作一个1M的空镜像(用于擦除SD卡中原有的数据)

$sudoddif=/dev/zeroof=clear.bincount=2048

5、把生成的win-u-boot-fs4412.bin和clear.bin拷贝到windows下

6、将SD卡插入到电脑上(卡槽/USB读卡器均可),使其在windows下识别

7、ImageWriter”下的“Win32DiskImager”,把2个镜像文件分两次写入SD,之所以要clear.bin这个空文件,是防止SD卡有内容造成镜像不正确

8、通过一下几个图来写

嵌入式开发之Linux系统移植3-uboot的烧写及使用

9、SD卡插入开发板的卡槽,调整拨码开关为SD卡启动,查看uboot是否能正常启动

注:uboot正常启动后LED2灯会点亮且终端上也会打印uboot相关的信息

3.uboot的使用

3.1.uboot模式

自启动模式

uboot启动后若没有用户介入,倒计时结束后会自动执行自启动

环境变量(bootcmd)中设置的命令(一般作加载和启动内核)

交互模式

倒计时结束之前按下任意按键uboot会进入交互模式,交互模式下

用户可输入uboot命令

3.2.uboot帮助命令

help

查看uboot支持的所有命令

help 命令

查看当前命令的使用方法

3.3.uboot环境变量命令

printenv

打印uboot中所有的环境变量

setenv

设置指定的环境变量(保存在RAM中)

setenv 环境变量 环境变量的值

ssaveenv

保存所有环境变量到EMMC中

3.4.uboot常用环境变量

ipaddr

uboot的IP地址

serverip

服务器的IP地址(即ubuntu的IP)

bootdelay

进入自启动模式之前倒计时的秒数

3.5.uboot网络传输命令

loadb

通过Kermit协议下载文件到指定的内存地址

loadb 地址

tftp

通过tftp协议下载文件到指定的内存地址

tftp 地址 文件名

注:使用tftp之前要配置好网络及tftp服务器

3.5.uboot存储器访问命令

mmc read

将EMMC中指定扇区中的内容读取到内存中指定的地址

mmc read

addr: 内存地址

blk#: EMMC中的扇区编号

cnt: 读取的扇区的个数

mmc write

将内存中指定地址中的内容写入到EMMC中指定的扇区

mmc write

3.6.uboot自启动环境变量

bootcmd

自启动的环境变量

该环境变量可以设置成一到多个uboot命令的集合(若有多个使用;分割)

自启动模式下uboot就会按照bootcmd中命令的顺序逐条执行

eg:

setenv bootcmd tftp 40008000 interface.bin;go 40008000

saveenv

下一结,实战

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:华为云GaussDB(DWS)携手兴盛优选,一站式实现数据业务科学决策
下一篇:2022 美国大学生数学建模竞赛时间安排表(参考)
相关文章