嵌入式linux开发uboot移植(一)——uboot项目简介

嵌入式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

时间: 2024-10-12 19:22:26

嵌入式linux开发uboot移植(一)——uboot项目简介的相关文章

嵌入式 Linux开发Kernel移植(三)——Kernel工程Makefile分析

嵌入式 Linux开发Kernel移植(三)--Kernel工程Makefile分析 本文选择三星发布的基于SMDKV210开发板的linux 2.6.35.7版本kernel. 一.Kernel Makefle体系简介 1.Kernel Makefile体系组成 Kernel Makefile体系包含Kconfig和Kbuild两个系统. Kconfig系统 Kconfig 对应的是内核配置阶段,make xxconfig就是在使用Kconfig系统.Kconfig由三部分组成: script

向嵌入式linux开发板移植openSSH

向嵌入式linux开发板移植openSSH 晚上没事干,想着能不能把高大上的openSSH移植到我现在开发的嵌入式linux开发板上,前不久刚弄出来dropbear,但遇到一些小问题,一会说,所以把openSSH搞上去还是可以的.开发板端为服务器端,由宿主机客户端访问. 2016-8-16 背景 开发板:freescale i.mx6q 宿主机操作系统:ubuntu 14.04 开发板操作系统:linux 3.0.35 基本情况 使用dropbear后,ssh算是在板子上成功跑起来了,参见我另一

嵌入式 Linux开发Kernel移植(二)——kernel内核配置和编译

嵌入式 Linux开发Kernel移植(二)--kernel内核配置和编译 本文选择linux 2.6.35.7版本kernel进行实践. 一.linux kernel源码目录分析 Kbuild,Kernel Build,管理内核编译的文件 Makefile,kernel工程的Makefile. arch,体系架构,arch目录下的子目录存放的是不同种类的架构 block,块设备,一般是存储设备,存放的块设备管理的相关代码 crypto,加密相关,存放加密算法实现代码 Documentation

嵌入式 Linux开发Kernel移植(一)——kernel内核简介

嵌入式 Linux开发Kernel移植(一)--kernel内核简介 一.Linux Kernel 1.linux kernel简介 Linux kernel是芬兰黑客 Linus Torvalds 1991年在英特尔x86架构上用C语言开发的自由免费的符合POSIX标准的类Unix操作系统. Linux kernel是一个一体化内核(monolithic kernel)系统,提供硬件抽象层.磁盘及文件系统控制.多任务等功能的系统软件,不是一套完整的操作系统. 内核空间与用户空间是程序执行的两种

嵌入式linux开发uboot移植(四)——uboot启动内核的机制

嵌入式linux开发uboot移植(四)--uboot启动内核的机制 一.嵌入式系统的分区 嵌入式系统部署在Flash设备上时,对于不同SoC和Flash设备,bootloader.kernel.rootfs的分区是不同的.三星S5PV210规定启动设备的分区方案如下: SD/MMC设备的分区方案: NandFlash设备的分区方案: 嵌入式系统在启动时,uboot.kernel.rootfs不能随意存放,必须存放在规划好的相应分区,在启动过程中uboot.kernel会到相应分区加载相应内容,

嵌入式linux开发uboot移植(七)——三星官方uboot的移植

嵌入式linux开发uboot移植(七)--三星官方uboot的移植 友善之臂Smart210开发板是基于三星SMDKV210评估板裁剪.调整而来的.因此三星官方发布的基于SMDKV210评估板的uboot是移植uboot到Smart210开发板的最合适uboot版本.本文将SMDKV210的uboot移植到Smart210开发板.Smart210开发板的配置如下: SoC:Samsung S5PV210 SDRAM:512MB DDR2 RAM FLASH存储:2G MLC NAND Flas

嵌入式linux开发uboot移植(三)——uboot启动过程源码分析

嵌入式linux开发uboot移植(三)--uboot启动过程源码分析 一.uboot启动流程简介 与大多数BootLoader一样,uboot的启动过程分为BL1和BL2两个阶段.BL1阶段通常是开发板的配置等设备初始化代码,需要依赖依赖于SoC体系结构,通常用汇编语言来实现:BL2阶段主要是对外部设备如网卡.Flash等的初始化以及uboot命令集等的自身实现,通常用C语言来实现. 1.BL1阶段 uboot的BL1阶段代码通常放在start.s文件中,用汇编语言实现,其主要代码功能如下:

嵌入式linux开发uboot移植(五)——uboot命令体系

嵌入式linux开发uboot移植(五)--uboot命令体系 本文将根据SMDKV210开发板的三星官方uboot源码分析uboot的命令体系.内容 包括uboot的命令体系的实现机制,uboot命令是如何执行的,以及如何在uboot中添加一个自定义的命令. 一.uboot命令体系简介 uboot命令体系代码放在uboot/common中,包括cmd_xxx.c.command.c .main.c源码文件.uboot实现命令体系的方法是每一个uboot命令对应一个函数,与shell的实现是一致

嵌入式linux开发uboot移植(二)——uboot工程源码目录分析

嵌入式linux开发uboot移植(二)--uboot工程源码目录分析 本文分析的uboot为uboot_smdkv210,是三星官方发布的基于S5PV210评估开发板对应的uboot. 一.uboot源码目录结构解析 1.cpu 本文件夹下的子文件与处理器相关,每个文件夹代表一种CPU系列.每个子目录中都包括cpu.c.interrupts.c.start.S文件. cpu.c主要用于初始化CPU.设置指令Cache和数据Cache等 interrupt.c主要用于设置系统的各种中断和异常 s