嵌入式Linux系统上的快速启动技术研究.docx

上传人:b****5 文档编号:5021734 上传时间:2022-12-12 格式:DOCX 页数:29 大小:890.07KB
下载 相关 举报
嵌入式Linux系统上的快速启动技术研究.docx_第1页
第1页 / 共29页
嵌入式Linux系统上的快速启动技术研究.docx_第2页
第2页 / 共29页
嵌入式Linux系统上的快速启动技术研究.docx_第3页
第3页 / 共29页
嵌入式Linux系统上的快速启动技术研究.docx_第4页
第4页 / 共29页
嵌入式Linux系统上的快速启动技术研究.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

嵌入式Linux系统上的快速启动技术研究.docx

《嵌入式Linux系统上的快速启动技术研究.docx》由会员分享,可在线阅读,更多相关《嵌入式Linux系统上的快速启动技术研究.docx(29页珍藏版)》请在冰豆网上搜索。

嵌入式Linux系统上的快速启动技术研究.docx

嵌入式Linux系统上的快速启动技术研究

武汉工业学院毕业论文

 

论文题目:

嵌入式Linux系统上的快速启动技术研究

 

姓名向婷

学号071203223

院(系)数理科学系

专业电子信息科学与技术

指导老师文国知

 

2011年5月29日

摘要

本文对嵌入式Linux系统的启动过程进行了分析,将嵌入式Linux的启动分成了三大部分(硬件启动部分、内核启动部分和用户启动部分)。

为了满足嵌入式Linux系统的快速启动的要求,针对广泛的应用提出了kexec(kernelexecution)和内核定制的方法。

kexec是针对于x86平台提出的,可以在一个内核运行时直接加载内核达到快速重启的目的。

内核的定制是对具有针对性的嵌入式平台提出的,可以根据具体的实物要求来定制内核以达到快速启动的目的。

kexec是Linux关于x86平台的一个补丁,这个补丁可以直接在官网下载安装,在终端输出相应的命令可以越过硬件启动部分直接加载内核。

内核的定制是将Linux内核进行裁剪,取消不需要的功能并增加一些需要的功能,得到最佳的内核。

通过实验验证,这两种方法都对嵌入式Linux的减少了启动时间。

关键词:

嵌入式Linux内核定制kexec启动过程

Abstract

Thisarticleanalyzes theembedded Linux system bootprocessanddividestheembeddedLinuxsystembootprocesstothreeparts(hardwarestartpart,kernelstartpartanduserstartpart).Inordertomeettherequirementofthefaststartforembeddedlinuxsystem,Thearticleproposesthemethodsofkexecandcustomingkernelforwidelyused.Kexecisfortheplatofx86,thismethodallows“live”bootingofanewkernel“over”thecurrentlyrunningkerneltomeetthegoaloffastreboot.Costomingkernelisfortheplatsforspecificfeatures,thismethodistocostomkernelaccordingtospecific servicestoachievethepurposeofquickstart.Kexecisalinuxpatchfortheplatofx86.Thepatchwouldbedownloadedandinstalledfromtheofficialnet.Affterinstallingthepatch,wecanputintheorderinterminaltoloadkernel.CostomkernelistocuttheLinuxcore.Thisistocancelthefeaturesnoneedandincreasethefeaturesweneed.ThetwomethodshavebeenexperimentedtoconfirmreductingthetimeforembeddedLinuxsystembooting.

Keywords:

EmbeddedlinuxCostomkernelkexecbooting

目录

摘要I

AbstractII

前言1

1.嵌入式Linux的介绍3

1.1嵌入式系统3

1.1.1嵌入式系统的定义3

1.1.2嵌入式系统的组成3

1.1.3嵌入式系统的特点4

1.2Linux操作系统5

1.2.1Linux的介绍5

1.1.2Linux的特点5

2.本课题研究的平台和工具6

2.1硬件工具6

2.2软件工具6

3.arm-linux的启动过程分析7

3.1bootloader启动过程8

3.1.1Bootloader的概念和作用8

3.1.2Bootloader启动流程8

3.2Linux启动过程分析10

4.嵌入式Linux系统快速启动设计12

4.1Kexec和快速重启12

4.1.1Kexec介绍12

4.1.2Kexec的原理12

4.1.3kexec的实现14

4.2内核定制和快速启动16

4.2.1内核定制的介绍16

4.2.2Linux内核的文件结构16

4.2.3Linux内核的配置系统17

4.2.4内核定制的实现18

结束语26

