《ARM Linux启动过程分析.docx》由会员分享,可在线阅读,更多相关《ARM Linux启动过程分析.docx(6页珍藏版)》请在优知文库上搜索。
1、ARM1.inUX启动过程分析赵楠本章学习目标: 了解1.inUX结构及平台属性 f解boot1.oader的相关知识 熟悉并掌握启动过程摘要:从嵌入式系统到超级效劳站,嵌入式1.inux的可移殖性使得我们可以在各种电产品上看到它的身影.1.inux是一个完整通用的UniX类分布式操作系统,它的结构紧凑、动能强、效率高、可移植性好且在Interne1.上可自由取用.而于不同体系结构的处理落来说1.inUX的启动过程也有所不同.本文以S3C241OARM处理器为例,详细分析了系统上电后boot1.oader的执行流程及RM1.inUX的启动过程.关键词:ARM1.inuxboot1.oader启
2、动过程Abstract:fromthee三beddcdsystentosuperservicestation,embedded1.inuxportabi1.itya1.1.owsUStovariouse1.ectronicproductsintheforofseeingit.1.inuxisacomp1.etegenera1.Unixc1.assdistributedoperatingsysten.it*sstructureconpncttthefunctionisstrong,highefficiency,goodportabi1.ityandintheInternetcanbefreeto
3、take.Eordifferentsystemstructureoftheprocessoristhestartofthe1.inuxprocessisa1.sodifferent.BasedontheARMprocessorS3C21IOasanexamp1.e,thepaperana1.ysessystemaftertheexecutionf1.owofe1.ectricboot1.oaderandRM1.inuxstart-upprocess.Keywords:ARM1.inuxboot1.oaderstart-upprocess1 .引1.inux最初是由瑞典林尔辛基大学的学生1.in
4、usTorVi1.1.dS在1991年开发出来的,之后在GNU的支持下,1.inux来得了巨大的开展.虽然1.inux在桌面PC机上的普及程度远不及微软的Windows操作系统,但它的开展速度之快、用户数;及的H益增笠,也是微软所不能轻视的。从嵌入式系统到邮级效劳站,1.inux已获得广泛的应用。1.inux是一个完整通用的UniX类分布式操作系统,它的结构紧凑、功能强、效率高、可移植性好且在Internet上可自由取用.1.inux和UniX操作系统一样,操作系统的主要功能集中在内核,内核中包含进程管理、文件管理、设备管理和网络管埋等同部.近些年来1.inux在嵌入式领域的迅猛开展,史魁给1
5、.inux注入了痂的活力.1.1 内核结构及平台相关性本文以分析的内核版本为2.6.9.当我们使用tar命令将IinUX-2.6.9.tar.bz2解开时,内核源代码被放到了IinUX-2.6.9/目录中。1.inux内核各功能文件分别存放在IinUX-2.6.9/目录下的相应子目录中。1.inux操作系统可以工作在多种不同硬件平台上,如80n86CPI系列(80386以上)、SUNSParC64和ara26等.为了让1.inUX表达优良的可移植性,1.inux内核代码针对不同的便件平价包含有对应的启动和初始化程序.这些程序处于HrCh/子目录中,用户完全可以根据自己的需要,从内核代码中各取所
6、需,即时编译和更换系统内核,这也是1.inUX操作系统获得世界各地网络宠好者普遍支持的主要原因。鉴于绝大局部1.inUX应用于In1.e1.80x86系列平台,所以本文也仅限对1.inUX在80x86系列平台的启动过程进行分析。本文所要探讨的启动程序位于archi386boo1.目录.系统的启动过程主要由bootsect,s、setup.s和head,s等3个汇编程序完成,其中boot1.oader是系统启动或宓位以后执行的第一段代码,它主要用来初始化处理器及外设,然后两用1.inUX内核.1.inux内核在完成系统的初始化之后需要挂我某个文件系统做为根文件系统(Root),根文件系统是1.i
7、nux系统的核心组成局部,它可以做为1.inUX系统中文件和数据的存储区域,通常它还包括系统配置文件和运行应用软件所需要的库。应用程序可以说是嵌入式系统的“灵魂*.它所实现的功能通常就是设计该嵌入式系统所要到达的目标.如果没有应用程序的支持.任何硬件上设计精良的嵌入式系统都没有实用意义.从以上分析我们可以百出boot1.oader和1.inux内核在嵌入式系统中的关系和作用.BOotIoader在运行过程中虽然具有初始化系统和执行用户给入的命令等作用,但它最根本的功能就是为了启动1.inux内核.在嵌入式系统开发的过程中,很大一同制精力都是花在bo。I1.oader和1.inux内核的开发或移
8、植上,如果能清楚的了解boot1.oader执行流程和1.inUX的启动过程,将有助于明确开发过程中所衡的工作,从而加速嵌入式系统的开发过程.而这正是本文的所要研究的内容.3. Bt1.oader3.1 BOOtIOader的概念和作用BootIoader是嵌入式系统的引导加载程序,它是系统上电后运行的第一段程序,其作用类似于PC机上的BIOS,在完成对系统的初始化任务之后,它会将非易失性存储器(通常是FmSh或IK)C等)中的1.inux内核拷贝到RAM中去,然后跳转到内核的第条指令处维续执行,从而启动1.inUX内核。由此可见,boot1.oader和1.inux内核有料密不可分的联系,鬟
9、想清楚的了解1.inUX内核的启动过程.我们必须先得认识bout1.oader的执行过程这样才能对嵌入式系统的整个月过程行清晰的家旌.3.2 BOOt1.Oader的执行过程不同的处理器上电或发位后执行的第一条指令地址并不相同,对于ARM处理器来说,该地址为0x00000000.对于一般的嵌入式系统,通常把F1.ash等非历失性存储港映射到这个地址处,而buo1.IOadCr就位于该才饰器的最前端,所以系统上电或复位后执行的第一段程序使是boot1.oader,而因为存储boot1.oader的存储涔不同.boot1oader的执行过程也并不相同,下面将具体分析.嵌入式系统中广泛采用的非易失性
10、存储器通用.是F1.ash,而F1.ash又分为NorF1.ash和NandF1.aSh两种.它们之间的不同在于:NorF1.ash支持芯片内执行(XIP,eXecutcInP1.ace),这样代码可以在FIaSh上直接执行而不必捋贝到RAM中去执行.而NandF1.aSh并不支持XIP,所以要想执行NandF1.ash上的代码,必须先招兵拷贝到RAM中去,候后跳到RAM中去执行.实际应用中的boot1.oader根据所需功能的不同可以设计得很复杂,除完成根木的初始化系统和调用1.inUX内核等根木任务外,还可以执行很笠用户输入的命令,比方设前1.inUX启动参数,给F1.ash分区等:也UJ
11、以设计得很简单,只完成农根本的功能,他为了能到达启动1.inUX内核的目的,所有的boot1.oader都必须具备以下功旎:1 .初始化RAM因为1.inux内核一般都会在RAM中运行,所以在调用1.inux内核之前bo。I1.oader必须设置和初始化RAM,为调用1.inUX内核整好准备,初始化RAM的任务包括设置CP1.的控制存放器参数,以便能正常使用RAM以及检测RAV大小等.2 .初始化串口申口在1.inUX的启动过程中有芍非常小要的作用,它是1.inUX内核和用户交互的方式之1.1.inux在启动过程中可以将信息通过串口输出,这样便可清楚的了解1.inUX的启动过程。虽然它并不足b
12、oo1.1.oader必须要完成的工作.但是通过串口娥出信息是调试boot1.oader和1.inUX内核的强有力的工具,所以一般的boot1.oader布会在执行过程中初始化一个中”做为两试端1.3 .检测处理号类型Bu。IIUader在调用1.inUX内核前必须检测系统的处理器类型,并将其保存到某个常量中提供应1.inUX内核.1.inux内核在启动过程中会根据该处理器类型调用相应的初始化程序.4. ”1.inUXjB动XBoOtIoader在执行过程中必须设出和初始化1.inux的内核启动参数,目前传递启动参数主要枭用两种方式:即通过structparamstruct和SIrUCIIaR
13、(标记列我,1.aggedIis1.)两种结构传递structparam_S1.rUC1.是一种比较老的参数传递方式,在2.4版本以前的内核中使用较多.从2.4版本以后1.inux内核根本上采用标记列衣的方式.但为了保持和以前版本的兼容性,它仍支持structParam_StrUCt参数传递方式,只不过在内核启动过程中它将被转换成标记列表方式。标记列表方式是林比较新的参数传递方式,它必须以ATAG.CORE开始,并以ATAGNoNE结尾,中间可以根据需要参加其他列表.1.inux内核在启动过程中会根描该启动参数进行相应的初始化工作.5. 调用1.inuX内核映像BOOtIOader完成的最后一
14、项工作便是调用1.inUX内核,如果1.inUX内核存放在F1.ash,并且可宜接在上面运行(这里的F1.ash指NorF1.ash),那么可直接跳转到内核中去执行.但由于在P1.ash中执行代码会有种种限制,而且速度也远不及RAM快,所以-般的嵌入式系统都是符QnUX内核拷贝到RAM中,然后跳转到RAM中去执行。不管哪衿情况,在跳到1.inux内核执行之前CUP的存放器必须湎足以下条件:r0=0,r1.=处理器类型.r2=标记列表在RAM中的地址.4 .启动过程分析主要对buo1.sec1.s、setup,s和head,s的工作机理做了较为详细的阐述.4.1 bootsect模块分析boot
15、sect,s代码是磁盘引导块程序,驻留在引导盘的引导扇区(0道,0磁头,第1扇区在PC加电ROMBIOS自检后,boo1.sect.s由BIOS自动加我到内存0x7Coo处,然后将自己移到内存0x90000处,图2代码显示了boo1.scc1.s的移动过程,其中#BOOTSEG为0x7CoO.JiINITSEG为0x9000,接卜来,程序利用BIoS中断,INT0x13招SetUP模块从磁盘第2个扇区开始读到0x90200开始处.共读4个扇区.如果读出描误,则CF标志置位,程序复位动器.并受试.加段SetUP模块后,程序利用中断取感盘驱动器参数,并将中断返网的每磁道南区数保存在变Iftsect
16、ors中,然后程序将SyStem模块加我到内存OX1.oOoO处。加我SySIem模块期间,显示“1.oadingSySIe信息.为了提高加载速度,只要可能,就每次加成整条横道的数据。从任盘读取一次数据后,程序就比较当前所波段是否就是系统数据末端所处的段SENDSEG),如果不是.就跳转至Ok1.read标号处继续读数据。M后,程序向状驱控制卡的猴动潜门0x3f2写0.关闭软驱电动机.程序运行jmpiO,SET1.PSEG,跳转到0x9020:0000处,CpU开始执行Seu1.P模块。1.UVg.QhDiJISiCJavdo,xxxova.三5I!U1ST11Vf孱丫工b,0对subsisubdrXiSTOWIf1.2bootxcct移动代以4.2 setup模块分析SetUP.s首先利用RoMBIoS中断读取机器系统参数(光标位黄、扩展内存数、硬也参数去等),并