目录
一、uboot概述
Bootloader
Bootloader基本功能
常见的Bootloader
二、SD卡启动盘制作
三、uboot的使用
3.1uboot模式
3.2uboot帮助命令
3.3uboot环境变量命令
3.4常用环境变量
3.5网络传输命令
3.6u-boot访问存储器命令
3.7 u-boot自启动环境变量(bootcmd)
一、uboot概述
uboot和bootloader的区别_吻等离子的博客-CSDN博客_uboot和bootloader有啥区别
bootloader就相当于类,uboot就相当于对象。嵌入式领域常用的bootloader就是uboot
Bootloader
在操作系统运行之前运行的一小段代码,用于将软硬件环境初始化到
一个合适的状态,为操作系统的加载和运行做准备(其本身不是操作系统)
Bootloader基本功能
-> 初始化软硬件环境
-> 引导加载linux内核
-> 给linux内核传参
-> 执行用户命令
注:bootloader是启动引导程序的统称,嵌入式linux常用的bootloader是uboot。
常见的Bootloader
| Bootloader | Monitor | 描述 | X86 | ARM | PowerPC |
| LILO | 否 | Linux磁盘引导程序 | 是 | 否 | 否 |
| GRUB | 否 | GNU的LILO替代程序 | 是 | 否 | 否 |
| Loading | 否 | 从DOS引导linux | 是 | 否 | 否 |
| ROLO | 否 | 从ROM引导linux而不需要BOIS | 是 | 否 | 否 |
| Etherboot | 否 | 通过以太网卡启动linux系统的固件 | 是 | 否 | 否 |
| LinuxBOIS | 否 | 完全替代BUIS的linux引导程序 | 是 | 否 | 否 |
| BLOB | 是 | LART等硬件平台的引导程序 | 否 | 是 | 否 |
| U-boot | 是 | 通用引导程序 | 是 | 是 | 是 |
| RedBoot | 是 | 基于eCos的引导程序 | 是 | 是 | 是 |
| Vivi | 是 | Mizi公司针对于三星的arm cpu设计的引导程序 |
二、SD卡启动盘制作

SD卡的存储以扇区为单位,每个扇区的大小为512Byte, 其中零扇区存储分区表(即分区信息),后续的扇区可自行分区和格式化;
若选择SD卡启动,处理器上电后从第一个扇区开始将其中的内容搬移到内存,所以我们把uboot放到从第一个扇区开始之后的空间, 之后的空间根据个人需求可进行分区和格式化

制作一个 512 字节的空镜像 /dev/zero就是全是0.count=1就是一块扇区

制作一个前面一块是空接下来是uboot的镜像

制作一个1M的空镜像清除SD卡

少了一个8,大小不对重新做一个

把clear.bin和win-u-boot这两个文件拿到windows里用工具先把SD卡清零

然后再把带有uboot的文件烧写进去

友情提醒各位童鞋学嵌入式买电脑 接口一定得多种类一定要丰富。
这两太电脑一起用是真麻烦,还得用3个拓展坞。
接下来把开发板设置为SD卡启动。再Uboot里设置了LED2亮,如果亮了就证明成功了。
软件和uboot程序我上传了,可以在我的资源里找到。
三、uboot的使用
3.1uboot模式
uboot启动后若没有用户介入,倒计时结束后会自动执行自启动
环境变量(bootcmd)中设置的命令(一般作加载和启动内核)
倒计时结束之前按下任意按键uboot会进入交互模式,交互模式下
用户可输入uboot命令
因为还还没安操作系统所以一直显示超时了
3.2uboot帮助命令

![]()

3.3uboot环境变量命令
打印uboot中所有的环境变量

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

保存所有环境变量到EMMC中
3.4常用环境变量
uboot的IP地址
服务器的IP地址(即ubuntu的IP)
进入自启动模式之前倒计时的秒数
3.5网络传输命令
通过Kermit协议下载文件到指定的内存地址
loadb 地址
通过tftp协议下载文件到指定的内存地址
tftp 地址 文件名


VMware双网卡配置(ubuntu)_宇努力学习的博客-CSDN博客

调试了一下,虽然我的emmc中保存了对的ip但是使用tftp服务器时他那个ip还是以前的,需要重新设置开发板ip服务器ip和网关ip然后
saveenv保存一下
最后在用命令

这次没问题了,还有一个要注意的是ubuntu中的文件夹虽然777了,但是文件夹里的程序没有777权限,需要使用命令:
chmod 777 interface.bin
给文件权限后就不会报下面这个错了
TFTP error: 'Permission denied' (0)
Starting again
注:使用tftp之前要配置好网络及tftp服务器
3.6u-boot访问存储器命令

mmc read
将EMMC中指定扇区中的内容读取到内存中指定的地址
mmc read <addr> <blk#> <cnt>
addr: 内存地址
blk#: EMMC中的扇区编号
cnt: 读取的扇区的个数
将内存中指定地址中的内容写入到EMMC中指定的扇区
mmc write <addr> <blk#> <cnt>
![]()
0表示写入emmc

把内存0x41000000写到写到emmc 0x800位置一个扇区
![]()

断电之后读取emmc中的这个程序写入开发板然后go程序运行成功
3.7 u-boot自启动环境变量(bootcmd)
自启动的环境变量
该环境变量可以设置成一到多个uboot命令的集合(若有多个使用\;分割)
自启动模式下uboot就会按照bootcmd中命令的顺序逐条执行
把printenv命令写进去,开机之后不做干预,倒计时结束就会自动打印环境
eg:
setenv bootcmd tftp 40008000 interface.bin\;go 40008000
saveenv

这样重启之后就会自动下载并执行



![[oeasy]python0070_ 字体样式_下划线_中划线_闪动效果_反相_取消效果](https://img-blog.csdnimg.cn/img_convert/7aac12e5545e9317af986e8824d4341c.png)






![[Linux系列]linux bond详解](https://img-blog.csdnimg.cn/6a81679e694242dd81c1970eb0e7dfe9.png)