致谢27

参考文献28

前言

20世纪70年代微处理器的出现使计算机出现了历史性的变化。

以微处理器为核心的微型计算机嵌入到一个对象体系中,实现对对象体系的智能化控制。

为了区别与原有的通用计算机系统,把嵌入到对象体系中、实现对象体系智能化控制的计算机,称为嵌入式计算机系统。

嵌入式计算机系统的技术要求是对象的智能化控制能力;技术发展的方向是与对象系统密切相关的嵌入性能、控制能力与控制的可靠性。

嵌入式系统已广泛应用于信息家电、移动通信、手持信息设备以及工业控制等领域。

 

图0-1嵌入式系统应用领域

嵌入式系统作为以应用为中心的专用计算机系统,需要在启动速度、实时性、系统尺寸、电源管理等方面进行优化。

Linux凭借其优良特性广泛应用于嵌入式系统。

但是,作为原本为PC机设计的操作系统,设计者开始考虑到嵌入式应用中硬件的限制以及对启动速度的要求,而嵌入式产品使用者又对系统的开机速度比较敏感,这样就产生了对于提高嵌入式Linux系统启动速度的需求。

目前,对加快嵌入式Linux启动速度的研究主要在一下3个方面[1]:

Ø待机技术。

关机时,系统首先把CPU、I/O寄存器及其它需要保存到RAM,然后关闭除RAM及其它必要器件外的所有设备;下次启动时,系统根据RAM中保存的内容迅速恢复到关机前的状态,但由于待机时仍然给RAM等必要器件供电,导致功耗较高。

Ø休眠技术。

开机时,系统首先启动bootloader,对休眠所需的器件进行初始化,然后把快照映像从闪存复制到RAM,不经过正常启动流程,实现系统的快速启动。

这种技术既能加快启动速度,又能克服待机技术功耗高的缺点,但需要把操作系统和应用程序完成启动的寄存器和RAM信息制作成快照映像,制作快照映像的方法是主要的技术难点。

Ø常规启动优化。

一般把Linux正常启动过程分为固件初始化、内核初始化和用户应用层初始化,针对其中比较耗时的部分进行优化。

本文将采用常规启动优化方法,对启动过程进行研究。

其中提供了两种方法,一种是kexec的方法,另一种是内核定制的方法。

从本质上讲,Kexec是kexec是一个让您可以重新启动到一个新Linux内核的快速重新引导功能部件。

Kexec目前只能用在x86的32位平台上,这个实验就在pc机上实践。

内核定制在此主要是针对驱动程序,在内核进行编译的时候,只将一些需要的驱动程序编译进内核或者将一些以模块的形式编译进内核,这样减少了系统启动时设备搜索和驱动安装的时间。

内核定制的实验使用arm9开发板实现的。

1.嵌入式Linux的介绍

嵌入式系统是近年来随着电子芯片技术的发展而迅速普及的,现已广泛应用到工业、军事、通信、运输、金融、农业、医疗、气象等众多领域。

美国著名的未来学家尼葛庞帝曾预言,嵌入式系统是继PC和Internet之后最伟大的发明。

如今该领域的发展验证了这个预言的正确性。

现在嵌入式系统正处于高速发展阶段。

Linux系统是嵌入式操作系统之一,它的源代码面向广大的用户开放,为技术人员提供了方便,并得到广泛的应用。

1.1嵌入式系统

1.1.1嵌入式系统的定义

根据电气工程师协会(IEEE)的定义,嵌入式系统(EmbeddedSystem)是用来控制、监视或者辅助装置、机器和运行的装置。

一般认为嵌入式系统是以应用为中心,以计算机技术为基础,其软/硬件可裁剪,可满足应用系统对功能、可靠性、成本、体积、功能的严格要求的专用计算机系统。

1.1.2嵌入式系统的组成

嵌入式系统一般由嵌入式计算机和执行部件组成,如图1-1所示。

其中嵌入式计算机是整个嵌入式系统的核心,主要包括硬件层、中间层、系统软件层以及应用软件层;执行部件则接收嵌入式计算机系统发出的控制指令,执行规定的操作,也被称为被控对象[2]。

图1-1嵌入式操作系统

Ø硬件层主要包含了嵌入式系统中必要的硬件设备,如嵌入式微处理器、存储器(SDRAM、ROM等)、设备IO接口等。

Ø嵌入式微处理器是嵌入式系统硬件层的核心,主要负责对信息的运算处理,相当于通用计算机中的中央处理器。

