bootloader启动引导

2024-05-27 17:32
文章标签 启动 bootloader 引导

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

一、Bootloader概述

简而化之的说,在嵌入式系统中Bootloader就是在系统CPU开启或计算机复位的时候运行的程序。这段程序可以初始化硬件设备、建立内存空间映射图,将系统的软硬件环境带到一个合适状态,为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由Bootloader来完成。以基于ARM7TDMI core的嵌入式系统为例来说,系统在上电或复位时通常都从地址0x00000000处开始执行,而系统的Bootloader程序通常就是被安排在这个地址处的。

二、Bootloader的特点

(1)与硬件相关性大

(2)与具体CPU类型相关性大

(3)与系统的具体硬件实现(电路板)相关

(4)与具体操作系统无关通常被保存在某种被映射到CPU某个指定地址的固态存储器中

(5)系统开始运行,Bootloader便不再起作用

(6)Bootloader启动可以是单阶段或多阶段,代码可以都在flash中运行,或者一部分在flash中运行,一部分在ram中运行

(7)一般Bootloader至少有一部分在flash中运行,但有少数例外(需要处理器支持)

(8)一般Bootloader有“引导”和“下载”两种工作模式还需要支持与Host之间的通信,一般为串口

三、Bootloader的操作模式

两种不同的操作模式

下载模式:

对研发人员来说,Bootloader一般需要工作在下载模式下,尤其是需要调试内核或者Bootloader本身的时候。通过串口终端与Bootloader进行交互,可以操作系统硬件。比如通过网口或者串口下载内核,烧写Flash等等。 用于系统安装和更新等. 在这种模式下, 目标机上的Bootloader将通过串口或者网络连接或者其它通信手段从主机下载文件,比如:下载内核镜像和根文件系统镜像等。从主机下载的文件通常首先被Bootloader保存到目标机的ram 中,然后被Bootloader写到目标机上的FLASH类固态存储设备中。Bootloader 的这种模式通常在第一次安装内核与根文件系统时使用;此外,以后的系统更新也会使用Bootloader的这种工作模式。此状态需要用户干预,如果用户不干预则进入自主启动模式。

启动加载模式:

这种模式也称为“自主”模式,即 Bootloader 从目标机上的某个固体存储设备上将操作系统加载到 RAM 中运行,整个过程没有用户的加入。 这种模式是 Bootloader的正常工作模式,因此当以嵌入式产品发布的时候,Bootloader 必须工作在这种模式下。 这种情况下,Bootloader必须完成硬件自检、配置,并从Flash中将内核拷贝到SDRAM中,并跳转到内核入口,实现自启动,而不需要人为的干预。

四、Bootloader 的概念扩展

Bootloader 最主要的功能是引导加载内核镜像。但是随着嵌入式系统的发展,Bootloader也随之在完善基本功能的基础上,进行了很多扩展,bootloader 可以更多地增加对具体系统的板级 支持,即增加一些硬件模块功能上的使用支持,以方便开发人员进行开发和调试。所以有人将功能扩展后的 Bootloader比作一个微小的系统级的代码包。

.Bootloader所支持的CPU和嵌入式板 每种不同的CPU系列通常都有不同的Bootloader。有些Bootloader也 支持多种体系结构的CPU,比如U—Boot就同时支持ARM体系结构和MIPS 体系结构。除了依赖于CPU的体系结构外,Bootloader实际上也依赖于具体 的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它 们是基于同一种CPU而构建的,要想让运行在一块板子上的Bootloader程序 也能运行在另一块板子上,通常也都需要对Bootloader的源程序进行一定的修改。

五、Bootloader与主机之间的文件传输

  • 串口与主机之间进行文件传输
  • 传输协议为xmodem/ymodem/zmodem
  • 以太网传输
  • 传输协议为TFTP
  • 或者,直接使用FTP服务
  • 或者,使用mount方式挂载映射

六、Bootloader的启动过程

