介绍
u-boot简介
Bootloader:启动加载程序,从开机上电到操作系统启动的一个引导过程。
可以利用Bootloader初始化硬件设备、建立内存空间映射表。
不同的处理器架构都有不同的Bootloader,对于两块不同的嵌入式板,即使使用的是同一种处理器,要想让运行在一块板子上的Bootloader程序也能运行在另一块板子上。一般都需要修改Bootloader的源程序。
u-boot同时支持PowerPC、ARM、MIPS、X86等体系结构,支持上百种板子。
u-boot源码结构
可分为三类目录:
1、与处理器体系结构或开发板硬件直接相关
2、通用函数以及驱动程序
3、u-boot的应用程序、工具和文档
目录 | 特性 | 说明 |
---|---|---|
board | 平台依赖 | 存放电路板相关的目录文件。如smdk2401(arm920t)、sc520_cdp(X86)等目录 |
cpu | 平台依赖 | 存放cpu相关的目录文件 |
lib_xxx | 平台依赖 | 与体系机构相关的库文件,例如arm相关的库就在lib_arm目录中 |
include | 通用 | u-boot使用的头文件,还有支持各种硬件平台的汇编文件、系统的配置文件和支持文件系统的文件。其中子目录configs目录中有与开发板相关的配置头文件 |
common | 通用 | 实现u-boot命令行下支持的命令,每一条命令都对应一个文件(cmd_xxxx.c) |
lib_gengeric | 通用 | 通用库函数的实现 |
net | 通用 | 与网路协议相关的代码。BOOTP、TFTP、RARP和NFS文件系统的实现 |
fs | 通用 | 支持的文件系统(cramfs、fat、jffs2、registerfs) |
drivers | 通用 | u-boot支持的设备驱动程序(网卡、串口、USB) |
disk | 通用 | 对磁盘的支持 |
doc | 文档 | |
tools | 通用 | 生成u-boot的工具(mkimage、crc等) |
examples | 例程 | 一些能够独立运行的应用程序的例子(helloworld) |
u-boot的配置编译
u-boot源码通过GNU Makefile 组织编译,顶层目录下的Makefile完成对开发板的整体配置,然后递归调用各级子目录下的Makefile,最后把所有编译过的程序链接成u-boot映像。
基本配置编译
初步编译:
在Ubuntu下找到存放u-boot的目录 创建alientek_uboot文件夹
解压安装包(截图为解压后)
tar -vxjf 压缩包名
# make <board_name>_config
IMX6ULL为例:
1、清除原有配置信息 2、添加配置信息 3、执行makefile V=1作用:显示过程
!!! 除初次编译以外 不执行第一句编译指令
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPLIE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4
编译完成后目录内生成u-boot.bin. 此时需要向 u-boot.bin 添加头部信息
(它帮的)
u-boot启动log简析
带有调试性质的开发,uboot都是烧写到SD卡中的因为方便烧写
开发板复位后 3秒倒计时内按回车 显示log
从上到下的顺序:
cpu频率:800兆(显示为792MHZ) 实际运行为396MHZ
cpu温度:正常温度为 -40 与105之间 当前温度为42
复位模式:POR
开发板名称:IMX6U ALPHA|MINI
I2C :就绪
DRAM大小 :512M
MMC(EMMC 和 SD卡统称): 设备 :0 设备:1
** 警告-- 默认环境变量
输入、输出、报错方式:串口
切换到0分区
当前设备为 mmc0
网络:FEC1
错误网络FEC1 为设置地址
u-boot命令的使用
help(或者 help ?)
显示u-boot当前支持的所用命令
? 命令名字 ---该命令的功能介绍
bdinfo 开发板信息查询
printenv 查看当前板子的环境变量
setenv 设置环境变量(也可自定义环境变量,也可删除)
删除方法(设为空值) setenv 环境变量名
saveenv 保存环境变量
saveenv 环境变量名 值(是字符串的话 用‘’包裹)
内存命令
md命令:用于显示内存值大小
md[.b,.w,.l] address[# of object]
命令中的[.b,.w,.l]对应byte、word、long,也就是分别以1个字节、2个字节、4个字节
来显示内存值。 address就是要查看的内存起始地址,[# of objects]表示要查看的数据长度,这个数据长度单位不是字节,而是跟你所选择的显示格式有关。
nm命令:修改指定地址的内存值
nm[.b,.w,.l] address
修改后按q 退出
mm命令:修改指定地址的内存值后自增到下一地址
mw命令:使用一个指定数据填充自定义个内存块的内存值
mw[.b,.w,.l] address value[count]
cp:拷贝数据到另一地址
cp [.b,.w,.l] (源地址) (目的地址)(数量)
网络命令
网络相关的环境变量配置:
==ping命令==:网络连接测试
(3.2讲 25分钟)
**dhcp命令:从路由器上获取IP地址 **
获取的IP地址为 192.168.1.173
通过DHCP命令获取到的IP地址仅本次有效,不会修改环境变量中的ipaddr的值,重启以后使用的IP地址仍是ipaddr的值
nfs命令:网络文件系统
EMMC和SD卡操作命令
mmc info:打印当前所选中设备的信息
选定设备为8G的sd卡
mmc rescan:重新扫描
mmc list:列出当前所有可以使用的设备
mmc part:显示分区
mmc dev:切换设备
mmc dev 0 //切换到SD卡
mmc read:读取mmc设备上的某段数据之后保存到某一位置(从mmc中往内存DRAM读数据)
mmc read addr dlk cnt//addr为起始地址 dlk指第几块 读取cnt个块
FAT格式文件系统操作命令、
对于I.MX6U SD/EMMC 分为三个分区
第一个存放uboot(bootloader)
第二个存放Linux 内核 和设备树 FAT格式
第三个分区 系统的根文件系统EXT4
fatinfo :查询指定MMC设置指定分区的文件系统信息
fatinfo mmc(接口) 1:1