版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、蔼ARM L斑inux启翱动过程分析赵楠搬 本章学矮习目标: 拔 败了解Linux结构及办平台属性昂了解 bo拔otloa捌der的相爸关知识 阿 靶 百 巴 矮 百熟悉并掌握挨启动过程澳摘 要: 八从嵌入式系凹统到超级服靶务站,胺嵌入式 L翱inux 肮的可移植性巴使得我们可案以在各种电败子产品上看哀到它的身影碍。氨Linux板 是一个完唉整通用的U罢nix 类袄分布式操作熬系统,它的佰结构紧凑、背功能强、效矮率高、可移爱植性好且在Inter佰net 上斑可自由取用般。阿对于不同体捌系结构的处跋理器来说L昂inux的按启动过程也罢有所不同。办本文以S3暗C2410暗 ARM处埃理器为例,班详
2、细分析了艾系统上电后百 boot巴loade叭r的执行流拔程及 AR胺M Lin翱ux的启动柏过程。俺8。背关键词:A碍RM Li懊nux b敖ootlo挨ader 盎启动过程佰Abstr傲act: 翱from 板the e伴mbedd蔼ed sy百stem 埃to su奥per s半ervic百e sta盎tion,昂 embe哎dded 胺Linux斑 port昂abili爱ty al巴lows 捌us to般 vari拜ous e昂lectr八onic 癌produ氨cts i扒n the班 form懊 of s笆eeing懊 it. 啊Linux奥 i八s a c佰omple癌te g
3、e阿neral靶 Unix爸 clas笆s dis白tribu拌ted o爱perat凹ing s耙ystem唉, it熬s str伴uctur颁e com艾pact,捌 the 皑funct摆ion i跋s str败ong, 芭high 笆effic傲iency芭, goo跋d por坝tabil翱ity a瓣nd in靶 the 岸Inter昂net c傲an be白 free绊 to t蔼ake. 半For d斑iffer暗ent s胺ystem挨 stru拔cture氨 of t颁he pr半ocess巴or is班 the 蔼start隘 of t敖he Li癌nux p百roces
4、盎s is 扳also 安diffe白rent.俺 Base办d on 熬the A半RM pr搬ocess佰or S3芭C2410翱 as a隘n exa巴mple,坝 the 碍paper埃 anal埃yses 叭syste跋m aft班er th哎e exe傲cutio绊n flo矮w of 拜elect凹ric b般ootlo笆ader 懊and A癌RM Li翱nux s邦tart-芭up pr版ocess埃.颁S。哀Keywo邦rds: 碍ARM L奥inux 挨bootl摆oader办 star罢t-up 百proce爱ss氨O。坝1. 引 背言盎 Linux爸 最初是由拌瑞典赫
5、尔辛安基大学的学把生 Lin懊us To皑rvald靶s在199白1 年开发摆出来的,之哎后在 GN挨U的支持下把,Linu碍x 获得了瓣巨大的发展。虽然 L癌inux 瓣在桌面 P澳C 机上的熬普及程度远蔼不及微软的半 Wind摆ows 操版作系统,但挨它的发展速绊度之快、用昂户数量的日颁益增多,也碍是微软所不傲能轻视的。哀从嵌入式系统到超级服哎务站,Li跋nux 已碍获得广泛的跋应用。Li傲nux 是碍一个完整通叭用的Uni邦x 类分布啊式操作系统伴,它的结构耙紧凑、功能熬强、效率高碍、可移植性坝好且在In俺terne唉t 上可自熬由取用。L吧inux 颁和Unix肮 操作系统耙一样,操作
6、埃系统的主要伴功能集中在艾内核,内核按中包含进程案管理、文件熬管理、设备皑管理和网络袄管理等部分癌。叭近些年来 肮Linux哀 在嵌入式安领域的迅猛白发展,更是般给 Lin俺ux 注入胺了新的活力吧。绊2.安1 内核结唉构及平台相傲关性阿Q。疤 本凹文以分析的爱内核版本为爸2.6.9把。当我们使敖用tar 敖命令将li巴nux-2败.6.9.扳tar.b翱z2 解开疤时,内核源摆代码被放到奥了linu鞍x-2.6爱.9/目录俺中。Linux 内核笆各功能文件唉分别存放在俺linux柏-2.6.拜9/ 目录埃下的相应子瓣目录中。L哀inux 暗操作系统可懊以工作在多傲种不同硬件吧平台上,如哎80
7、 x86八CPU 系稗列(803唉86 以上颁)、SUN版 spar胺c64 和按arm26埃 等。为了按让Linu澳x 体现优皑良的可移植袄性,Lin埃ux 内核疤代码针对不佰同的硬件平般台包含有对拔应的启动和吧初始化程序熬。这些程序哀处于arc班h/子目录凹中。用户完癌全可以根据拔自己的需要翱,从内核代安码中各取所澳需,即时编瓣译和更换系坝统内核,这靶也是Lin班ux 操作霸系统获得世艾界各地网络板爱好者普遍瓣支持的主要胺原因。鉴于巴绝大部分Linux 柏应用于In八tel 8肮0 x86 班系列平台,板所以本文也爱仅限对Li班nux在8哀0 x86 背系列平台的捌启动过程进般行分析。本百
8、文所要探讨板的启动程序安位于arc挨h/i38霸6/boo伴t/ 目录澳,系统的启挨动过程主要耙由boot般sect.拔s、set搬up.s 巴和head扳.s 等3癌 个汇编程把序完成。拌其中 bo扒otloa啊der是系啊统启动或复巴位以后执行疤的第一段代奥码,它主要佰用来初始化奥处理器及外佰设,然后调百用 Lin班ux 内核艾。Linu隘x 内核在安完成系统的班初始化之后按需要挂载某捌个文件系统澳做为根文件柏系统(Ro傲ot Fi疤lesys耙tem)。板根文件系统半是 Lin颁ux 系统癌的核心组成奥部分,它可懊以做为Li办nux 系挨统中文件和叭数据的存储罢区域,通常昂它还包括系背统
9、配置文件案和运行应用稗软件所需要摆的库。应用案程序可以说碍是嵌入式系巴统的“灵魂坝”,它所实跋现的功能通岸常就是设计稗该嵌入式系翱统所要达到扮的目标。如摆果没有应用按程序的支持啊,任何硬件败上设计精良靶的嵌入式系昂统都没有实拜用意义。半 版从以上分析稗我们可以看斑出 boo佰tload板er 和 百Linux背 内核在嵌敖入式系统中的关系和作啊用。Boo扒tload爱er在运行埃过程中虽然伴具有初始化芭系统和执行班用户输入的命令等作用唉,但它最根稗本的功能就芭是为了启动盎 Linu傲x 内核。袄在嵌入式系霸统开发的过爸程中,很大柏一部分精力搬都是花在b袄ootlo班ader 办和 Lin挨ux
10、 内核邦的开发或移般植上。如果凹能清楚的了扮解 boo拜tload拔er 执行摆流程和 L熬inux的半启动过程,啊将有助于明邦确开发过程中所需的工爸作,从而加奥速嵌入式系挨统的开发过跋程。而这正八是本文的所坝要研究的内班容。柏3霸. Boo案tload跋er岸3拜.1 Bo笆otloa敖der的概澳念和作用安x。叭Bootl爸oader癌是嵌入式系艾统的引导加蔼载程序,它爸是系统上电挨后运行的第霸一段程序,拔其作用类似耙于 PC 背机上的 B柏IOS。在挨完成对系统巴的初始化任版务之后,它摆会将非易失邦性存储器(蔼通常是 F蔼lash或鞍 DOC 霸等)中的L岸inux 柏内核拷贝到佰 RA
11、M 佰中去,然后碍跳转到内核傲的第一条指版令处继续执按行,从而启扒动 Lin伴ux 内核唉。由此可见颁,boot拜loade俺r 和 L艾inux 俺内核有着密敖不可分的联奥系,要想清白楚的了解 蔼Linux阿内核的启动埃过程,我们佰必须先得认熬识 boo版tload百er的执行岸过程,这样吧才能对嵌入扳式系统的整拜个启过程有肮清晰的掌握哀。邦3跋.2 Bo佰otloa扳der的执盎行过程叭t。摆不同的处理昂器上电或复扒位后执行的矮第一条指令霸地址并不相暗同,对于 懊ARM 处鞍理器来说,熬该地址为 瓣0 x。对于颁一般的嵌入凹式系统,通俺常把 Fl唉ash 等俺非易失性存霸储器映射到肮这个地
12、址处百,而 bo扳otloa把der就位敖于该存储器阿的最前端,邦所以系统上跋电或复位后傲执行的第一爱段程序便是凹 boot把loade隘r。而因为蔼存储 bo柏otloa办der的存霸储器不同,埃bootl般oader氨的执行过程霸也并不相同白,下面将具盎体分析。癌 白嵌入式系统佰中广泛采用靶的非易失性氨存储器通常背是 Fla挨sh,而 熬Flash柏 又分为 靶Nor F芭lash 般和Nand巴 Flash 两种。 它们之间啊的不同在于疤: Nor笆 Flas蔼h 支持芯扳片内执行(背XIP, 敖eXecu蔼te In半 Plac绊e),这样蔼代码可以在扳Flash袄上直接执行靶而不必拷
13、贝拜到RAM中扳去执行。而癌Nand 矮Flash岸并不支持X搬IP,所以靶要想执行 敖Nand 巴Flash叭 上的代码柏,必须先将俺其拷贝到 艾RAM中去柏,然后跳到摆 RAM 癌中去执行。哀实际应用中扳的 boo稗tload埃er根据所坝需功能的不靶同可以设计埃得很复杂,败除完成基本扳的初始化系靶统和调用 伴Linux胺 内核等基哀本任务外,碍还可以执行百很多用户输白入的命令,胺比如设置 吧Linux袄 启动参数肮,给 Fl拔ash 分瓣区等;也可翱以设计得很拜简单,只完埃成最基本的坝功能。但为矮了能达到启巴动Linu板x 内核的霸目的,所有跋的 boo岸tload袄er都必须啊具备以下
14、功蔼能 :般p。版 哎 1.敖初始化 R邦AM翱因为 Li肮nux 内罢核一般都会癌在 RAM岸 中运行,笆所以在调用哀 Linu隘x 内核之背前 boo拜tload斑er 必须癌设置和初始案化 RAM班,为调用 稗Linux背内核做好准备。初始化翱 RAM 耙的任务包括胺设置 CP哀U 的控制翱寄存器参数跋,以便能正俺常使用 R袄AM 以及坝检测RAM鞍 大小等。敖 2.胺初始化串口百q。笆串口在 L癌inux 艾的启动过程凹中有着非常熬重要的作用澳,它是 L奥inux内唉核和用户交霸互的方式之败一。Lin扳ux 在启隘动过程中可安以将信息通敖过串口输出盎,这样便可坝清楚的了解笆 Linu叭
15、x 的启动癌过程。虽然般它并不是 爱bootl邦oader皑 必须要完爸成的工作,跋但是通过串拜口输出信息哎是调试 b败ootlo坝ader 班和Linu斑x 内核的笆强有力的工颁具,所以一般的 bo岸otloa拔der 都案会在执行过熬程中初始化爸一个串口做岸为调试端口扳。案 绊3.皑检测处理器办类型哎 爱Bootl办oader盎在调用 L扒inux内拜核前必须检阿测系统的处邦理器类型,凹并将其保存扳到某个常量斑中提供给 白Linux澳 内核。L百inux 挨内核在启动百过程中会根俺据该处理器熬类型调用相靶应的初始化颁程序。稗 按8。胺设置 Li爱nux启动办参数邦 芭Bootl吧oader
16、拌在执行过程岸中必须设置瓣和初始化 吧Linux霸 的内核启班动参数。目笆前传递启动啊参数主要采稗用两种方式俺:即通过 阿struc案t par岸am_st案ruct 搬和stru氨ct ta败g(标记列板表,tag哎ged l靶ist)两版种结构传递扒。stru吧ct pa鞍ram_s胺truct澳 是一种比办较老的参数罢传递方式,拜在 2.4八 版本以前百的内核中使搬用较多。从芭 2.4 败版本以后 斑Linux拔 内核基本暗上采用标记罢列表的方式盎。但为了保凹持和以前版芭本的兼容性背,它仍支持笆 stru按ct pa袄ram_s把truct昂 参数传递巴方式,只不碍过在内核启埃动过程中它
17、百将被转换成罢标记列表方斑式。瓣标记列表方按式是种比较爸新的参数传颁递方式,它爱必须以 A爱TAG_C背ORE 开矮始,并以A背TAG_NONE 结胺尾。中间可捌以根据需要傲加入其他列拌表。Lin跋ux内核在板启动过程中绊会根据该启按动参数进行澳相应的初始吧化工作。般e。巴 5哀.芭调用 Li凹nux内核疤映像傲 捌Bootl隘oader案完成的最后埃一项工作便傲是调用 L吧inux内版核。如果 跋Linux爱 内核存放吧在 Fla罢sh 中,拌并且可直接佰在上面运行吧(这里的 扳Flash绊 指 No翱r Fla白sh),那肮么可直接跳半转到内核中拔去执行。但瓣由于在 F哀lash 艾中执行
18、代码熬会有种种限靶制,而且速俺度也远不及胺 RAM 稗快,所以一班般的嵌入式碍系统都是将艾 Linu败x内核拷贝稗到 RAM扒 中,然后班跳转到 R爱AM 中去扒执行。不论扒哪种情况,稗在跳到 L挨inux 瓣内核执行之扒前 CUP胺的寄存器必版须满足以下蔼条件:r0挨0,r1佰处理器类鞍型,r2盎标记列表在扮 RAM中把的地址。叭h。叭启动过程分瓣析皑主要对bo班otsec芭t.s、s蔼etup.凹s 和he拔ad.s 氨的工作机理摆做了较为详拜细的阐述。澳o。挨4.1 b邦ootse邦ct 安模块分析笆 b岸ootse吧ct.s 碍代码是磁盘耙引导块程序拌,驻留在引八导盘的引导敖扇区(0
19、吧磁道,0 背磁头,第1拜 扇区)。百在PC加电柏ROM B班IOS 自绊检后,bo矮otsec傲t.s 由埃BIOS 敖自动加载到碍内存0 x7靶C00 处皑,然后将自阿己移到内存百0 x900唉00 处。板图2 代码奥显示了bo澳otsec澳t.s 的案移动过程,背其中#BO靶OTSEG八 为0 x7矮C00,#暗INITS艾EG 为0哎x9000疤。接下来,埃程序利用B唉IOS中断叭,INT 啊0 x13 哎将setu摆p 模块从啊磁盘第2 按个扇区开始翱读到0 x9阿0200 颁开始处,共懊读4 个扇皑区。如果读柏出错误,则扳CF标志置绊位,程序复柏位驱动器,斑并重试。加傲载setu巴
20、p 模块后柏,程序利用罢中断取磁盘绊驱动器参数阿,并将中断敖返回的每磁巴道扇区数保百存在变量s稗ector绊s 中。然哀后程序将s扳ystem班 模块加载巴到内存0 x吧10000摆 处。加载隘syste蔼m 模块期案间,显示版“奥Loadi岸ng sy拜stem笆”熬信息。为了芭提高加载速搬度,只要可板能,就每次柏加载整条磁敖道的数据。叭从磁盘读取氨一次数据后唉,程序就比半较当前所读耙段是否就是挨系统数据末拜端所处的段按(#END把SEG),案如果不是,半就跳转至o艾k1_re胺ad 标号啊处继续读数拌据。最后,袄程序向软驱案控制卡的驱俺动端口0 x绊3f2 写袄0,关闭软爱驱电动机。芭程序
21、运行j伴mpi 0颁,SETU凹PSEG,隘跳转到0 x佰9020:傲0000 鞍处,CPU耙开始执行s罢etup 叭模块。颁r。搬 摆 俺 懊 拔 盎 傲 绊 百 肮 隘 图笆2 boo把tsect袄 背移动代码瓣矮4.2 s啊etup 百模块分析爸 s绊etup.背s首先利用阿ROMBI霸OS中断读碍取机器系统百参数(光标拔位置、扩展阿内存数、硬案盘参数表等巴),并将这霸些数据保存版到内存0 x案90000疤 开始的位颁置(覆盖掉斑了boot皑sect 哀程序)。这案些参数将被埃内核中相关扮程序使用,伴例如设备驱俺动程序集中熬的ttyi胺o.c。随八后系统进入扳保护模式运耙行。CPU百 在
22、实模式搬下运行,寻背址一个内存百地址主要是俺使用段基址搬和段内偏移傲值,段值被白存放在段寄摆存器中;而矮在保护模式跋运行方式下唉,段寄存器傲中存放的是啊一个描述表阿中某项的索凹引值。索引碍值指定的描拔述符项中含吧有需要寻址办的内存段的哀基地址、段般的最大长度扒值和段的访叭问级别等信扮息。和实模胺式下的寻址扒相比,段寄熬存器值换成爸了段描述符败项索引。接斑下来,程序佰关闭中断,稗将syst背em模块整埃体向内存低昂端移动0 x拌1000。搬每次移动0澳x8000搬 字,循环叭执行8 次半。然后程序耙执行lid跋t idt拔_48 加爱载中断描述昂符表(id敖t)寄存器岸;执行lg伴dt gd癌t
23、_48 唉加载全局描岸述符表(g靶dt)寄存把器。此时中佰断描述符表蔼中只有一个扮空项(值全吧为0)。全白局描述符表耙中有3 个拌描述符项:耙第1 项无凹用,但必须摆存在;第2艾 项(索引按值0 x08佰)是系统代熬码段描述符案,所定义的按段基址为0岸,段中代码坝可被读和执斑行,段长为八8 M;第柏3项(索引拔值0 x10把) 是系统翱数据段描述翱符,所定义绊的段的基址癌为0,段中暗数据可读和胺可写,段限哀长为8M。叭最后,程序扮重置协处理阿器,对82百59 中断袄控制芯片编把程,完成进艾入保护虚地唉址模式的所唉有准备工作跋。通过设置阿机器状态字耙MSW(第隘0 号控制鞍寄存器CR办0 的低1巴6 位)中岸的PE 位芭使CPU进八入保护模式隘,开始运行鞍syste巴m模块中的艾head.把s(指令j昂mpi 0矮,8)。注佰意,CPU埃 已在保护拔模式下运行拜,CS 置鞍8 表示请瓣求特权级0俺,使用全局八描述符表中伴的第1 项皑(索引值0班x08)。啊图3 显示般了setu扳p.s 结懊束后内存分芭布。鞍0。白 吧 爱 挨 矮 蔼 癌 斑 胺图背3 set矮up 捌结束后内存矮分布总结袄Linux
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 集成电路数字化工厂架构搭建方案
- 前厅基础与服务管理 3
- 模拟教学:袋鼠式护理操作演练
- 摇臂钻安全操作规程
- 电子商务沙盘运营与管理(AI实践版) 实训工单汇 第1-8章 电子商务沙盘结构与流程认知 -第一轮、第二轮经营实战
- 残疾评定工具与量表介绍
- 公司督办事项办结单
- 2026年员工修车合同(1篇)
- 2026年眼镜店验光服务协议
- 特殊护理的质量控制
- 2026下半年湖南益阳市资阳区事业单位招聘工作人员16人易考易错模拟试题(共500题)试卷后附参考答案
- 2026浙江杭州市西湖区人民政府西溪街道办事处招聘编外合同制工作人员2人笔试模拟试题及答案解析
- 2026年科目1驾驶技术模拟题库及完整答案详解
- 六化建设培训
- TSG08-2026《特种设备使用管理规则》全面解读课件
- 《2026年化学制药企业安全风险防控专项工作方案》解读
- 四川绵阳科技城发展投资(集团)有限公司招聘笔试题库2026
- PDCPD材料可行性研究报告
- 药品信用档案管理制度
- GB/T 4140-2003输送用平顶链和链轮
- 2023年绵阳市林业系统事业单位招聘笔试模拟试题及答案解析
评论
0/150
提交评论