嵌入式系统UBOOT
一个完整的嵌入式linux系统包含4部分内容:Bootloader、Parameters、Kernel、Root File System。3、4、5、6部分详细介绍了这4部分的内容,这是Linux底层软件开发人员应该掌握的。通过学习这些章节,您可以详细了解到如何在一个裸板上裁减、移植Linux,如何构造自己的根文件系统,如何编写适合客户需求的驱动程序——驱动程序这章将结合几个经典的驱动程序进行讲解。您还可以了解到在用在nand flash上的非常流行的yaffs文件系统是如何工作的,本书将结合yaffs代码详细介绍yaffs文件系统。
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
嵌入式系统UBOOT的更多相关文章
- 嵌入式系统烧写uboot/bootloader/kernel的一般方法
嵌入式系统烧写uboot/bootloader/kernel的一般方法 本文介绍了在嵌入式系统中烧写uboot/bootloader/kernel 的一般方法,以及如果uboot或者内核出现错误, ...
- 热烈庆祝华清远见2014嵌入式系统(Linux&Android)开发就业培训课程全面升级
近日,华清远见公开宣布:2014嵌入式系统 (Linux&Android)开发就业培训课程再次升级!据悉,华清远见如今已经持续10年,一直保持课程每年2次的更新的频率.华清远见的每 次课程更新 ...
- 嵌入式系统 Boot Loader 技术内幕
转载:http://www.ibm.com/developerworks/cn/linux/l-btloader/index.html 1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统 ...
- 利用qemu模拟嵌入式系统制作全过程
http://www.tinylab.org/using-qemu-simulation-inserts-the-type-system-to-produce-the-whole-process/ 利 ...
- 嵌入式系统基础知识(一): 系统结构和嵌入式Linux
目录 一. 嵌入式体系结构 二. 开发过程中的分工 三. 嵌入式软件体系结构 四. 嵌入式Linux 一. 嵌入式体系结构 <嵌入式系统设计师教程>这本书的前三章脉络很清晰, 按照嵌入式系 ...
- 【转】嵌入式系统 Boot Loader 技术内幕,带你完全了解Boot Loader
在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行.一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序.包括固化在固件(firmware)中的 boo ...
- 嵌入式之UBOOT
嵌入式Linux系统的结构分为四个区,如图所示: 1.Bootloader区存放的是Bootloader,Coidre972开发板上使用的uboot,它负责嵌入式系统最初的硬件初始化.驱动和内核加载. ...
- 嵌入式系统 Boot Loader 技术内幕【转】
本文转载自:https://www.ibm.com/developerworks/cn/linux/l-btloader/ 本文详细地介绍了基于嵌入式系统中的 OS 启动加载程序 ―― Boot Lo ...
- 【swupdate文档 三】SWUpdate: 嵌入式系统的软件升级
SWUpdate: 嵌入式系统的软件升级 概述 本项目被认为有助于从存储媒体或网络更新嵌入式系统.但是,它应该主要作为一个框架来考虑,在这个框架中可以方便地向应用程序添加更多的协议或安装程序(在SWU ...
随机推荐
- JavaScript高级 面向对象(4)--值类型和引用类型
说明(2017.3.30): 1. 变量只存数据本身就是值类型,如var a = 123, var a = "123"; 变量存的是一个引用,数据存在别的地方,就是引用类型,如数 ...
- C语言一闪而过
头文件#include<stdlib.h> main函数system("pause");
- win8 X64 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
操作系统是Windows 8 64位,安装了Microsoft Office 2013,从SQL Server 2008中导入Excel文件时出现提示: 未在本地计算机上注册“Microsoft.AC ...
- Spring 事物传播特性
Spring 事物传播特性 这是Spring官方的定义 一共有7种 摘自源码省略了一部分 public interface TransactionDefinition { int PROPAGATIO ...
- Config文件的使用:通过程序修改Config文件
对于config文件,一般情况下都是使用ConfigurationManager加载,然后通过读取相应节点的值来获取想要的数据,但是,有时候需要修改config文件的值,这时候就用到了OpenExeC ...
- java-servlet 新增特性 注释
package com.gordon.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.ser ...
- DIV内滚动条滚动到指定位置
相对浏览器,将指定div滚到到指定位置,其用法如下: $("html,body").animate({scrollTop: $(obj).offset().top},speed); ...
- 用javascript将数据导入Excel
网上收集的代码 <input type="button" name="out_excel" onclick="AutomateExcel();& ...
- 一些必看的jQuery导航插件和教程
导航是一个网站最重要的元素之一,您必须遵循统一的风格来设计您的网站,特别是导航的风格,让用户可以轻松地找到他们想要的内容.这里最大的部分是开发一个菜单,即要直观易用,又要符合你网站的设计风格.本文列举 ...
- matplotlib中的legend()——用于显示图例
legend()的一个用法: 当我们有多个 axes时,我们如何把它们的图例放在一起呢?? 我们可以这么做: import matplotlib.pyplot as plt import numpy ...