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

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

入式 Linux 启动流程概述及 Bootloader 简介

背景介绍

嵌入式系统中,Bootloader 是启动过程中的核心组件。它负责在硬件上电时,为系统的最终操作系统(如 Linux)初始化必要的硬件环境,以确保后续的稳定运行。对于基于 SoC 芯片的嵌入式平台,这一过程尤为关键。我们将从启动流程谈起,深入探讨 Bootloader 的功能与作用。

启动流程详解

嵌入式系统的启动流程通常分为几个阶段,每个阶段执行特定的任务,为后续的操作系统准备环境。

  • 硬件上电

    • 所有硬件元件完成电源供应,系统处于待机状态,准备接受启动程序的执行。
  • 一级启动:Boot ROM

    • 定义:Boot ROM 是芯片上固定的烧录存储器,无法更改。
    • 功能:
      • 确定启动设备(如 NAND 存储器或 NOR Flash)的位置。
      • 从启动设备读取一小段代码(如 4K、8K 或 16K),复制到 RAM 中运行。这段代码称为 Secondary Program Loader (SPL)。
  • 二级启动:SPL + U-Boot

    • SPL(Secondary Program Loader):

      • 功能:
        • 初始化 DDR 内存。
        • 读取下一阶段代码(如 U-Boot)从启动设备中,并复制到 RAM 中执行。
      • 注意:某些平台可能直接通过 SPL 执行 U-Boot,而不是先复制到 RAM。
    • U-Boot(Universal Bootloader):

      • 功能:
        • 读取并解析环境变量,确定 kernel 和根文件系统的存储位置。
        • 检测系统的 RAM 和存储设备(如 eMMC、NAND Flash)的容量及参数。
        • 配置网络接口 MAC 地址,准备加载 Linux 核心。
        • 加载 Linux 核心到 RAM,最后将控制权交给 kernel。
  • Linux 内核启动

    • 阶段:
      • 初始化 Linux 内核,加载根文件系统(rootfs)。
      • 调用 init 函数,完成用户空间的准备工作。
  • 不同操作系统的适配

    • 无论是 Android、Yocto、ubuntu 还是 fedora,Linux 核心的启动过程几乎一致。其区别主要体现在:
      • 芯片选择与硬件配置。
      • 系统需求定制化程度。
      • 应用程序与系统优化策略。
  • Bootloader 的核心作用

    • 硬件初始化:根据平台特点配置 CPU、DDR、存储设备等硬件。
    • 环境准备:为后续操作系统创建必要的运行环境。
    • 多样性支持:适配不同存储设备、网络接口、用户定制参数等。

    市面上常见的 Bootloader 运行环境

    嵌入式 Bootloader 可能指向不同的操作系统环境:

    • x86:与 PC 环境一致,适用于嵌入式开发。
    • ARM:广泛应用于移动设备、嵌入式控制器等。
    • PowerPC:常见于网络设备、嵌入式系统中。

    桌格比较:| Bootloader | 描述neys | x86 | ARM | PowerPC ||-------------------|---------|---|---|---|| LILO | Linux 磁盘引导程序 | 是 | 否 | 否 || GRUB | GNU 替代 LILO | 是 | 否 | 否 || U-Boot | 通用引导程序 | 是 | 是 | 是 || RedBoot | 基于 eCos | 是 | 是 | 是 || Vivi | ARM 特定 | 否 | 是 | 否 |

    Android 系统分区

    在 Android 系统中,存储划分至关重要。不同分区负责不同功能:

    • /boot:存放引导程序、内核和内存管理程序。
    • /system:系统文件,如重启镜像。
    • /recovery:恢复分区,用于系统恢复。
    • /data:用户数据,包含用户设置、联系人、应用程序。
    • /cache:系统缓存区。
    • /misc:系统设置相关。
    • /sdcard:用户存储区。

    总结

    嵌入式系统的启动流程与 Bootloader 的设计至关重要。从硬件上电到最终加载操作系统,每个阶段都需要精心设计和优化。理解 Bootloader 的工作原理,有助于更好地解决系统启动问题,也为后续系统优化奠定基础。

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

    你可能感兴趣的文章
    python+requests+unittest执行自动化接口测试!
    查看>>
    Python+Requests编码识别Bug
    查看>>
    python函数编写_[零基础学python]传说中的函数编写条规
    查看>>
    Python+selenium —— UI自动化之鼠标操作
    查看>>
    python函数注释,参数后面加冒号:,函数后面的箭头→是什么?
    查看>>
    Python+Selenium+Threading进行兼容性测试
    查看>>
    Python+selenium+unittest的GUI自动化框架实现
    查看>>
    python函数拟合不规则曲线_Python计算&绘图——曲线拟合问题(转)
    查看>>
    python函数定义的基本格式_零基础学python-2.19 定义函数、调用函数与默认参数
    查看>>
    Python+Selenium之数据驱动测试的实现
    查看>>
    python函数定义与使用+返回值简解
    查看>>
    Python+Selenium登录
    查看>>
    Python日期时间模块
    查看>>
    Python函数合集:足足68个内置函数请收好!
    查看>>
    Python+Selenium自动化测试项目实战
    查看>>
    Python+Selenium自动化测试项目实战【建议收藏】
    查看>>
    Python+Selenium自动化测试:Page Object模式
    查看>>
    python+selenium进行cnblog的自动化登录测试
    查看>>
    Python函数只返回第一个值而不是数据框
    查看>>
    Python+SQL实战:京东用户行为数据分析案例解析(上)
    查看>>