Ø存储器则用来存储数据和代码。

嵌入式系统的存储器一般包括Cache、主存和辅助存储器。

存储器结构如图1-2所示。

图1-2嵌入式系统存储系统

Ø设备IO接口提供了系统与内部或者外部的硬件接口,如通过IO实现内部A/D转换,或者通过IO与外部的存储器连接进行存储扩展。

1.中间层

中间层为硬件层和系统软件层之间的部分,有时也称为硬件抽象层(HardwareAbstractLayer,HAL)或者板级支持包(BoardSupportPackage,BSP)。

对于上层的软件(比如操作系统),中间层提供了操作和控制硬件的方法和规则。

而对于底层硬件,中间层主要负责相关硬件设备的驱动等。

2.系统软件层

系统软件层由实时多个任务操作系统(Real-timeOperationSystem,RTOS)、文件系统、图形用户界面接口(GraphicUserInterface,GUI)、网络系统及通用组件模块组成[3]。

其中实时多任务操作系统(RTOS)是整个嵌入式系统开发的软件基础和平台。

3.应用软件层

应用软件层则是开发设计人员在系统软件层得基础之上,根据需要实现的功能,结合系统硬件环境所开发的软件。

1.1.3嵌入式系统的特点

作为专用计算机系统,嵌入式系统同PC系统相比具有以下特点[3]:

Ø嵌入式系统功耗低、体积小、专用性强。

嵌入式系统与PC系统最大不同就是嵌入式CPU大多工作在为特定用户群设计的系统中,能够把PC系统中许多由板卡完成的任务集成在芯片内部,从而使系统设计趋于小型化。

Ø嵌入式系统中的硬件和软件都经过精心设计,系统精简,其操作系统一般和应用软件集成在一起。

Ø嵌入式系统中的软件一般都固化在存储器芯片或单片机芯片中,以提高执行速度和系统可靠性。

Ø嵌入式系统开发需要专门的开发工具和开发环境。

1.2Linux操作系统

1.2.1Linux的介绍

早期的嵌入式系统很多都不用操作系统,它们只是为了实现某些特定的功能,使用一个简单的循环控制对外界的控制请求进行处理。

但是当系统越来越复杂,利用的范围越来越广泛时,缺少操作系统就成为了最大的一个缺点,因为每添加一项新功能都可能需要从头开始设计,否则只能增加开发成本和系统复杂度。

从20世纪80年代开始,出现了各种各样的商业用操作系统。

在所有的操作系统中,Linux是发展最快的、应用最广泛的系统之一。

Linux是最受欢迎的自由电脑操作系统内核。

它是一个用C语言和汇编语言写成,符合POSIX标准的类Unix操作系统。

Linux的基本思想有两点:

第一,一切都是文件;第二,每个软件都有确定的用途。

其中第一条详细来讲就是系统中的所有都归结为一个文件,包括命令、硬件和软件设备、操作系统、进程等等对于操作系统内核而言,都被视为拥有各自特性或类型的文件。

1.1.2Linux的特点

Linux的特点[3]如下:

ØLinux系统具有层次结构且内核完全开放。

Linux是有很多体积小且性能高的微内核系统组成的。

在内核代码完全开放的前提下,不同领域和不同层次的用户可以根据应用需求方便地对内核进行改造,低成本地设计和开发出满足需要的嵌入式系统。

Ø强大的网络支持功能。

Linux诞生于Internet时代并具有Unix的特性,保证了它支持所有的标准Internet协议,并且可以利用Linux的网络协议栈将其开发成为嵌入式的TCP/IP网格协议栈。

此外,Linux还支持Ext2、FAT16、FAT32、Romfs等文件系统,为开发嵌入式系统应用打下了很好的基础。

ØLinux具备一整套工具链,自行建立嵌入式系统的开发环境和交叉运行环境,可以跨越嵌入式系统开发中仿真工具的障碍。

Linux也符合IEEEPOSIX.1标准,使应用程序具有较好的可移植性。

ØLinux具有广泛的硬件支持特性。

无论是RISC还是CISC,32位还是64位等各种处理平台,Linux都能很好地运行。

2.本课题研究的平台和工具

2.1硬件工具

1、PC电脑

平时我们用的电脑为典型的X86平台。

2、典型嵌入式平台

本文选用的是广州友善之臂计算机科技有限公司生产的Mini2440开发板。

Mini2440采用SamsungS3C2440为微处理器,主频400Hz。

SDRAM为64M,时钟频率高达100MHz。

