bootloader相关内容的辨析

2024-08-22 13:52

本文主要是介绍bootloader相关内容的辨析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 在PC机中,BIOS(Basic Input/Output System,基本输入输出系统)和UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口)是两种用于初始化系统硬件、加载操作系统启动程(如引导加载程序)的固件接口。

 BIOS参在于较为成就的PC系统内,主要作用如下:

1.硬件初始化:在系统启动时,BIOS会执行自检(POST,Power-On Self-Test)过程,检查CPU、内存、显卡、硬盘等关键硬件是否正常运行。

2.加载操作系统:完成自检后,BIOS会从预设的启动设备(如硬盘、USB驱动器、CD/DVD驱动器)中读取启动程序(如GRUB、Windows Boot Manager等),并将其加载到内存中执行,从而启动操作系统。

3.配置和设置:BIOS提供了一个简单的设置界面(BIOS Setup),允许用户配置系统硬件的参数,如启动顺序、日期和时间、CPU和内存的频率等。

而它的继任者UEFI提供了更丰富的功能和更好的安全性。它与传统BIOS的主要区别包括:

1.图形化界面:UEFI支持图形化的用户界面(GUI),这使得配置系统变得更加直观和容易。

2.更大的可寻址空间:UEFI使用64位寻址模式,相比BIOS的16位寻址模式,能够支持更大的内存空间,这对现代大内存系统尤为重要。

3.更快启动速度:UEFI通过预加载环境(Pre-EFI Initialization, PEI)和驱动程序执行环境(Driver Execution Environment, DXE)等机制,实现了更快的系统启动速度。

4.更好的安全性:UEFI内置了安全启动(Secure Boot)功能,能够确保只有经过签名认证的操作系统和驱动程序才能被加载,从而增强了系统的安全性。

5.更丰富的功能:UEFI支持网络启动、设备枚举和配置、以及更复杂的启动选项管理等功能。

那么在嵌入式系统之中是否有着可以类比这两者的存在呢?

主流的说法是bootloader和它们的功能近似。一般来讲裸机系统与RTOS系统正常上电运行不需要bootloader的参与,比如ARM架构的单片机在上电之后开始从0位置读取复位向量,然后自动执行内部的flash程序(Keil这类的集成IDE可以决定扇区擦拭与整页擦拭以及通过下载算法决定页地址),不需要像Linux/Windows系统那样将程序拷贝到ram中运行。

因为STM32内部的on chip flash属于nor flash,而且通过片上的AMBA(Advanced Microcontroller Bus Architecture)总线(AHB+APB)连接到CPU,存在着对地址空间的映射,所以CPU可以直接读取FLASH进行取指。

但是用不上不代表不存在,STM32基本都存在内置的bootloader,ST原厂将其固化在了rom里面。

例如当serial wire调试失效的时候,我们可以将boot0接入高电平用串口下载代码就是依靠原厂固化在rom中的bootloader。同理,ota升级时MCU先运行到原厂的bootloader,然后会跳转到用户自己写的存到flash中的bootloader,最后跳转到用户APP。

再例如型号陈旧的8bit单片机,它们的CPU会自动从一个内存空间位置取指执行,如果它需要从外部IIC加载数据到内部RAM再启动,那么也需要bootloader的参与。

嵌入式Linux系统里面主要是使用一种叫做U-boot的开源的引导加载程序,U-boot的主要作用:

1. 初始化硬件设备

  • 在系统启动时,U-boot首先会执行一系列的初始化操作,包括初始化硬件设备(如CPU、内存、外设等)和建立内存空间映射图。这些操作将系统的软硬件环境带到一个适合运行操作系统内核的状态。

2. 加载并引导操作系统内核

  • U-boot负责将操作系统内核镜像从存储介质(如Flash、SD卡、网络等)加载到内存中,并设置必要的启动参数,然后跳转到内核的入口点执行,从而启动操作系统。

3. 提供测试调试工具

  • U-boot包含了一系列用于测试和调试的工具,如内存显示(md)、内存修改(mm、nm)、网络测试(ping)等命令,这些工具对于开发人员来说非常有用,可以帮助他们进行系统的调试和故障排查。

4. 支持多种嵌入式操作系统和处理器

  • U-boot支持多种嵌入式操作系统内核,如Linux、VxWorks、QNX等,并且支持多个处理器系列,如PowerPC、ARM、x86、MIPS等。这使得U-boot在嵌入式系统中具有广泛的应用场景。

5. 提供灵活的功能设置

  • U-boot允许用户通过修改环境变量来设置不同的启动参数和功能选项,这使得U-boot在不同的应用场景下具有高度的灵活性和可定制性。

6. 丰富的设备驱动源码

  • U-boot包含了丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH等,这些驱动使得U-boot能够更好地支持各种硬件设备,并实现与这些设备的交互。

7. 较高的可靠性和稳定性

  • 作为嵌入式系统的引导加载程序,U-boot需要具备较高的可靠性和稳定性。U-boot的开源特性和广泛的应用基础使得其在可靠性和稳定性方面得到了充分的验证和保障。

目前就聊这么多,后面等我接触到更多的东西会进行修改。

这篇关于bootloader相关内容的辨析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1096460

相关文章

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二

Python实现常用文本内容提取

《Python实现常用文本内容提取》在日常工作和学习中,我们经常需要从PDF、Word文档中提取文本,本文将介绍如何使用Python编写一个文本内容提取工具,有需要的小伙伴可以参考下... 目录一、引言二、文本内容提取的原理三、文本内容提取的设计四、文本内容提取的实现五、完整代码示例一、引言在日常工作和学

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

《SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)》本文介绍了如何在SpringBoot项目中使用Jasypt对application.yml文件中的敏感信息(如数... 目录SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密)前言一、J

如何解决Pycharm编辑内容时有光标的问题

《如何解决Pycharm编辑内容时有光标的问题》文章介绍了如何在PyCharm中配置VimEmulator插件,包括检查插件是否已安装、下载插件以及安装IdeaVim插件的步骤... 目录Pycharm编辑内容时有光标1.如果Vim Emulator前面有对勾2.www.chinasem.cn如果tools工

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

Redis的Zset类型及相关命令详细讲解

《Redis的Zset类型及相关命令详细讲解》:本文主要介绍Redis的Zset类型及相关命令的相关资料,有序集合Zset是一种Redis数据结构,它类似于集合Set,但每个元素都有一个关联的分数... 目录Zset简介ZADDZCARDZCOUNTZRANGEZREVRANGEZRANGEBYSCOREZ

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li