- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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的根文件系统
您可能关注的文档
- 第9篇_JSP页面设计常用技术.ppt
- 第9篇属性操作.pdf
- 第9章 对话框及菜单程序设计.ppt
- 第9章 电子商务技术基础练习题及答案.doc
- 第9章 文字及图形GUI设计.ppt
- 第10篇 PDO方式访问数据库.ppt
- 第10篇 premiere添加音频.ppt
- 第10篇 SAS宏功能.doc
- 第10篇 传递函数矩阵的状态空间实现ok.ppt
- 第10篇 多属性商品管理.pdf
- 门面清洗合同协议.docx
- 9.1 生活需要法律 教学设计- 2023-2024学年统编版道德与法治七年级下册.docx
- 19《大象的耳朵》第一课时(教学设计)2023-2024学年统编版语文二年级下册.docx
- 苏教版二年级下册数学精品教学课件 31 宿迁市期末质量监测.ppt
- 西师版二年级下册数学精品教学课件 第3单元 3.1.1 整十、整百数的加减法.ppt
- 四年级语文上册 第二单元 5 一个豆荚里的五粒豆教学实录 新人教版.docx
- 苏教版三年级上册数学精品教学课件 单元综合素质评价 第二单元 千克和克.ppt
- 第四章第四节 光的折射教学设计 -2023-2024学年人教版物理八年级上学期.docx
- 3.17 明朝的灭亡 教学设计 2023-2024学年统编版七年级历史下册.docx
- 全国青岛版信息技术七年级上册第3单元第1课《策划准备》信息技术教学设计.docx
文档评论(0)