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

    你可能感兴趣的文章
    NodeJS使用淘宝npm镜像站的各种姿势
    查看>>
    NodeJs入门知识
    查看>>
    nodejs包管理工具对比:npm、Yarn、cnpm、npx
    查看>>
    NodeJs单元测试之 API性能测试
    查看>>
    nodejs图片转换字节保存
    查看>>
    nodejs在Liunx上的部署生产方式-PM2
    查看>>
    nodejs基于art-template模板引擎生成
    查看>>
    nodejs字符与字节之间的转换
    查看>>
    NodeJs学习笔记001--npm换源
    查看>>
    NodeJs学习笔记002--npm常用命令详解
    查看>>
    nodejs学习笔记一——nodejs安装
    查看>>
    vue3+Element-plus icon图标无法显示的问题(已解决)
    查看>>
    NodeJS实现跨域的方法( 4种 )
    查看>>
    nodejs封装http请求
    查看>>
    nodejs常用组件
    查看>>
    nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
    查看>>
    Nodejs异步回调的处理方法总结
    查看>>
    NodeJS报错 Fatal error: ENOSPC: System limit for number of file watchers reached, watch ‘...path...‘
    查看>>
    nodejs支持ssi实现include shtml页面
    查看>>
    Nodejs教程09:实现一个带接口请求的简单服务器
    查看>>