什么是uboot
U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目。U-Boot的作用是系统引导。U-Boot从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是根据相应的Linux内核源程序进行简化而形成的,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。(百度百科的定义)
uboot源码目录
uboot源码目录包括:
- board:和开发板相关的文件
- common:实现uboot支持的命令
- cpu:与特定的cpu架构相关的代码
- disk:对磁盘的支持
- doc:文档目录,uboot有非常完善的文档
- drivers:uboot支持的设备驱动都放在该目录下,如网卡、串口、USB等
- fs:文件系统的支持
- include:uboot使用的头文件,该目录下configs目录有与开发板相关的配置头文件
- net:与网络相关的协议栈代码
- tools:uboot工具
uboot的编译(基于mini6410)
生成uboot.bin分为两个步骤,以mini6410开发板为例:(经过移植后的uboot)
一、选择要使用的board 执行
root@xxx#: make mini6410_nand_config-ram128
二、编译生成u-boot.bin
root@xxx#: make
在进入uboot之后,可以设置通过uboot命令进行相关的操作,所以需要了解uboot的相关命令。
uboot中的常用命令
一、环境变量相关:
-
printenv(或者pri):查看环境变量 如图
-
setenv:添加,删除,修改环境变量
命令格式:setenv name value 添加
如:
setenv file test ------> file=test
setenv file test1 ------> 修改 file=test1
setenv file -------> 删除 -
saveenv:保存环境变量 ,掉电后仍然存在
二、文件下载:
tftp :通过网络下载文件(要使用tftp,需要先配置好网络)
配置网络:
setenv ethaddr 08:90:90:90:90:90 (MAC地址,随便)
setenv ipaddr … (开发板的IP地址)
setenv serverip … (linux系统的IP地址)
tftp使用 :tftp c0008000(下载位置) uImage(文件名)
三、内存操作
-
md:显示内存区内容
md采用十六进制和ASCII码两种形式显示存储单元内容
这条命令可以采用长度标识符 .l .w 和 .b
命令格式 md [.b .w .l] address
-
mm :修改内存,地址自动递增
命令格式: mm [.b .w .l] address
四、 Flash on 6410
Nor 和 Nand是两种不同的flash
区别:
- Nor flash 读取速度较快
- Nand flash 写入速度较快
- Nand flash 擦除速度较快
- Nand flash 成本低
- Nand flash 擦除寿命长(百万次) Nor flash(十万次)
- Nand flash 通常采用自己独立编址,Nor flash 采用统一编址
所以Nor flash更适用于存储代码,Nand flash 适合存储大容量数据
Nand flash的命令操作:
-
nand info :flash大小显示
-
nand erase:nand flash擦除
使用方法:nand erase start length (擦除从start开始,长度为length的区域) -
nand write :向nand flash中写入数据
用法:nand write [内存地址][flash地址] length -
nand read:从nand flash中读取数据
用法:nand read [内存地址][flash地址] length
五、执行程序
- go :执行内存中的二进制代码,一个简单的跳转到指定地址
用法:go addr [arg…] - bootm:执行程序中的二进制代码 (和go的区别是:要求二进制代码有固定的文件头)
用法:bootm [addr [arg…]]
六、开发板信息
- bdinfo:显示开发板信息
七、自动启动