一般情况来说,Bootloader根据不同的硬件实现方法也不一样,是在嵌入式世界里尤是如此。因此,在嵌入式世界里建立一个通用的Bootloader几乎是不可能的。但尽管如此,我们仍然可以对Bootloader归纳出一些通用的特性来,以指导用户特定的Bootloader 设计与实现。 基本硬件设备的初始化(屏蔽中断、设置第一阶段CPU的速度和时钟频率,关闭处理器内部指令/数据cache等) ·为第二阶段准备ram空间

  • 如果是从某个固态存储器中,则复制Bootloader第二阶段代码到ram中
  • 设置堆栈
  • 跳转到第二阶段的C程序入口点初始化本阶段要使用的硬件设备
  • 检测系统内存映射(memory Map)
  • 将Kernel映象和根文件系统映象从flash加载到ram中
  • 为内核设置启动参数
  • 调用内核

七、Bootloader升级过程

除了arm,其它的嵌入式系统或PC上也会有Bootloader,主要用来启动其他操作系统,通常每个操作系统都有一套为其特定的引导程序。在硬件起动后,硬件设备尚未初始化,直接加载体积较大的系统比较困难,甚至会出现无法加载的情况,如系统内核在网络上的情况,所以常常在系统运行前,提供一个体积较小但又具体初始化基本软硬件环境的程序来运行,由它来载入系统并设置系统运行参数,并最终运行系统,这就是Bootloader。

它可以分为两大类,一是芯片在出厂时,生产商固化在ROM中;二是用户在设计过程中,根据实际需要设计一小段代码,使新的应用程序从非JATG接口引导到ROM区或RAM区。其实这两类在功能上上相差不多。 我们都知道程序都是从复位开始执行起的,Bootloader虽然只是一段小程序,但也同样如此。当芯片复位后,系统产生复位中断,执行复位中断服务程序,复位中断的优先级最高,所以不需要考虑有谁可以打断它。当然,程序员就可以在复位中断里面打芯片的主意了。Bootloader升级应用程序的点子就是从这里出发的,它先把自己的Bootloader复制到ram区,再零填充.bss段,然后就让向量表的偏移从ram的起始地址开始算起,LM3Sxxxx是从0x20000000开始偏移,到此,开始在ram区里执行。 在ram区里执行时,会对升级信号进行检测,如检测到要升级信号,则开始配置要升级的接口,准备好了就升级应用程序。如果没有检测到升级信号则执行原有的用户应用程序。

八、Bootloader的结构

从结构上,Bootloader的各项功能之间有一定的关连性,某些功能是与硬件相关的,某些功能是软件的。芯片的启动代码是Bootloader必备的基础,不同处理器启动需要的设置是不同的。即使是相同的处理器,其内存空间的配置也是不一样的。因此,各个嵌入式系统的启动代码一般都是不相同的。

运行操作系统是Bootloader的主要功能,包括将操作系统加载到内存,开辟操作系统所需要的数据代码区域,然后跳转到操作系统的代码处运行。在嵌入式系统中,Bootloader运行操作系统和应用程序的过程不同。操作系统内核一般被编译成纯二进制代码,Bootloader运行操作系统内核主要是内存加载和跳转两个步骤;操作系统运行应用程序则复杂得多,需要进行程序头的解析。系统上电/复位基本硬件初始化准备RAM空间复制到RAM设置启动参数调理内核跳转检测系统内存映射由Flash读文件到RAM中设置堆栈所需硬件初始化阶段2入口结束转阶段2

根据Bootloader的功能,可以支持不同操作系统的引导。一般情况下,Bootloader在引导操作系统的时候,是运行纯二进制操作系统映像,本质是将其加载到内存、创建运行环境和跳转运行,附加的功能还包括传递一些参数。 对于这种引导模式,运行不同操作系统映像文件的差异不大。某些功能强大的Bootloader可以支持不同格式的操作系统映像的加载。在这种情况下,Bootloader对操作系统的加载过程类似于Bootloader运行一个应用程序。在一般Bootloader的功能框架中,人机交互的功能是系统的逻辑核心,它将Bootloader各部分的功能组织在一起,并向外部提供交互的接口,用户可以通过命令行控制Bootloader。人机交互功能本身是一个与具体硬件相关的功能但是它一般需要建立在目标机主机通信机制之上,如使用系统的串口。 Bootloader的通信功能主要完成目标机到主机的通信,通信模块主要依赖的硬件机制包括串口、网络、USB等。一般来说,串口可以实现目标机主机控制台的功能,实现人机交互的基础;而网络和USB的速度较快,可以实现较大的文件传输,它们通常建立在TCP/IP网络的协议之上。在通信功能中,通信层接口、网络协议等功能是和硬件无关的,而串口、网络USB等模块的驱动是与硬件有关的,需要不同的嵌入式系统根据自身的情况实现或者移植。 Flash相关的功能也是Bootloader常见的功能,这是由于嵌入式系统中Bootloader需要烧写自身系统,完成系统的更新。功能强大的Bootloader还可以支持Flash上的分区和文件系统的功能。

