嵌入式linux开发uboot移植(一)——uboot项目简介
一、uboot简介
U-Boot,全称 Universal Boot Loader,是遵循GPL条款的从FADSROM、8xxROM、PPCBOOT逐步发展演化而来的开放源码项目。
在操作系统方面,U-Boot不仅支持嵌入式Linux系统的引导,它还支持NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android嵌入式操作系统。目前支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS, android。
在CPU架构方面,U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的处理器。
U-Boot项目的开发目标是支持尽可能多的嵌入式处理器和嵌入式操作系统。
二、uboot的特性
Uboot的特性:
1、开放源码;
2、支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;
3、支持多个处理器系列,如PowerPC、ARM、x86、MIPS;
4、较高的可靠性和稳定性;
5、高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等;
6、丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;
7、较为丰富的开发调试文档与强大的网络技术支持;
三、主要功能
U-Boot支持的主要功能:
1、系统引导支持NFS挂载、RAMDISK(压缩或非压缩)形式的根文件系统;支持NFS挂载、从FLASH中引导压缩或非压缩系统内核;
2、基本辅助功能强大的操作系统接口功能;可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤以Linux支持最为强劲;支持目标板环境参数多种存储方式,如FLASH、NVRAM、EEPROM;
3、 CRC32校验可校验FLASH中内核、RAMDISK镜像文件是否完好;
4、设备驱动串口、SDRAM、FLASH、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持;
5、上电自检功能SDRAM、FLASH大小自动检测;SDRAM故障检测;CPU型号;
6、特殊功能XIP内核引导;
四、工作模式
U-Boot的工作模式有启动加载模式和下载模式。
1、启动加载模式
启动加载模式是Bootloader的正常工作模式,嵌入式产品发布时,Bootloader必须工作在这种模式下,Bootloader将嵌入式操作系统从FLASH中加载到SDRAM中运行,整个过程是自动的。
2、下载模式
下载模式就是Bootloader通过某些通信手段将内核映像或根文件系统映像等从PC机中下载到目标板的FLASH中。用户可以利用Bootloader提供的一些命令接口来完成自己想要的操作。开发人员可以使用各种命令,通过串口连接或网络连接等通信手段从主机(Host)下载文件(比如内核映像、文件系统映像),将它们直接放在内存运行或是烧入Flash类固态存储设备中。
板子与主机间传输文件时,可以使用串口的xmodem/ymodem/zmodem协议,还可以使用网络通过tftp、nfs协议来传输,以及USB下载等方法。
一般来说,嵌入式开发人员采用下载模式进行开发嵌入式系统。通常采用交叉网线将PC与目标开发板连接,通过TFTP服务器下载内核,用NFS服务器挂载文件系统。
五、uboot常用命令
1、获取命令
命令:help 或 ?
功能:查看当前U-boot版本中支持的所有命令。
2、环境变量命令
bootdelay |
执行自动启动(bootcmd中的命令)的等候秒数 |
baudrate |
串口控制台的波特率 |
netmask |
以太网的网络掩码 |
ethaddr |
以太网的MAC地址 |
bootfile |
默认的下载文件名 |
bootargs |
传递给Linux内核的启动参数 |
bootcmd |
自动启动时执行命令 |
serverip |
TFTP服务器端的IP地址 |
ipaddr |
本地的IP地址 |
stdin |
标准输入设备,一般是串口 |
stdout |
标准输出,一般是串口,也可是LCD(VGA) |
stderr |
标准出错,一般是串口,也可是LCD(VGA) |
使用printenv命令可以打印出当前开发板的环境变量。
setenv envname value设置环境变量的值,如果没有value,则表示删除env环境变量
saveenv将修改的环境变量保存到固态存储器中。
bootcmd 自动启动执行命令,uboot开机后会自动倒计时,在倒计时结束前如果没有外部按键打断自动计时,uboot将自动执行bootcmd变量保存的命令。
3、串口传输命令
loadb - load binary file over serial line (kermit mode)
loadx - load binary file over serial line (xmodem mode)
loady - load binary file over serial line (ymodem mode)
4、网络命令
uboot可以通过网络来传输文件到开发板,直接用交叉网线连接开发板和电脑,也可以用普通直连网线连接路由器。
ping hostname
网络不通的原因:
A、U-boot网卡驱动有问题
B、U-boot网络协议延时配置有问题
C、网络参数配置问题,比如IP等,Host和Target都有可能有问题。
如果网络连通,就可以通过tftp、NFS挂载开发板
nfs - boot image via network using NFS protocol
tftpboot- boot image via network using TFTP protocol
bootp - boot image via network using BOOTP/TFTP protocol
5、NandFlash操作命令
nand info |
显示可使用的Nand Flash |
nand device [dev] |
显示或设定当前使用的Nand Flash |
nand read addr off size |
Nand Flash读取命令,从Nand的off偏移地址处读取size字节的数据到SDRAM的addr地址。 |
nand write addr off size |
Nand Flash烧写命令,将SDRAM的addr地址处的size字节的数据烧写到Nand的off偏移地址。 |
nand write[.yaffs[1]] addr off size |
烧写yaffs 映像专用的命令,.yaffs1 for 512+16 NAND |
nand erase [clean] [off size] |
Nand Flash檫除命令,擦除Nand Flash的 off 偏移地址处的size 字节的数据 |
nand bad |
显示Nand Flash的坏块 |
nand dump[.oob] off |
显示Nand Flash中的数据(16进制) |
nand scrub |
彻底擦除整块Nand Flash中的数据,包括OOB。可以擦除软件坏块标志。 |
nand markbad off |
标示 Nand的 off 偏移地址处的块为坏块 |
6、内存、寄存器操作命令
nm 修改内存值 (指定地址)
格式: nm [.b, .w, .l] address
mm 修改内存值(地址自动加一)
格式: mm [.b, .w, .l] address
md 显示内存值
格式: md [.b, .w, .l] address [# of objects]
mw 用指定的数据填充内存
格式: mw [.b, .w, .l] address value [count]
cp 内存的拷贝(包括内存与Nor Flash间的数据拷贝)
格式:cp [.b, .w, .l] source target count
7、USB操作命令
usb reset |
初始化USB控制器 |
usb stop [f] |
关闭USB控制器 |
usb tree |
已连接的USB设备树 |
usb info [dev] |
显示USB设备[dev]的信息 |
usb storage |
显示已连接的USB存储设备 |
usb dev [dev] |
显示和设置当前USB存储设备 |
usb part [dev] |
显示USB存储设备[dev]的分区信息 |
usb read addr blk# cnt |
读取USB存储设备数据 |
使用USB操作命令前必须确保USB设备连接好,usb reset,以初始化USB控制器,获取设备信息。
8、SD/MMC操作命令
mmc init [dev] - 初始化MMC子系统
mmc device [dev] - 查看和设置当前设备
使用SD/MMC操作命令前必须确保SD/MMC设备连接好,mmc init,以初始化MMC 控制器,获取设备信息。
六、uboot在Flash中的分区
嵌入式系统中一般用Flash作为启动设备,Flash上存储着uboot、环境变量、内核映像和文件系统。uboot一般存放在Flash的起始地址,其所在的扇区位置一般由SoC规定,一般为扇区0或扇区1。uboot后存放环境变量,内核和文件系统的存放位置则可以有规划的自由分配。
Uboot官方下载地址:
ftp://ftp.denx.de/pub/u-boot/
git://git.denx.de/u-boot.git
http://git.denx.de/u-boot.git