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

转载于:https://www.cnblogs.com/debruyne/p/9150983.html

BIOS、BootLoader、uboot对比相关推荐

  1. 【整理】BIOS、BootLoader、uboot对比

    bios BIOS是英文"Basic Input Output System"的缩略语,直译过来后中文名称就是"基本输入输出系统".其实,它是一组固化到计算机内 ...

  2. Bootloader和BIOS、uboot和grub和bootmgr的区别

    1 Bootloader和BIOS 1.1 BIOS   BIOS(Basic Input Output System):基本输入输出系统.它是一组固化到计算机内主板上一个ROM芯片上的程序 ,保存着 ...

  3. BIOS和BootLoader uboot

    BIOS BIOS是英文"Basic Input Output System"的缩略语,直译过来后中文名称就是"基本输入输出系统".其实,它是一组固化到计算机内 ...

  4. Linux嵌入式 -- Bootloader , Uboot

    1. Bootloader作用 PC机中的引导加载程序由BIOS(其本质是一段固件程序)和GRUB或LILO一起组成.BIOS在完成硬件检测和资源分配后,将硬盘中的引导程序读到系统内存中然后将控制权交 ...

  5. [架构之路-26]:目标系统 - 系统软件 - bootloader uboot使用方法、常用命令

    目录 第1章 uboot简介 1.1 uboot与Linux的关系 1.2 bootloader的类型 1.3 uboot的主要版本 1.4 uboot的作用与功能 1.5 SoC支持的启动方式 第2 ...

  6. [架构之路-25]:目标系统 - 系统软件 - bootloader uboot内存映射与启动流程

    目录 第1章 uboot概述 1.1 概述 1.2 内存映射(案例) 1.3 uboot在嵌入式系统启动中的位置 第2章 uboot启动流程(源码分析) 2.1 入口函数:_start 2.3 执行流 ...

  7. linux常用的BootLoader U-boot的前世今生

    U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目.U-Boot的作用是系统引导. U-Boot从FADSROM.8xxROM.PPCBOOT逐步发展演化而 ...

  8. VxWorks 引导程序(BIOS/BootLoader/Bootrom)

    前言:vxworks 的一些文件,如 usrconfig.c 在 config,comp目录中均有出现,因编译方式而选择某一个文件,命令行方式采用 config 目录文件,tornado 图形界面配置 ...

  9. UEFI BIOS和 传统BIOS 启动模式对比

    传统BIOS开机流程 从你按下主机机壳上的电源键,到进入作业系统的期间,储存於主机板上那颗EEPROM(电气可抹除暨可程式化唯读记忆体)裡的BIOS便会开始执行以下的工作: 1. 初始化: 当电脑打开 ...

  10. 【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42462795 转载请著名出处 相关资源下载 :  -- u-boo ...

最新文章

  1. SharePoint 2013 配置开发环境,需安装VS2012插件
  2. 简单的问题和复杂的问题
  3. django中序列化、反序列化过程
  4. 【网络安全】如何使用PacketSifter从pcap中筛选出有用的信息
  5. python基础-字典(8)
  6. PyTorch基础(13)-- torch.nn.Unfold()方法
  7. Java 并发——多线程基础
  8. XCTF_Web_新手练习区:disabled_button
  9. Spring4 MVC文件下载实例
  10. [react] react中遍历时为什么不用索引作为唯一的key值?
  11. 为什么机器学习算法要与人类水平比较
  12. android 判断空,Android空判断的坑
  13. 第一阶段 07类与对象
  14. 红橙Darren视频笔记 动画讲解 仿58同城 加载动画
  15. 设计模式总结 —— 单例设计模式
  16. HDU1052——Tian Ji -- The Horse Racing
  17. 20169218 2016-2017-2 《网络攻防实践》第三周学习总结
  18. linux 两台linux服务器想共享一个磁盘分区
  19. Ext4文件系统架构分析(三) ——目录哈希、扩展属性与日志
  20. 【ERP】概念_UFO报表

热门文章

  1. 做数据分析的女孩子,职业发展在哪?数据分析枯燥吗?
  2. c#类 对象 构造函数 析构函数——面向对象
  3. java 25 - 2 网络编程之 网络通信三要素
  4. 线程(一)__同步以及死锁
  5. draw9patch超详细教程【转】
  6. datagrid--新增
  7. 为什么我偏爱用 GitHub 来写书?
  8. Redis 3.2.8 安装与配置
  9. C# WebBrowser控件使用整理
  10. mysql_error 1030