嵌入式系统的Boot Loader技术
- 格式:pdf
- 大小:2.20 MB
- 文档页数:48
2018年第7期信息通信2018 (总第187 期)INFORMATION & COMMUNICATIONS (Sum. No 187)基于AR M嵌入式系统的Boot Loadei•启动分析与移植江敏(西华师范大学电子信息工程学院,四川南充637002)摘要:Boot Loader启动代码的分析与移植是嵌入式产品研发中最重要的环节之一。
近年,嵌入式技术已取得了飞速的 发展,但对于其最本质的桂心部分Boot Loader的分析却不是很多。
实践证明,Boot Loader的优越与否,对喪入式系统的 性能起到决定性的作用。
文章根据Linux系统的编译环境及嵌入式系统的编程特点,分析了 U-boot在ARM i.MX6Q嵌 入式系统中的启动过程和移植过程。
该研究对Boot Loader的设计有一定的借鉴作用。
关键词:Boot Loader;嵌入式;借鉴中图分类号:TP368.1 文献标识码:A文章编号:1673-1131(2018)07-0098-02The analysis and transplantation of Boot Loader based on ARM embedded systemJiang Min(College of Electronic Information Engineering,China West Normal University sichuan nanchong637002) Abstract:The analysis and transplantation of Boot Loader's bootcode is one of the most important parts in the development of embedded products.In recent years,the embedded technology has achieved a rapid development,but the analysis of t he most essential core of t he Boot Loader is not much.lt has been proved that the advantages of t he Boot Loader play a decisive role in the performance of the embedded system.Based on the compilation environment of Linux system and the programming characteristics of embedded system,this paper analyzes the start-up process and transplantation process of u-boot in the ARM i.MX6Q embedded system.This paper has some reference to the design of Boot Loader.Keywords:Boot Loader;embedded;reference〇引言随着时代的发展,电子产品智能化程度愈来愈高,这与微 处理器的发展有着密切的联系。
近年来,随着科技的不断发展,嵌入式系统的应用范围越来越广泛。
在嵌入式系统中,bootloader(引导程序)扮演着至关重要的角色,它负责初始化系统硬件、加载操作系统,并将控制权交给操作系统。
在嵌入式领域中,s32 bootload 代码作为一种引导程序,在汽车电子、工业控制等领域得到了广泛的应用。
1. s32 bootload 代码的基本原理s32 bootload 代码是为NXP公司的S32微控制器设计的引导程序。
它的基本原理是在系统上电后,首先执行引导程序,引导程序负责初始化各种外设和系统环境,并且加载操作系统。
s32 bootload 代码在引导过程中会检查系统中的固件,如果固件需要更新,它会负责更新固件,保障系统的稳定和安全运行。
2. s32 bootload 代码的特点s32 bootload 代码具有很多特点,其中最突出的包括:- 灵活可配置:s32 bootload 代码可以根据具体的应用需求进行灵活配置,从而满足不同应用场景的需求。
- 安全可靠:s32 bootload 代码具有严格的固件验证和安全机制,确保固件的完整性和安全性。
- 高效性能:s32 bootload 代码能够在短时间内完成引导过程,并将控制权交给操作系统,保障系统的快速启动和高效运行。
3. s32 bootload 代码的应用领域s32 bootload 代码广泛应用于汽车电子、工业控制、通信设备等领域。
在汽车电子领域,s32 bootload 代码可以实现汽车ECU(电子控制单元)的固件升级和安全验证,保障汽车电子系统的稳定和安全运行。
在工业控制领域,s32 bootload 代码可以实现工业设备的固件升级和远程管理,提高工业设备的可靠性和安全性。
在通信设备领域,s32 bootload 代码可以实现通信设备的固件升级和安全验证,提高通信设备的性能和稳定性。
总结回顾:s32 bootload 代码作为一种引导程序,在嵌入式系统中发挥着至关重要的作用。
论文导读::嵌入式系统是以应用为中心、以计算机为基础、软硬件可裁剪。
即启动过程可分为阶段1和阶段2两个部分。
技术概述。
论文关键词:嵌入式系统,启动过程,BootLoader技术一 BootLoader技术概述嵌入式系统是以应用为中心、以计算机为基础、软硬件可裁剪,适用于系统对功能、可靠性、成本、功耗严格要求的专用计算机系统。
计算机系统都具有相应的引导程序,对于嵌入式系统在执行主程序之前要执行一些初始化的过程来完成对系统的初始化,并创造嵌入式程序运行的环境。
我们熟悉的PC中的引导程序一般BIOS和位于MBR的 OS bootloader (例如 LILO 或者 GRUB)一起组成。
在嵌入式系统中,出于经济方面的考虑一般不配置 BIOS,在嵌入式系统中,通常采用BootLoader技术来启动程序。
启动时用于完成初始化操作的代码被称为BootLoader 程序,整个系统的加载启动任务就由 BootLoader来完成。
通过这段程序,可以初始化硬件设备、建立内存空间的映射图启动过程,从而将系统的软硬件环境设定在一个合适的状态,以便为调用操作系统内核准备好正确的环境。
BootLoader依赖于硬件和应用环境,不同的CPU有不同的 Bootloader。
即使他们是基于同一种 CPU,要想让运行在一块目标板上的Bootloader程序也能运行在另一块板子上,通常也需要对BootLoader的源程序进行修改。
因此,对 Bootloader 进行分析,并找出其中的规律和原理,使得BootLoader 运行于各种不同的硬件平台。
二 BootLoader 技术的基本特征1 BootLoader 安装地址的固定性系统加电或复位后,CPU 通常都从由CPU 制造商预先安排好的地址上取指令, 如XScale 内核的CPU 通常都从地址0x00000000处取它的第一条指令。
基于这种CPU 构建的嵌入式系统通常都有某种类型的固态存储设备被映射到这个预先安排的地址上。
BootLoader锁定本词条由“科普中国”百科科学词条编写与应用工作项目审核。
行之前运行。
可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最U也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。
在一个基于ARM7TDM I00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。
中文名启动装载外文名BootLoader说明系统启动前引导程序操作模式启动模式、交互模式1背景介绍Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳转到操作系统所在的空间,启动操作系统运行。
[1]对于嵌入式系统,Bootloader是基于特定硬件平台来实现的。
因此,几乎不可能为所有的嵌入式系统建立一个通用的Bootloader,不同的处理器架构都有不同的Bootloader 。
Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。
对于2块不同的嵌入式板而言,即使它们使用同一种处理器,要想让运行在一块板子上的B ootloader程序也能运行在另一块板子上,一般也都需要修改Bootloader的源程序。
反过来,大部分Bootloader仍然具有很多共性,某些Bo otloader也能够支持多种体系结构的嵌入式系统。
例如,U-Boot就同时支持PowerPC、ARM、MIPS和X86等体系结构2操作模式1.自启动模式:在这种模式下,bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。
2.交互模式:在这种模式下,目标机上的bootloader将通过串口或网络等通行手段从开发主机(Host)上下载内核映像等到RAM中。
可以被bootloader写到目标机上的固态存储媒质中,或者直接进入系统的引导。
简单地说,Boot Loader 就是在操作系统内核运行之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。
因此,在嵌入式世界里建立一个通用的Boot Loader 几乎是不可能的。
尽管如此,我们仍然可以对Boot Loader 归纳出一些通用的概念来,以指导用户特定的Boot Loader 设计与实现。
1. Boot Loader 所支持的CPU 和嵌入式板每种不同的CPU 体系结构都有不同的Boot Loader。
有些Boot Loader 也支持多种体系结构的CPU,比如U-Boot 就同时支持ARM 体系结构和MIPS 体系结构。
除了依赖于CPU的体系结构外,Boot Loader 实际上也依赖于具体的嵌入式板级设备的配置。
这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU 而构建的,要想让运行在一块板子上的Boot Loader 程序也能运行在另一块板子上,通常也都需要修改Boot Loader 的源程序。
2. Boot Loader 的安装媒介(Installation Medium)系统加电或复位后,所有的CPU 通常都从某个由CPU 制造商预先安排的地址上取指令。
比如,基于ARM7TDMI core 的CPU 在复位时通常都从地址0x00000000 取它的第一条指令。
而基于CPU 构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM 或FLASH 等)被映射到这个预先安排的地址上。
因此在系统加电后,CPU 将首先执行Boot Loader 程序。
3. 用来控制Boot Loader 的设备或机制主机和目标机之间一般通过串口建立连接,Boot Loader 软件在执行时通常会通过串口来进行I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。
嵌入式系统Boot Loader 技术内幕(3)在boot loader 程序的设计与实现中,没有什么能够比从串口终端正确地收到打印信息能更令人激动了。
此外,向串口终端打印信息也是一个非常重要而又有效的调试手段。
但是,我们经常会碰到串口终端显示乱码或根本没有显示的问题。
造成这个问题主要有两种原因:(1) boot loader 对串口的初始化设置不正确。
(2) 运行在host 端的终端仿真程序对串口的设置不正确,这包括:波特率、奇偶校验、数据位和停止位等方面的设置。
此外,有时也会碰到这样的问题,那就是:在boot loader 的运行过程中我们可以正确地向串口终端输出信息,但当boot loader 启动内核后却无法看到内核的启动输出信息。
对这一问题的原因可以从以下几个方面来考虑:(1) 首先请确认你的内核在编译时配置了对串口终端的支持,并配置了正确的串口驱动程序。
(2) 你的boot loader 对串口的初始化设置可能会和内核对串口的初始化设置不一致。
此外,对于诸如s3c44b0x 这样的CPU,CPU 时钟频率的设置也会影响串口,因此如果boot loader 和内核对其CPU 时钟频率的设置不一致,也会使串口终端无法正确显示信息。
(3) 最后,还要确认boot loader 所用的内核基地址必须和内核映像在编译时所用的运行基地址一致,尤其是对于uClinux 而言。
假设你的内核映像在编译时用的基地址是0xc0008000,但你的boot loader 却将它加载到0xc0010000处去执行,那么内核映像当然不能正确地执行了。
Boot Loader 的设计与实现是一个非常复杂的过程。
如果不能从串口收到那激动人心的uncompressing linux.................. done, booting the kernel 内核启动信息,恐怕谁也不能说:嗨,我的boot loader 已经成功地转起来了!。