一个完整的嵌入式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

转载于:https://www.cnblogs.com/zhugeanran/p/8426718.html

嵌入式系统UBOOT相关推荐

  1. 嵌入式linux开发环境 cpu,嵌入式Linux开发环境的搭建之:U-Boot移植-嵌入式系统-与非网...

    5.2  U-Boot移植 5.2.1  Bootloader介绍 1.概念 简单地说,Bootloader就是在操作系统内核运行之前运行的一段程序,它类似于PC机中的BIOS程序.通过这段程序,可以 ...

  2. 浅析嵌入式系统之uboot详解(5.1)—时钟分频

    bootloader详解目录-废铁是怎么产生价值的 浅析嵌入式系统之uboot详解(1)-板子上电后uboot做了什么 浅析嵌入式系统之uboot详解(2)-CPU工作模式 浅析嵌入式系统之uboot ...

  3. 浅析嵌入式系统之uboot详解(5.3)—PWM定时器(番外)

    bootloader详解目录-废铁是怎么产生价值的 浅析嵌入式系统之uboot详解(1)-板子上电后uboot做了什么 浅析嵌入式系统之uboot详解(2)-CPU工作模式 浅析嵌入式系统之uboot ...

  4. 浅析嵌入式系统之uboot详解(1)—板子上电后uboot做了什么

    bootloader详解目录-废铁是怎么产生价值的 浅析嵌入式系统之uboot详解(1)-板子上电后uboot做了什么 浅析嵌入式系统之uboot详解(2)-CPU工作模式 浅析嵌入式系统之uboot ...

  5. 嵌入式系统烧写uboot/bootloader/kernel的一般方法

    嵌入式系统烧写uboot/bootloader/kernel的一般方法 本文介绍了在嵌入式系统中烧写uboot/bootloader/kernel 的一般方法,以及如果uboot或者内核出现错误,   ...

  6. 浅析嵌入式系统之uboot详解(3)—看门狗

    bootloader详解目录-废铁是怎么产生价值的 浅析嵌入式系统之uboot详解(1)-板子上电后uboot做了什么 浅析嵌入式系统之uboot详解(2)-CPU工作模式 浅析嵌入式系统之uboot ...

  7. 【转载】学习嵌入式系统需要具备的条件、方法及步骤

    事先说明,我并不是对嵌入式有多大的兴趣,但我非常希望自己能一直向底层前进,不停地去探究最底层的奥秘. 查阅了很多资料,似乎嵌入式最附合自己对底层的探求,或许它是,或许不是,但对于现在的我而言最重要的是 ...

  8. linux 设备树_嵌入式系统砖家_初识设备树

    目录: 一.加载Linux(有无设备树) 二.设备树入门知识 一.加载Linux(有无设备树) 没有设备树的时候(以ARM架构为例): - 内核在源码里记录了所有硬件相关的信息(芯片型号.内存大小,各 ...

  9. 学习嵌入式系统需要具备的条件、方法及步骤

    2019独角兽企业重金招聘Python工程师标准>>> 1.将C和C++学好学精(语言层次): 2.将数据结构.算法.操作系统学扎实(内功层次): 3.爬山成功后,深入学习.理解.运 ...

最新文章

  1. OpenSSL中对称加密算法DES常用函数使用举例
  2. 影响u盘传输速度和使用寿命的几大因素
  3. maven打包的各种方式和如何在使用maven-assembly-plugin打包时去掉assembly id
  4. PHP新手上路(十)
  5. kotlin 扩展类的功能_Kotlin程序| 扩展功能功能
  6. react+react-router 4.0+redux 构建购物车实战项目
  7. python3关键字详解_Python解析、提取url关键字的实例详解
  8. 中国单箱梁体最宽矮塔斜拉桥合龙
  9. idea禁用双击shift、double shift 快捷键
  10. 【Python】用150行代码模拟太阳系行星运转+源码
  11. JavaScript ES6介绍
  12. 概率论_证明_辛钦大数定律
  13. EuroBen Benchmark安装以及测试(By Robinvane Suen)
  14. 科兴新冠疫苗获准紧急用于巴西3至5岁儿童
  15. 3D重建中的相机雷达融合
  16. Robocup2D入门笔记(1)——概述
  17. 日紫白飞星算法_九星紫白飞星规律
  18. RISC-V为中国MCU企业打开一个新窗口!
  19. 虾图排名第四大的科技公司,你猜是哪家?
  20. 诺曼底登陆后,联想手机如何反攻?

热门文章

  1. ffmpeg 将拆分的数据合成一帧_FFmpeg + OpenGLES 实现视频解码播放和视频滤镜
  2. anaconda下载太慢怎么办_BBTIME我爱上了 Anaconda
  3. linux收缩java位置,找到linux中当前java的安装位置
  4. 算法分析设计--递归算法
  5. 如何设置运行在Virtualbox内的Ubuntu虚拟机的静态ip地址
  6. VM虚拟机跟主机间共享文件
  7. 从电子工程师到研发经理到老板的多面人生
  8. uC/OS-II源码分析(总体思路 三)
  9. IP3 三阶交调截取点测试(转帖)
  10. 数据库主从不同步_数据从不说什么