博客
关于我
嵌入式 Linux 启动流程和 bootloader 介绍
阅读量:653 次
发布时间: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/

你可能感兴趣的文章
视觉SLAML1作业
查看>>
【转载】常见HTTP状态码
查看>>
一只蒟蒻的计算机网络学习【一】
查看>>
【一只蒟蒻的刷题历程】 【PAT】 A1070 月饼 (贪心)
查看>>
win10连接上wifi显示无internet,并且wlan的属性都点不了,可尝试的解决方法(亲测有用!!!)
查看>>
【一只蒟蒻的刷题历程】 【HDU-1276】 士兵队列训练问题
查看>>
【 UVA - 572 】 Oil Deposits (DFS水题)
查看>>
【 UVA - 673 】Parentheses Balance 平衡的括号 (非常容易理解!!)
查看>>
【Linux】 Linux实操 --- 开机、重启和用户登录注销
查看>>
【尚筹网项目】 一、【后台】搭建环境
查看>>
RBF神经网络——案例一
查看>>
神经元的传递函数
查看>>
lrzsz命令的用法
查看>>
新的开始
查看>>
继承和派生1
查看>>
七月十一日训练总结
查看>>
约瑟夫环问题
查看>>
Nim博弈与SG函数入门
查看>>
CF #716 (Div. 2) B. AND 0, Sum Big(思维+数学)
查看>>
数据结构与算法实验1——线性表的应用之顺序表
查看>>