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
BIOS、BootLoader、uboot对比的更多相关文章
- BIOS和Bootloader的对比
桌面电脑刚加电时,一个叫做BIOS的软件程序立刻获得了处理器的控制权.(历史上,BIOS是Basic Input/Output Software的缩写,但现在这个单词已经有了自身的含义,因为其完成的功 ...
- Linux嵌入式 -- Bootloader , Uboot
1. Bootloader作用 PC机中的引导加载程序由BIOS(其本质是一段固件程序)和GRUB或LILO一起组成.BIOS在完成硬件检测和资源分配后,将硬盘中的引导程序读到系统内存中然后将控制权交 ...
- linux常用的BootLoader U-boot的前世今生
U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目.U-Boot的作用是系统引导. U-Boot从FADSROM.8xxROM.PPCBOOT逐步发展演化而 ...
- 【转】U-boot分析与移植(1)----bootloader分析
原文网址:http://blog.csdn.net/jianchi88/article/details/7061089 一.Boot Loader 概念 就是在操作系统内核运行之前运行的一段小程序. ...
- 【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)
作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42462795 转载请著名出处 相关资源下载 : -- u-boo ...
- U-boot分析与移植(1)----bootloader分析
一.Boot Loader 概念 就是在操作系统内核运行之前运行的一段小程序.通过这段小程序,我们可以初始化硬件设备.建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作 ...
- 嵌入式系统UBOOT
一个完整的嵌入式linux系统包含4部分内容:Bootloader.Parameters.Kernel.Root File System.3.4.5.6部分详细介绍了这4部分的内容,这是Linux底层 ...
- tiny6410 烧写uboot 转载
#烧录 参考: 03- Tiny6410刷机指南.pdf 假设拿到的Tiny6410开发板没有提前下载任何程序,包括Bootloader. ##Bootloader - Superboot Super ...
- Tiny4412 Uboot
1. Build uboot a) 安装好toolchain (arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz)并设置好 环境变量PATH,保证可以正常使用. b) 解 ...
随机推荐
- 记录Python类与继承的一个错误
今天在学python的类与继承的时候遇到一个错误,原来是自己在ctrl+c ctrl+v的时候漏了一个括号 class Car(): def __init__(self,make,year,mode ...
- @Scope注解设置创建bean的方式和生命周期
1.1.1 Scope注解创建bean的方式和生命周期 作用 Scope设置对象在spring容器(IOC容器)中的生命周期,也可以理解为对象在spring容器中的创建方式. 取 ...
- 牛客国庆集训派对Day3 I Metropolis
Metropolis 思路: 多源点最短路 只要两个不同源点的最短路相遇,我们就更新两个源点的答案 代码: #pragma GCC optimize(2) #pragma GCC optimize(3 ...
- ACM-ICPC 2018 沈阳赛区网络预赛 J Ka Chang
Ka Chang 思路: dfs序+树状数组+分块 先dfs处理好每个节点的时间戳 对于每一层,如果这一层的节点数小于sqrt(n),那么直接按照时间戳在树状数组上更新 如果这一层节点个数大于sqrt ...
- win10安装PS和AI后报代码为16的错误解决方法
win10安装PS和AI后报代码为16的错误解决方法 一.总结 一句话总结:修改兼容性和以管理员方式运行就可以了 修改兼容性 以管理员身份运行 二.PS和AI安装后报代码为16的错误解决方法介绍(转) ...
- appium自动化测试 环境搭建
最 近接手的项目是移动端自动化测试 ,需要用的appium ,头一回使用, 项目特点:1)数据有时效性,需要在短时间内验证大量数据, 2) 人工去一个一个核对发现不了太多BUG. 环境搭建:参考虫师的 ...
- WmiPrvSe.exe 的 cpu 占用
经常会看到这个进程cpu升上去,然后播放视频卡顿,鼠标移动卡顿. 1) 首先怀疑公司的Mcafee, 然后竟然检索除了一篇文章,MCafee表示不背锅. 2)找到这篇文章,微软表示,不能看表面,你得查 ...
- 20165327 2017-2018-2《Java程序设计》课程总结
20165327 2017-2018-2<Java程序设计>课程总结 预备作业一:我期望的师生关系 预备作业二:学习基础和C语言基础调查 预备作业三:预备作业3 Linux安装及学习 第一 ...
- Python实现Plugin(插件化开发)
https://www.cnblogs.com/terencezhou/p/10276167.html
- Error:Unable to tunnel through proxy. Proxy returns "HTTP/1.1 400 Bad Request"解决方法
出现这个错误的原因主要是因为你的本地Gradle和项目的Gradle地址不一样,要么就是没找到 所以需要更改下你的Gradle地址 如图需要将你的Gradle版本的地址改为,你本地的Gradle地址即 ...