网站大量收购独家精品文档,联系QQ:2885784924

第16篇__嵌入式Linux启动流程.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第16章 嵌入式Linux启动流程 在多数计算机上,从Linux开机到进入系统的命令行或者图形界面时间并不长。计算机在背后做了什么工作,会展现出一个功能强大的系统,本章分析Linux系统启动流程。学习和掌握Linux启动的流程对了解Linux内核工作流程有很大帮助。Linux系统初始化可以分成两大部分:内核初始化和系统初始化。本章分析从打开电源开关到进入用户界面Linux系统的工作,主要内容如下: Linux内核初始化概览 进入内核前的工作 内核初始化 如何进入用户空间 16.1 Linux内核初始化流程 从前面讲解的知识知道,操作系统是用户应用和计算机硬件之间的桥梁。操作系统管理整个系统的所有软硬件资源,并且向用户应用程序提供接口。在操作系统初始化的时候,系统内核检测计算机硬件,加载驱动并且设置软件环境,本节详细讲解Linux内核初始化所做的工作。 16.2 PC机的初始化流程 先给出一个PC机的初始化流程图。 16.2.1 PC机BIOS功能和作用 图16-3是PC机BIOS的功能结构。 16.2.2 硬盘的数据结构 PC机最常见的外部存储设备是硬盘驱动器。硬盘可以存储大量的数据,并且具有断电信息不丢失的特点。硬盘上的数据组织格式随不同操作系统不完全相同。无论什么系统,对硬盘的数据组织方式有何不同,都包含了一个引导记录的数据结构。引导记录(英文全称Main Boot Record,简称MBR)是位于硬盘0磁道0柱面的第一个扇区。一个扇区有512字节,MBR占用了开始的446字节。 16.2.2 硬盘的数据结构 16.2.3 完整的初始化流程 在弄清楚PC机BIOS和硬盘引导程序的结构和作用后,说一下PC机的启动流程。PC机加电或者Reset后硬件系统会复位,复位后寄存器CS=0xFFFF,寄存器IP=0x0000。CPU从FFFF:0000H处执行指令,这个地址只有一条JMP(跳转)指令,跳转到系统自检程序,也就是进入了BIOS程序存放的位置。执行自检程序通过后,BIOS根据配置把软盘或者硬盘(光盘也是同样道理)的MBR扇区读入系统0000:7C00H处,执行MBR的代码。 MBR的代码通常由操作系统修改,也可以由其他程序(例如GRUB引导器)修改。如果机器安装了GRUB引导软件,执行MBR的代码会启动GRUB引导软件。系统的控制权交由GRUB引导软件处理,GRUB根据分区的配置信息,找到硬盘对应分区上Linux内核文件并且加载到内存,然后跳转到内核代码位置,最后把系统控制权交给Linux内核。 16.3 嵌入式系统的初始化 嵌入式系统的多样性和复杂性,一般不像PC机那样配置BIOS,系统中也没有像BIOS那样的固件。用于启动的代码必须由用户完成,通常称这部分代码为Bootloader程序,整个系统的启动就由它完成。Bootloader初始化硬件设备、建立内存空间的映射,将系统的软硬件环境设定在一个合适的状态,为加载操作系统内核和应用程序准备一个正确的环境。Bootloader依赖实际硬件环境,通常不存在一个通用的标准。对于不同的嵌入式系统,Bootloader程序内容也不相同。本书以ARM处理器为例介绍嵌入式系统的初始化。 16.3 嵌入式系统的初始化 16.4 Linux内核初始化 Linux内核在不同处理器体系结构上启动代码不全相同,但是启动的流程基本一致,本书根据嵌入式开发的需要从ARM核分析Linux内核初始化过程。 16.4.1 解压缩内核映像 对于大多数嵌入式应用,由于存储器空间的限制,大多数编译后的内核映像都是压缩存放,所以进入内核的第一步首先是解压缩内核映像。 16.4.2 进入内核代码 接下来就进入了真正的内核代码。在有MMU的处理器上,系统会使用虚拟地址,通过MMU指向实际物理地址。 16.5 启动init内核进程 在start_kernel()函数最后调用了rest_init()函数,此函数用来创建内核init进程,这也是内核态的最后的工作。代码如下: static void rest_init(void) { kernel_thread(init, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGNAL); unlock_kernel(); current-need_resched = 1; cpu_idle(); } 16.6 根文件系统初始化 Linux内核启动完毕后,首先就是要创建根文件系统,用户空间所有的操作都依赖根文件系统。本节介绍根文件系统的结构,并结合代码分析根文件系统的初始化过程。 16.6.1 根文件系统介绍 在内核代码启动完之后,进入文件系统初始化的阶段,Linux需要加载根文件系统。Linux的根文件系统

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档