博客
关于我
嵌入式 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/

    你可能感兴趣的文章
    OA让企业业务流程管理科学有“据”
    查看>>
    OA项目之会议通知(查询&是否参会&反馈详情)
    查看>>
    OA项目之我的会议(会议排座&送审)
    查看>>
    OA项目之我的会议(查询)
    查看>>
    OA项目之我的审批(会议查询&会议签字)
    查看>>
    OA项目之项目简介&会议发布
    查看>>
    Object c将一个double值转换为时间格式
    查看>>
    object detection之Win10配置
    查看>>
    object detection训练自己数据
    查看>>
    object detection错误Message type "object_detection.protos.SsdFeatureExtractor" has no field named "bat
    查看>>
    object detection错误之Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR
    查看>>
    object detection错误之no module named nets
    查看>>
    Object of type 'ndarray' is not JSON serializable
    查看>>
    Object Oriented Programming in JavaScript
    查看>>
    object references an unsaved transient instance - save the transient instance before flushing
    查看>>
    Object 类的常见方法有哪些?
    查看>>
    Object-c动态特性
    查看>>
    Object.assign用法
    查看>>
    Object.create
    查看>>
    Object.defineProperty详解
    查看>>