u-boot 学习之综述
来源:互联网 发布:什么是金十数据 编辑:程序博客网 时间:2024/05/21 09:09
一、引导程序介绍
嵌入式系统的组成:
作用:从非易失性存储设备中读取 data 到 Memory
流程:初始化设备-> 读OS 到Memory -> 启动OS
开源的Bootloaders:
解释:
1.区分一下“Bootloader”和“Monitor”的概念
严格来说,“Bootloader”只是引导设备并且执行主程序的固件;而“Monitor”还提供了更多的命令行接口,可以进行调试、读写内存、烧写Flash、配置环境变量等。“Monitor”在嵌入式系统开发过程中可以提供很好的调试功能,开发完成以后,就完全设置成了一个“Bootloader”。所以,习惯上大家把它们统称为Bootloader。
2.对于每种体系结构,都有一系列开放源码Bootloader可以选用。
(1)X86
X86的工作站和服务器上一般使用LILO和GRUB。LILO是Linux发行版主流的Bootloader。不过Redhat Linux发行版已经使用了GRUB,GRUB比LILO有更有好的显示界面,使用配置也更加灵活方便。
在某些X86嵌入式单板机或者特殊设备上,会采用其他Bootloader,例如:ROLO。这些Bootloader可以取代BIOS的功能,能够从FLASH中直接引导Linux启动。现在ROLO支持的开发板已经并入U-Boot,所以U-Boot也可以支持X86平台。
(2)ARM
ARM处理器的芯片商很多,所以每种芯片的开发板都有自己的Bootloader。结果ARM bootloader也变得多种多样。最早有为ARM720处理器的开发板的固件,又有了armboot,StrongARM平台的blob,还有S3C2410处理器开发板上的vivi等。现在armboot已经并入了U-Boot,所以U-Boot也支持ARM/XSCALE平台。U-Boot已经成为ARM平台事实上的标准Bootloader。
(3)PowerPC
PowerPC平台的处理器有标准的Bootloader,就是ppcboot。PPCBOOT在合并armboot等之后,创建了U-Boot,成为各种体系结构开发板的通用引导程序。U-Boot仍然是PowerPC平台的主要Bootloader。
(4)MIPS
MIPS公司开发的YAMON是标准的Bootloader,也有许多MIPS芯片商为自己的开发板写了Bootloader。现在,U-Boot也已经支持MIPS平台。
(5)SH
SH平台的标准Bootloader是sh-boot。Redboot在这种平台上也很好用。
(6)M68K
M68K平台没有标准的Bootloader。Redboot能够支持m68k系列的系统。
值得说明的是Redboot,它几乎能够支持所有的体系结构,包括MIPS、SH、M68K等体系结构。Redboot是以eCos为基础,采用GPL许可的开源软件工程。现在由core eCos的开发人员维护,源码下载网站是http://www.ecoscentric.com/snapshots。Redboot的文档也相当完善,有详细的使用手册《RedBoot User’s Guide》。
Bootloader任务:
1.初始化处理器以及外设的硬件资源
配置SDRAM 控制器,为主程序提供运行环境
串口,提供交互终端
网络,传输镜像文件
其它I/O设备
2.执行系统自检,报告检测结果
3.引导操作系统
4.根据系统命令烧写镜像文件
二、u-boot 的功能及常用命令
1.? :得到所有命令列表
2.help: help nand 列出nand功能的使用说明
3.ping:只能开发板PING别的机器(u-boot功能有限)
4.setenv: 设置环境变量:
setenv serverip 192.168.0.1
//宿主机ip,该命令只是把设置保存到ram中,如果重启的话设置会重新回到原来的设置。这时我们用saveenv命令把设置保存到flash中。
setenv ipaddr 192.168.0.56//目标机的ip
5.tftp: tftp 3000800 zImage
使用U-Boot下载Linux内核或者应用程序的最快捷的方法是通过网络传输。为了这一目的,U-Boot实现了TFTP协议。为了使主机支持TFTP,你必须确保TFTP后台程序/usr/sbin/in.tftpd已经安装。在RedHat系统中,你可以运行下面的命令来确认:$ rpm -q tftp-server
如果没有安装,请从你的Linux安装盘或者其它媒介安装。大多数的Linux发行版都默认关闭TFTP服务。以RedHat系统为例,如果要使能TFTP服务, 编辑文件/etc/xinetd.d/tftp,移除这一行:
nand write 30008000 40000 1c0000
7.setenv bootcmd nand read30008000400001c0000; go 30008000
从nand flash 中读取系统镜像文件到SDRAM中
8.setenv bootargs root=/dev/mtdblock2 console=ttySAC0,115200 init=/linuxrc
启动时给系统传递一些参数
9.saveenv
三、u-boot启动及初始化过程
U-BOOT代码的启动过程可以分为两种阶段。一般而言,这两个阶段完成的功能可以如下分类:
(1)Bootloader第一阶段的功能。
硬件设备初始化。
加载Bootloader 的代码到RAM 。
设置stack、bss。
跳转到第二阶段代码的C 入口点。
(2)Bootloader第二阶段的功能。
初始化本阶段要使用到的硬件设备。
检测U-BOOT模式,命令模式,启动模式。
如果进入启动模式,执行环境变量的bootcmd命令。
将内核映象从Flash 上读到RAM 空间中。
为内核设置启动参数。
调用内核。
1.U-Boot第一阶段
(1)硬件设备初始化
依次完成如下设置:设置CPU 的工作模式、关闭watchdog、关闭中断、设置FCLK、HCLK、PCLK,关闭MMU、CACHE、初始化RAM、初始化Flash。
(2)复制Bootloader的第二阶段代码到 RAM 空间中
这里将整个U-Boot 的代码(包括第一、第二阶段)都从flash中复制到SDRAM 中。
(3)设置stack、bss(Block Started by Symbol)
(4)跳转到第二阶段代码的C入口点。
它将调用中的start_armboot 函数,这是第二阶段的入口点。
2.U-Boot第二阶段
(1)初始化本阶段要使用到的硬件设备
最主要的是设置timer、初始化串口,初始化env。
(2)检测进入的U-BOOT模式,命令模式,启动模式?
如果是命令模式,处理用户命令。如果是启动模式,就会执行环境变量的中bootcmd命令。
bootcmd=nand read 0xc00080000x50000 0x1c0000;bootm0xc0008000
(3)内核设置启动参数。
启动内核,传递参数。
四、u-boot 在 nandflash 上的移植要点
U-Boot将NAND Flash启动划分为三个阶段:IPL(InitialProgram Loader)、SPL (Secondary Program Loader)和NUB (NANDU-Boot),具体说明如下:
Herea short description of the different boot stages:
a)IPL (Initial Program Loader, integrated inside CPU)
------------------------------------------------------
Will load first 4k from NAND (SPL) into internal ramand execute it from there.
b) SPL (Secondary Program Loader)
---------------------------------
Will load special U-Boot version (NUB) from NAND and execute it. This SPLhas to fit into 4kByte. It sets up the CPU and configures the SDRAMcontroller and the NAND controller so that the special U-Boot image can beloaded from NAND to SDRAM.
This special image is build in the directory "nand_spl".
c) NUB (NAND U-Boot)
--------------------
This NAND U-Boot (NUB) is a special U-Boot version which can be started
from RAM. Therefore it mustn't (re-)configure the SDRAM controller.
IPL实现装载NAND Flash部分扇区(SPL )到芯片internalram(setpping stone),这部分功能由集成在芯片中的硬件实现,例如s3c2410的NAND控制器可以将NAND Flash的起始4k bytes代码复制到internalram。
SPL初始化基本系统(sdram和nand控制器)并装载特殊的u-boot(NUB)代码到sdram,并运行NUB 。
NUB是一个被配置成运行在sdram的特殊u-boot版本,由于SPL已经初始化部分设备,NUB不再需要再对这些设备进行其初始化。
五、在u-boot 中命令实现的原理
- u-boot 学习之综述
- u-boot 学习之常用命令
- BootLoader 之U-Boot学习.
- u-boot bootloader 代码学习之关键
- u-boot 学习之源代码目录结构
- u-boot 学习之启动模式
- 嵌入式之U-Boot学习笔记
- 03-S3C2440u-boot学习之u-boot分析之u-boot命令实现
- 03-S3C2440u-boot学习之u-boot分析编译体验
- u-boot学习(一):u-boot概述
- U-BOOT之二:u-boot 常用命令
- U-Boot之二:u-boot 常用命令
- U-boot移植之U-boot概述
- U-boot学习
- u-boot学习
- U-BOOT学习
- U-Boot 学习
- u-boot学习-01
- 杭州出差简记
- 数据类型和标识符
- 初识vb数据库凯发之实例3(使用数据绑定访问数据)
- vim设置
- 设计基于SEED-DIM3517的平板电脑
- u-boot 学习之综述
- Android 自定义类型文件与程序关联
- Android开发者指南
- SEED DIM3517核心板&底板接口
- 中国危机:未来十年惨不忍睹 戴旭
- sixthsense 简介
- 百万用户级游戏服务器架构设计(1)
- Spring与Struts1的集成
- Java学习札记4:Java中异常处理的6个陋习