NandFlash为256M/1GB。

NorFlash为2M。

2.2软件工具

1、Linux系统

为实验方便并未直接在PC机上装Linux系统,而是在PC电脑上安装虚拟机VmwareWorkstation,然后再在虚拟机上安装的Fedora14。

2、Linux内核

用的Linux2.6.32版本的内核。

在ftp:

//ftp.kernel.org/pub/有很多版本的内核和补丁可供下载。

3、交叉编译工具链

使用的友善之臂提供的Arm-linux-gcc-4.3.2交叉编译工具链。

可以到

4、引导加载程序

在本课题中使用的是友善之臂提供的supervivi的bootloader。

5、kexec-tools-2.0.0.tar.bz2

Kexec技术的工具包。

Kexec可以在重启时直接加载另一个内核,缩短启动时间。

我们可以在http:

//www.kernel.org/pub/linux/

kernel/people/horms/kexec-tools/上下载。

6、root_qtopia

在本课题中使用的是友善之臂提供的qt制作的图像界面系统root_qtopia-20100118

7、根文件制作工具

在本课题中使用的是友善之臂提供根文件制作工具mkyaffs2image

8、串口终端

在本课题中使用的是友善之臂提供的串口终端DWN。

9、烧写工具

在官网上下载的H-JTAGV1.0Release的烧写工具。

3.arm-linux的启动过程分析

嵌入式系统平台是一钟软硬件结合的平台。

一个嵌入式Linux系统从软件角度看可以分为四个部分[4]:

引导加载程序(Bootloader),Linux内核,文件系统,应用程序。

如图3-1所示。

图3-1嵌入式Linux系统软件架构

Ø引导加载程序(Bootloader):

系统启动或复位以后执行的第一段代码,它主要用来初始化处理器及外设,然后调用Linux内核。

ØLinux内核:

主要由五个子系统组成:

进程调度、内存管理、虚拟文件系统、网络接口、进程间通信,如图3-2所示。

图3-2Linux内核结构

Ø文件系统:

包括根文件系统和建立于Flash内存设备上的文件系统。

通常用ramdisk或yaffs来作为文件系统。

Ø应用程序:

它可以说是嵌入式系统的“灵魂”,所实现的功能通常就是设计该嵌入式系统所要达到的目标。

如果没有应用程序的支持,任何硬件上设计精良的嵌入式系统都没有实用意义。

3.1bootloader启动过程

Bootloader在运行过程中虽然具有初始化系统和执行用户输入的命令等作用,但它最根本的功能就是为了启动Linux内核[5]。

3.1.1Bootloader的概念和作用

Bootloader是嵌入式系统的引导加载程序,它是系统上电后运行的第一段程序,其作用类似于PC机上的BIOS。

在完成对系统的初始化任务之后,它会将非易失性存储器(通常是Flash或DOC等)中的Linux内核拷贝到RAM中去,然后跳转到内核的第一条指令处继续执行,从而启动Linux内核。

由此可见,Bootloader和Linux内核有着密不可分的联系,要想清楚的了解Linux内核的启动过程,我们必须先得认识Bootloader的执行过程,这样才能对嵌入式系统的整个启动过程有清晰的掌握。

通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。

因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。

3.1.2Bootloader启动流程

当电源打开时,系统会去执行ROM(较多的是Flash)里面的Bootloader启动代码。

由于Bootloader的实现依赖与CPU体系结构,大多数Bootloader都分为stage1和stage2两大部分。

依赖于CPU体系结构的代码通常都放在stage1中,而且通常都通过汇编语言来实现,以达到短小精悍的目的;而stage2则通常用C语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和移植性。

本实验使用的bootloader即U-Boot的stage1阶段的启动过程如图3-3所示。

stage1阶段主要先是设置个模式程序异常向量表,初始化处理器相关的关键寄存器以及系统内存,为stage2阶段的执行以及随后的内核执行准备好基本的硬件环境。

然后将stage2阶段的代码以及中断向量表复制到RAM中,并且复制建立stage2阶段使用的堆栈,为stage2部分执行时获得更快的速度。

最后跳转到stage2阶段的入口点,即跳转到Bootloader的stage2执行。

在ARM系统中,可以通过修改PC寄存器为合适的地址来实现[6]。

图3-3U-Boot中stage1工作流程

stage2阶段一般包括:

初始化Flash器件、检测系统内存映射、初始化网络设备、进入命令循环,接收用户从串口发送的命令然后进行相应的处理,加载操作系统内核。

