目录
一、uboot概述
1. uboot首先刷到SD卡中,对软硬件初始化,再将外存中linux、dtb、rootfs搬到RAM。
2.Bootloader
在操作系统运行之前运行的一小段代码,用于软硬件环境的初始化。为操作系统的加载和运行做准备(本身不是操作系统)
2.1Bootloader基本功能
初始化软硬件环境 、 引导加载linux内核 、 给linux传参(linux运行时需要的参数由Bootloader提前准备) 、执行用户命令 (类似于shell命令)
注:bootloader是启动引导程序的统称,嵌入式lunux中常用的bootloader是uboot
二、SD卡启动盘制作
SD卡存储结构
选择SD卡启动,需要将uboot放入第一个扇区中。.
过程:
1、将uboot镜像拷贝到家目录下 (拖拽 mv 文件 . (.表示当前目录))
2.制作一个 512 字节的空镜像
3.将uboot追加到zero.bin之后生成win-u-boot-fs4412.bin,目的是为了将uboot刷到SD卡的第一个扇区,zero.bin刷到0扇区作为分区表
4.制作一个1M(uboot大小)的空镜像(用于擦除SD卡中原有的数据)
5.win-u-boot-fs4412.bin和clear.bin拷贝到windows桌面,通过WIN32DiskImager将.bin烧录到SD卡中
6.开发板上电,烧录成功
三、uboot使用-uboot命令
uboot启动后若没有用户介入,倒计时结束后会自动执行自启动,环境变量(bootcmd)中设置的命令(一般作加载和启动内核)
交互模式
倒计时结束之前按下任意按键uboot会进入交互模式,交互模式下用户可输入uboot命令
2.uboot命令
2.1 uboot帮助命令
查看uboot支持的所有命令
help 命令
查看当前命令的使用方法
打印uboot中所有的环境变量
setenv
设置指定的环境变量(新的保存到了内存RAM中,断电后上电,更改的环境变量还是未更改之前的)格式:setenv 环境变量 环境变量的值
saveenv
保存所有环境变量到EMMC中(长久保存)
2.3常用环境变量
ipaddr
uboot的IP地址( ubuntu和开发板通信,uboot和ubunt需要在同一个网段。)
serverip
服务器的IP地址(即ubuntu的IP)
bootdelay
进入自启动模式之前倒计时的秒数
3.uboot网络传输命令
通过Kermit协议下载文件到指定的内存地址 (串口传输)
loadb 地址
tftp(简单文本传输协议)
通过tftp协议下载文件到指定的内存地址(一般为服务器地址,可以省略)
tftp 地址 文件名
注:使用tftp之前要配置好网络及tftp服务器
1>ubuntu虚拟网络适配器-桥接/网络适配器-桥接/网卡-无线网卡
2>.重启tftp服务器
3>.开发板和ubuntu保证同一网段:
ipaddr:在同一网段,serverip:ubuntu的ip
4>.硬件连接
5>.放入到/tftpboot的文件需要高权限,保证下载顺利 :$ sudo chmod 777 文件
4.uboot存储器访问命令
将EMMC中指定扇区中的内容读取到内存中指定的地址(读取外存内容到内存中)
mmc read <addr> <blk#> <cnt> (重要)
addr: 内存地址
blk#: EMMC中的扇区编号(从哪块开始读)
cnt: 读取的扇区的个数(读到哪里结束)
将内存中指定地址中的内容写入到EMMC中指定的扇区(内存中内容写入到外存)
mmc write <addr> <blk#> <cnt> (重要)
例如:mmc write 0(0表示EMMC) 0x410000000 0x800 0x1(将0x41000 0000 地址中的内容写入到EMMC中800号扇区,一块大小)
5.uboot自启动环境变量(重要)
自启动的环境变量
该环境变量可以设置成一到多个uboot命令的集合(若有多个使用 \; 分割)
自启动模式下uboot就会按照bootcmd中命令的顺序逐条执行
eg:
setenv bootcmd tftp 40008000 interface.bin\;go 40008000
setenv bootcmd mmc read 0 0x40008000 0x800 0x1\;go 40008000
(后续可以通过bootcmd在开发板上电之后自动linux、跟文件系统,文件树加载到内存中并运行)