博客
关于我
嵌入式 Linux 启动流程和 bootloader 介绍
阅读量:654 次
发布时间:2019-03-15

本文共 2531 字,大约阅读时间需要 8 分钟。

目录


入式 Linux 启动流程

简介

对于一个 SoC 芯片而言,bootloader 必不可少。因为一个 SoC 芯片一定不是独立存在的,它的载体是经过严格设计的一块硬件电路板。从电路板上电到 SoC 可以执行 Linux Kernel 并最终挂载文件系统,需要在不同阶段执行不同的特定代码。

SoC 上电伊始,根据设定的启动方式,在合适的地方运行 BootRom 代码,用于对 SoC 做一个最基本最简单的初始化。这是 SoC 执行的第一个程序。

当 SoC 执行完 BootRom 程序后,需要初始化与电路板相关的各种外设等,此时需要一份 Bootloader 来完成此项工作。

当电路板初始化完成后,SoC 可以执行任何的程序,包括加载 Kernel 以及文件系统等。

当然,若 SoC 内部 RAM 足够大同时又不考虑启动的灵活性,则完全可以将 BootRom 做成 bootloader,用于加载 Linux Kernel。

启动流程

一、硬件上电

二、一级启动:bootROM

    Boot ROM 是厂商都无法进行更改,固化在芯片内部的ROM;

    作用:确定用于启动的设备;从启动的设备的位置搬移一小段代码(4k/8k/16k)到RAM中运行,即SPL。

三、二级启动:SPL + uboot

1. SPL: Secondary Program Loader:

    作用:初始化 DDR;从启动的设备搬移第二段代码到 RAM 中,加载 uboot(有些 SoC 是将 bootloader 复制到 RAM 后,再进行 DDR 初始化)。

2. uboot: Universal boot loader:

    U-Boot 从启动设备上面读取、分析环境变量获得 kernel 和 rootfs 存储位置,以及所需的 kernel command line;

    自动检测系统 RAM 和 eMMC/Nand Flash 容量和参数;

    设置以太网口 MAC 地址,并配置好硬件准备加载 Linux kernel;

    加载 Linux kernel 到 RAM,至此系统控制权则转移到 kernel 来处理。

四、Linux Kernel

    系统 Kernel 初始化 Linux,加载 rootfs,最后启动 ’init’ 来初始化 Linux user space

五、不同的OS

    Android、Yocto、ubuntu、fedora

PS:

一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次:

1、 引导加载程序。包括固化在固件(firmware)中的boot代码(可选),和 BootLoader 两大部分。(bootROM,uboot)

2、Linux内核。特定于嵌入式板子的定制内核以及内核的启动参数。(Linux kernel)

3、 文件系统。包括根文件系统和建立于 Flash 内存设备之上文件系统。通常用 ramdisk 来作为 rootfs。

4、 用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式GUI有:MicroWindows 和 MiniGUI 等。

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

 

Bootloader 简介

由上面的介绍可以知道:Bootloader主要是在系统加载前,初始化硬件设备,建立内存空间的映像图,为最终调用系统内核准备好环境。

市面上可见的 bootloader

开放源码的Linux引导程序

Bootloader 描述 x86 ARM PowerPC
LILO Linux磁盘引导程序
GRUB GNU的LILO替代程序
Loadlin 从DOS引导Linux
ROLO 从ROM引导Linux而不需要BIOS
Etherboot 通过以太网卡启动的Linux系统的固件
LinuxBIOS 完全替代BUIS的Linux引导程序
BLOB LART等的硬件平台的引导程序
U-Boot 通用引导程序
RedBoot 基于eCos的引导程序
vivi 专为ARM处理器系列设计
Bios-lt 专为S3C4510B开发的引导程序
Bootldr 康柏的支持SA1100芯片引导程序

从处理器支持的情况来看,仅 U-Boot 和 RedBoot 对三种架构的处理器都支持,在嵌入式领域比较流行的处理器架构是 ARM 和 PowerPC。RedBoot 的构建必须要基于 eCOS 环境下,这是其一大劣势,对于开发者而言,需要切换环境是一项比较挠头的事情。U-Boot 项目源于 PowerPC,后又兼并了 ARM Boot 项目。这也是为什么 U-Boot 能在 PowerPC 和 ARM 两种架构中得以流行的关键推动因素。

在 Android运行环境中里没有硬盘,而是 ROM,它类似于硬盘存放操作系统,用户程序等。

ROM 跟硬盘一样也会划分为不同的区域,用于放置不同的程序。

android系统分区:

系统分区 功能
/boot 存放引导程序,包括内核和内存操作程序
/system 相当于电脑c盘,存放Android系统及系统应用
/recovery 恢复分区,可以进入该分区进行系统恢复
/data 用户数据区,包含了用户的数据:联系人、短信、设置、用户安装的程序
/cache 安卓系统缓存区,保存系统最常访问的数据和应用程序
/misc 包含一些杂项内容,如系统设置和系统功能启用禁用设置
/sdcard 用户自己的存储区,可以存放照片,音乐,视频等文件

更多信息可以参考如下链接:

参考:

 

转载地址:http://thdmz.baihongyu.com/

你可能感兴趣的文章
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_插入修改删除增量数据实时同步_通过分页解决变更记录过大问题_01----大数据之Nifi工作笔记0053
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_生成插入Sql语句_实际操作02---大数据之Nifi工作笔记0041
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_不带分页处理_01_QueryDatabaseTable获取数据_原0036---大数据之Nifi工作笔记0064
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>
NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
查看>>
NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>