`
android_mylove
  • 浏览: 399856 次
社区版块
存档分类
最新评论

【整理】BIOS、BootLoader、uboot对比

 
阅读更多

bios

BIOS是英文"Basic Input Output System"的缩略语,直译过来后中文名称就是"基本输入输出系统"。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。



BootLoader

BootLoader是一段小程序,可以把它想象成PC机linux上的GRUB/LILO引导程序,只不过在嵌入式linux中,没有BIOS,而是直接从flash中运行,来装载内核。它可以初始化硬件设备,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统做好准备。


一个嵌入式系统从软件角度来看分为三个层次:
1.引导加载程序
包括固化在固化中的boot程序(可选),和BootLoader两大部分
2.linux内核
特定于嵌入式平台的定制内核
3.文件系统
包括了系统命令和应用程序
--------------------------------------------------------------------------------
BootLoader-->Boot Parameters-->Kernel-->Root Filesystem
--------------------------------------------------------------------------------
为什么需要进行bootloader移植?
答:1.因为每种不同的CPU体系结构都有不同的BootLoader
2.BootLoader依赖于具体的嵌入式板级设备的配置
--------------------------------------------------------------------------------
BootLoader启动过程可分为单阶段和多阶段(stage1、stage2),其中stage1完成初始化硬件,如CPU寄存器、内存控制器,为stage2准备内存空间。一般stage1是可以直接在nor flash中运行的,并将stage2复制到内存RAM中,设置堆栈,然后跳转到stage2(从这也可以看出stage2是在RAM中运行的,与stage1不同)

BootLoader的stage1通常包括以下步骤:
1.硬件设备初始化 如CPU寄存器、内存控制器
2.为加载BootLoader的stage2准备RAM空间
3.拷贝BootLoader的stage2到RAM空间中
4.设置好堆栈 为什么?为了跳转到stage2的入口,因为stage2大多数是用C语言写的
5.跳转到stage2的C入口点

BootLoader的stage2通常包括以下步骤:
1.初始化本阶段要使用到的硬件设备 各种设备,如网卡
2.将内核映像和根文件系统映像从flash上读到RAM中去
3.调用内核
--------------------------------------------------------------------------------


uboot


Uboot用于多种嵌入式CPU的BootLoader程序
支持多种嵌入式操作系统的引导
UBOOT目录结构
1.Borad 与开发板有关的文件。第一个开发板都以一个子目录出现在当前目录中
2.Common 实现Uboot支持的命令
3.Cpu 与特定CPU架构相关的代码,支持的CPU对应一个子目录(注意CPU与开发板的区别)
3.Disk 对磁盘的支持
4.Doc 文档目录
5.Drivers Uboot支持的设备驱动程序 如各种网卡、串品、USB、支持CFI的Flash
6.Fs 文件系统的支持
7.Iclude Uboot使用的头文件。该目录下configs目录有与开发板相关的配置头文件 该目录下的asm目录有与CPU体系结构相关的头文件
8.Net 与网络协议相关的代码 各路协议的实现
9.Tools 生成Uboot的工具,如:mkimage,crc等等

Uboot编译分为两步
1.执行每种board相关的配置 如:make amdk_2420
2.编译生成uboot.bin文件 如:make CROSS_COMPILE=arm-linux-(指定正确路径)
--------------------------------------------------------------------------------

UBOOT基于单板机提供了丰富的命令集操作
UBOOT命令
printenv查看环境变量(相当全局变量?)
setenv 添加、修改、删除环境变量
1.setenv name value
set environment variable 'name' to 'value...'
2.setenv name
delete environment variable 'name'
saveenv保存环境变量
将当前定义的所有变量及其值存入flash中
--------------------------------------------------------------------------------
---------------------文件下载------------------------------------
tftp 通过网络下载文件 使用前,配置好网络
配置网络:1.setenv ethaddr 12:34:56:78:8A:BC
2.setenv ipaddr 192.168.1.1
3.setenv serverip 192.168.1.254 (tftp服务器的地址)
连接下载:tftp 32000000 uImage
把server(IP=环境变量中设置的serverip)服务目录下的uImage通过tftp读入到0x32000000处

md 显示内存区的内容
md[.b,.w,.l]address 如:md.w 1000000

mm[.b,.w,.l]address 如:mm.w 100000
mm 修改内存,地址自动递增 提供了一种互动修改存储器内容的方法,如果没有输入任何值,按回车内容保持不变,输入空格然后按下回车,结束输入

flinfo 查看Flash扇区信息
--------------------------------------------------------------------------------
protect Flash写保护 打开或关闭扇区写保护
用法:
protect off all 关闭所有扇区的写保护
protect on all 打开所有扇区的写保护
protect off start end 关闭从start到end扇区的写保护-----》protect off 0 1ffff(前一扇区减去1?)
protect on start end 打开从start到end扇区的写保护

--------------------------------------------------------------------------------

erase 擦除flash扇区
用法: erase start end 如: erase 30000 1efff
在使用cp命令向Nor型Flash写入数据之前必须先使用erase命令擦除flash

cp 数据拷贝
cp [.b,.w,.l]saddress daddress len
cp提供了一种内存与内存,内存与Flash之间数据拷贝的方法
如:cp.b 31000000 50000 d0000 即是将内存地址0x31000000处的数据(长度为0xd0000)拷贝到地址0x50000处(Flash中)

--------------------------------------------------------------------------------
执行程序
go 执行内存中的二进制代码,一个简单的跳转到指定地址
go addr[arg...]
start application at address 'addr',
passing 'arg' as arguments

bootm 执行内存中的二进制代码
bootm [addr[arg...]] 要求二进制代码有固定格式的文件头
boot application image stored in memory passing arguments 'arg...';
when booting a Linux kernel,'arg' can be the address of an initrd image
bdinfo 显示开发板信息 (可用于启动linux内核)
bdinfo命令将在终端显示诸如内存地址和大小、时钟频率、MAC地址等信息
这些信息在传递给LIUNX内核一些参数时可能会用到

设置自动启动
setenv bootcmd tftp 31000000 uImage \;bootm 31000000
saveenv
分享到:
评论

相关推荐

    LiNUX UBOOT/bootloader源码

    Linux Uboot源码,对于linux 启动过程,开发BIOS、操作系统相关的工作者很有用。阅读Uboot源码能够帮助我们深入LINUX 启动过程,学习优秀代码范例大有好处。

    基于Uboot构建嵌入式Linux的Bootloader

    ### 基于Uboot构建嵌入式Linux的Bootloader #### 1. Bootloader概述 Bootloader(启动加载程序)是在系统上电后最先执行的一段程序代码,其主要职责是从外部存储设备(如硬盘)加载操作系统内核到RAM中,并跳转至...

    uboot_starts_analysis.rar_UBOOT 文档_uboot

    在系统加电或复位后,CPU执行的第一条指令通常位于ROM中的固件,如BIOS或Bootloader。UBOOT作为Bootloader的后续阶段,其任务是加载操作系统内核到内存并传递控制权。这一过程涉及硬件中断、时钟设置、内存检测、...

    uboot移植 国嵌PPT

    在没有BIOS固件的嵌入式系统中,BootLoader 承担着类似于BIOS的角色,它不仅负责硬件初始化,还负责加载内核到内存中,并启动操作系统。例如,在基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时都会从地址0x...

    嵌入式linux之Uboot和系统移植--基础.docx

    在PC机中,BIOS(基本输入输出系统)履行类似的功能,而嵌入式设备则通常采用Uboot。 Uboot的起源和发展历程相当丰富。作为一个开源项目,它最初由一位德国开发者发起,并逐渐演变为全球开发者共同维护的标准。随着...

    UBOOT 移植(53页PDF全面)

    与PC机中的BIOS不同,嵌入式系统通常没有类似的固件程序,因此BootLoader承担了所有必要的初始化任务。 **BootLoader的基本概念** 包括两个主要部分:一是板级和片级初始化代码,主要负责设置硬件的工作方式,例如...

    uboot和Linux内核移植.docx

    1.1.5 UBOOT 的作用:作为Bootloader,UBOOT负责初始化硬件,提供交互式命令行,加载内核映像,并传递启动参数,确保操作系统能够顺利运行。 1.2 UBOOT 的来源和发展:UBOOT最初为德国DENX软件工程中心开发,后来...

    Jz2440v2对应的uboot

    在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或...

    无UBOOT引导LINUX.rar

    2. **其他引导加载程序**: 如果不使用UBOOT,可以考虑使用其他引导加载程序,如LILO (Linux Loader) 或GRUB (Grand Unified Bootloader)。这些引导程序也能加载Linux内核,但它们可能不支持所有UBOOT具有的高级功能...

    uboot启动过程详解

    #### BootLoader启动方式概述 BootLoader是计算机系统启动时运行的第一个软件程序,其主要任务是加载、转移控制给操作系统内核。根据不同的启动需求,BootLoader有不同的启动方式,包括但不限于网络启动、磁盘启动...

    UBOOT基础知识.ppt

    在嵌入式系统中,由于通常没有像PC机上的BIOS这样的固件程序,BootLoader承担了整个系统的加载启动任务。当系统加电或复位后,CPU会从预设地址开始执行,这个地址通常存放着BootLoader程序。 BootLoader分为两个...

    嵌入式BootLoader技术内幕.pdf

    这与传统PC架构中BIOS与MBR中的BootLoader配合完成启动任务的方式有所不同,因为许多嵌入式系统没有BIOS这样的固件程序,所以BootLoader承担了更多工作。 BootLoader的技术内幕涉及到了几个关键方面: 1. ...

    嵌入式开发教程之基于SCA的嵌入式系统的UBoot移植PPT教案学习.pptx

    嵌入式系统的软件组成包括 Bootloader、操作系统、文件系统、应用程序等,Bootloader 是介于硬件和操作系统之间的一层,作用类似于PC机中的BIOS。 Bootloader 的作用是初始化硬件设备,建立内存空间的映射图,从而将...

    【 路由器固件合集】下载宝+老毛子+原版+breed+原uboot

    Breed是一款知名的路由器Bootloader,类似于电脑的BIOS,负责启动路由器固件。如果原版固件出现故障,Breed能提供备份恢复功能,便于用户刷入新的固件。此外,Breed还具有Web管理界面,方便用户进行固件升级和系统...

    系统移植笔记(uboot启动流程、系统移植)

    uboot启动流程包括硬件初始化、iROM固化代码、iRAM代码运行bootloader第一阶段、内存中运行bootloader第二阶段、加载操作系统等几个步骤。 3. PC机启动过程 PC机启动过程包括BIOS、引导程序、操作系统、文件系统、...

    Uboot-howto(使用手册).7z

    UBoot,全称Microcontroller Bootloader,是一款广泛应用在嵌入式系统中的引导加载器。它负责在系统启动时加载操作系统到内存,并为后续的系统运行做好准备。本手册将深入探讨UBoot的工作原理、配置、编译以及与硬件...

    uboot逐行分析

    Bootloader是系统上电后运行的第一段代码,有时可能是在固件(如x86架构下的BIOS)执行后。Linux内核是特定于目标平台的,可能带有Bootloader传递的启动参数。文件系统包含了运行Linux系统所需的应用程序、库和控制...

    CAVIUM处理器bootloader详述(珍贵)

    - **命名块**:解释了如何为特定功能分配固定内存区域,如用于存储BIOS代码、设备驱动等。 #### 物理地址映射 在U-Boot初始化过程中,物理地址映射是一个关键环节。例如,将0xBFC000这个地址翻译成实际的物理地址...

    uboot啟動過程分析

    然而,嵌入式系统通常没有像BIOS这样的固件程序,因此Bootloader承担了全部的启动任务。 **Bootloader的分类与启动方式** 1. **网络启动方式**:目标板通过BOOTP/DHCP获取IP地址,使用TFTP服务下载内核映像,再通过...

Global site tag (gtag.js) - Google Analytics