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

本文共 1713 字,大约阅读时间需要 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代理模式下 log-format 获取客户端真实IP
    查看>>
    Nginx代理静态资源(gis瓦片图片)实现非固定ip的url适配网络环境映射ip下的资源请求解决方案
    查看>>
    Nginx代理静态资源(gis瓦片图片)实现非固定ip的url适配网络环境映射ip下的资源请求解决方案
    查看>>
    Nginx反向代理与正向代理配置
    查看>>
    Nginx反向代理是什么意思?如何配置Nginx反向代理?
    查看>>
    nginx反向代理解决跨域问题,使本地调试更方便
    查看>>
    nginx启动脚本
    查看>>
    Nginx在Windows下载安装启动与配置前后端请求代理
    查看>>
    Nginx多域名,多证书,多服务配置,实用版
    查看>>
    nginx开机启动脚本
    查看>>
    nginx异常:the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx/conf
    查看>>
    nginx总结及使用Docker创建nginx教程
    查看>>
    nginx报错:the “ssl“ parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:128
    查看>>
    nginx报错:the “ssl“ parameter requires ngx_http_ssl_module in usrlocalnginxconfnginx.conf128
    查看>>
    nginx日志分割并定期删除
    查看>>
    Nginx日志分析系统---ElasticStack(ELK)工作笔记001
    查看>>
    Nginx映射本地json文件,配置解决浏览器跨域问题,提供前端get请求模拟数据
    查看>>
    nginx最最最详细教程来了
    查看>>
    Nginx服务器---正向代理
    查看>>