图3-4给出了U-Boot的stage1和stage2在Flash和RAM中的分配。

图3-4U-Boot内存映射

3.2Linux启动过程分析

Linux内核在不同处理器体系结构上的启动代码完全不同,但是启动流程基本是一致的[7]。

以下主要从ARM体系为例来分析Linux内核初始化过程。

Ø解压缩内核映像:

大多数嵌入式系统存储空间容量比较小,它们编译后的内核映像都是压缩存放的,所以进入内核第一步首先是解压缩内核映像。

在ARM体系结构上Linux内核代码的入口在arch/arm/boot/compress/head.S文件中,文件的start标号是代码的入口点,之前定义了许多要用的参数。

在start标号开始时有一段启动代码,开启MMU和Cache,之后便是调用decompress_kernel()进行内核的解压缩了。

Ø进入内核代码:

进入Linux内核时执行的第一个文件是arch/arm/kernel下的head-($PROCESSOR).S文件,processor代表的是该cpu的类型。

之后再进行一系列的初始化工作,直到进入start_kernel(),如图3-5是这个阶段的一个大体流程图。

图3-5Linux内核启动流程

Ø启动init内核进程:

在start_kernel()函数最后调用了rest_init()函数,此函数用来创建内核init进程,执行的是main.c中的init()函数,设置各种驱动。

Ø根文件系统初始化:

Linux内核启动完毕后,首先就是要创建根文件系统。

Linux需要加载根文件系统。

期根文件系统可以分为两类:

虚拟根文件系统和真实根文件系统。

在内核代码mnt_init()函数中调用了init_roofs()函数注册根文件系统,然后使用init_mount_tree()函数挂载根文件系统。

这个根文件系统是临时的,之后我们将挂载虚拟文件系统。

虚拟根文件系统是为了便于加载适当的驱动程序,最终会被释放并挂载真实的根文件系统。

Ø内核交出权限:

Linux内核通过调用sys_fork()函数,之后再调用sys_execve()函数创建一个新的进程。

系统启动后,核心态创建名为init的第一个用户进程。

Øinit进程:

Linux系统启动进入用户态后,首先启动/sbin/init程序,也可以通过设置内核参数“init=”设置第一个启动的程序。

init进程主要任务是按照inittab配置文件提供的信息创建进程,由于执行初始化的进程都是由init创建的,所以init进程也称为系统初始化进程。

4.嵌入式Linux系统快速启动设计

本课题研究的系统启动是指从用户执行上电/复位操作,到系统开始提供用户可接收的服务水平所需要的这个过程。

这个过程可以大致的分为如下几大块:

硬件、内核、用户空间[8]。

4.1Kexec和快速重启

4.1.1Kexec介绍

对于硬件阶段,目标板和Bootloader一旦确定了就无法改变它的运行时间了。

我们可以选用速度较快的Bootloader。

为了缩短启动时间,我们可以在重启的时候跳过这个步骤,典型的实现有Kexec。

Kexec是一个可用于x86平台上Linux内核的功能部件[9]。

使用kexec,可以直接重新启动到另一个内核(也可以是同一个内核),不再必须通过固件和引导装载程序阶段。

跳过序列中最长的部分大大减少了重新启动时间。

4.1.2Kexec的原理

在kexec技术中,将新内核覆盖旧内核的工作分成了三个阶段来完成的:

1)将新内核拷贝到内核中。

2)将这个内核映像移到动态内核内存中。

3)将这个映像拷贝到真正的目标位置(覆盖当前内核),然后启动新内核。

前两个阶段在内核的“装载”期间完成。

第一个任务是解释内核映像文件的内容。

Kexec-tools已经被编译,因此,理论上您可以装载并引导任何(甚至是非-Linux的)内核。

当前,只能引导到elf32格式的内核映像。

这个文件被解析,内核“段(segments)”被装载到缓存中。

这些段根据代码的自然类型进行分类。

用于追踪这些段的结构体被称为 kexec_segment ,是一个相当简单的结构体:

structkexec_segment{

void*buf;

size_tbufsz;

void*mem;

size_tmemsz;

};

结构体的前两个元素指向用户空间缓存和它的大小,接下来两个元素指明了段的最终目标位置和它的大小。

一旦特定内核文件格式的(kernel-fileformat-specific)模块将映像装载到用户内存,映像就会被 sys_kexec 系统调用转移到动态内核内存。

这个系统调用给每个从用户空间传递而来的段分配动态内核页,并将段拷

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1