结语:总结与展望

随着计算机相关的科学技术不断发展,嵌入式系统的应用范围变得更广,功能也更强大和齐全。单个的电子设备,已经可以集成手机,数码相机,mp3随身听,计算机等众多的功能,Bootloader作为嵌入式系统中重要的一个组成部分,成为嵌入式系统一个专门的研究方向。 Bootloader是因嵌入式系统的蓬勃发展而应运而生的。一个嵌入式系统赋予Bootloader的职能是引导与加载内核镜像,但是为了给更多的开发者提供便利的开发手段,Bootloader越来越不局限于其基本功能,它不断地增加对硬件电路板具体功能模块的支持,甚至是支持一些简单的网络协议。现在的 Bootloader,更像是一个小系统。

这篇关于bootloader启动引导的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

springboot3打包成war包,用tomcat8启动

1、在pom中,将打包类型改为war <packaging>war</packaging> 2、pom中排除SpringBoot内置的Tomcat容器并添加Tomcat依赖,用于编译和测试,         *依赖时一定设置 scope 为 provided (相当于 tomcat 依赖只在本地运行和测试的时候有效,         打包的时候会排除这个依赖)<scope>provided

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

用命令行的方式启动.netcore webapi

用命令行的方式启动.netcore web项目 进入指定的项目文件夹,比如我发布后的代码放在下面文件夹中 在此地址栏中输入“cmd”,打开命令提示符,进入到发布代码目录 命令行启动.netcore项目的命令为:  dotnet 项目启动文件.dll --urls="http://*:对外端口" --ip="本机ip" --port=项目内部端口 例: dotnet Imagine.M

Linux服务器Java启动脚本

Linux服务器Java启动脚本 1、初版2、优化版本3、常用脚本仓库 本文章介绍了如何在Linux服务器上执行Java并启动jar包, 通常我们会使用nohup直接启动,但是还是需要手动停止然后再次启动, 那如何更优雅的在服务器上启动jar包呢,让我们一起探讨一下吧。 1、初版 第一个版本是常用的做法,直接使用nohup后台启动jar包, 并将日志输出到当前文件夹n

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud

SpringBoot项目是如何启动

启动步骤 概念 运行main方法,初始化SpringApplication 从spring.factories读取listener ApplicationContentInitializer运行run方法读取环境变量,配置信息创建SpringApplication上下文预初始化上下文,将启动类作为配置类进行读取调用 refresh 加载 IOC容器,加载所有的自动配置类,创建容器在这个过程

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

三相直流无刷电机(BLDC)控制算法实现:BLDC有感启动算法思路分析

一枚从事路径规划算法、运动控制算法、BLDC/FOC电机控制算法、工控、物联网工程师,爱吃土豆。如有需要技术交流或者需要方案帮助、需求:以下为联系方式—V 方案1:通过霍尔传感器IO中断触发换相 1.1 整体执行思路 霍尔传感器U、V、W三相通过IO+EXIT中断的方式进行霍尔传感器数据的读取。将IO口配置为上升沿+下降沿中断触发的方式。当霍尔传感器信号发生发生信号的变化就会触发中断在中断

kubelet组件的启动流程源码分析

概述 摘要: 本文将总结kubelet的作用以及原理,在有一定基础认识的前提下,通过阅读kubelet源码,对kubelet组件的启动流程进行分析。 正文 kubelet的作用 这里对kubelet的作用做一个简单总结。 节点管理 节点的注册 节点状态更新 容器管理(pod生命周期管理) 监听apiserver的容器事件 容器的创建、删除(CRI) 容器的网络的创建与删除