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

    你可能感兴趣的文章
    Nginx配置——不记录指定文件类型日志
    查看>>
    Nginx配置代理解决本地html进行ajax请求接口跨域问题
    查看>>
    Nginx配置参数中文说明
    查看>>
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置如何一键生成
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    Nim游戏
    查看>>
    NIO ByteBuffer实现原理
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>