版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第1616章章 嵌入式嵌入式LinuxLinux启动流程启动流程在多数计算机上,从在多数计算机上,从Linux开机到进入系统的命令行或开机到进入系统的命令行或者图形界面时间并不长。计算机在背后做了什么工作,会展者图形界面时间并不长。计算机在背后做了什么工作,会展现出一个功能强大的系统,本章分析现出一个功能强大的系统,本章分析Linux系统启动流程。系统启动流程。学习和掌握学习和掌握Linux启动的流程对了解启动的流程对了解Linux内核工作流程有很内核工作流程有很大帮助。大帮助。Linux系统初始化可以分成两大部分:内核初始化系统初始化可以分成两大部分:内核初始化和系统初始化。本章分析从打开
2、电源开关到进入用户界面和系统初始化。本章分析从打开电源开关到进入用户界面Linux系统的工作,主要内容如下:系统的工作,主要内容如下:Linux内核初始化概览内核初始化概览进入内核前的工作进入内核前的工作内核初始化内核初始化如何进入用户空间如何进入用户空间16.1 Linux16.1 Linux内核初始化流程内核初始化流程从前面讲解的知识知道,操作系统是用户应用和计算机从前面讲解的知识知道,操作系统是用户应用和计算机硬件之间的桥梁。操作系统管理整个系统的所有软硬件资源硬件之间的桥梁。操作系统管理整个系统的所有软硬件资源,并且向用户应用程序提供接口。在操作系统初始化的时候,并且向用户应用程序提供
3、接口。在操作系统初始化的时候,系统内核检测计算机硬件,加载驱动并且设置软件环境,系统内核检测计算机硬件,加载驱动并且设置软件环境,本节详细讲解本节详细讲解Linux内核初始化所做的工作。内核初始化所做的工作。16.2 PC16.2 PC机的初始化流程机的初始化流程先给出一个先给出一个PC机的初始化流程图。机的初始化流程图。16.2.1 PC16.2.1 PC机机BIOSBIOS功能和作用功能和作用图图16-3是是PC机机BIOS的功能结构。的功能结构。16.2.2 16.2.2 硬盘的数据结构硬盘的数据结构PC机最常见的外部存储设备是硬盘驱动器。硬盘可以机最常见的外部存储设备是硬盘驱动器。硬盘
4、可以存储大量的数据,并且具有断电信息不丢失的特点。硬盘上存储大量的数据,并且具有断电信息不丢失的特点。硬盘上的数据组织格式随不同操作系统不完全相同。无论什么系统的数据组织格式随不同操作系统不完全相同。无论什么系统,对硬盘的数据组织方式有何不同,都包含了一个引导记录,对硬盘的数据组织方式有何不同,都包含了一个引导记录的数据结构。引导记录(英文全称的数据结构。引导记录(英文全称Main Boot Record,简称,简称MBR)是位于硬盘)是位于硬盘0磁道磁道0柱面的第一个扇区。一个扇区有柱面的第一个扇区。一个扇区有512字节,字节,MBR占用了开始的占用了开始的446字节。字节。16.2.2 1
5、6.2.2 硬盘的数据结构硬盘的数据结构16.2.3 16.2.3 完整的初始化流程完整的初始化流程在弄清楚在弄清楚PC机机BIOS和硬盘引导程序的结构和作用后,和硬盘引导程序的结构和作用后,说一下说一下PC机的启动流程。机的启动流程。PC机加电或者机加电或者Reset后硬件系统会后硬件系统会复位,复位后寄存器复位,复位后寄存器CS=0 xFFFF,寄存器,寄存器IP=0 x0000。CPU从从FFFF:0000H处执行指令,这个地址只有一条处执行指令,这个地址只有一条JMP(跳转)(跳转)指令,跳转到系统自检程序,也就是进入了指令,跳转到系统自检程序,也就是进入了BIOS程序存放的程序存放的
6、位置。执行自检程序通过后,位置。执行自检程序通过后,BIOS根据配置把软盘或者硬盘根据配置把软盘或者硬盘(光盘也是同样道理)的(光盘也是同样道理)的MBR扇区读入系统扇区读入系统0000:7C00H处,处,执行执行MBR的代码。的代码。MBR的代码通常由操作系统修改,也可以由其他程序(的代码通常由操作系统修改,也可以由其他程序(例如例如GRUB引导器)修改。如果机器安装了引导器)修改。如果机器安装了GRUB引导软件引导软件,执行,执行MBR的代码会启动的代码会启动GRUB引导软件。系统的控制权交引导软件。系统的控制权交由由GRUB引导软件处理,引导软件处理,GRUB根据分区的配置信息,找到根据
7、分区的配置信息,找到硬盘对应分区上硬盘对应分区上Linux内核文件并且加载到内存,然后跳转到内核文件并且加载到内存,然后跳转到内核代码位置,最后把系统控制权交给内核代码位置,最后把系统控制权交给Linux内核。内核。16.3 16.3 嵌入式系统的初始化嵌入式系统的初始化嵌入式系统的多样性和复杂性,一般不像嵌入式系统的多样性和复杂性,一般不像PC机那样配机那样配置置BIOS,系统中也没有像,系统中也没有像BIOS那样的固件。用于启动的代那样的固件。用于启动的代码必须由用户完成,通常称这部分代码为码必须由用户完成,通常称这部分代码为Bootloader程序,程序,整个系统的启动就由它完成。整个系
8、统的启动就由它完成。Bootloader初始化硬件设备、初始化硬件设备、建立内存空间的映射,将系统的软硬件环境设定在一个合适建立内存空间的映射,将系统的软硬件环境设定在一个合适的状态,为加载操作系统内核和应用程序准备一个正确的环的状态,为加载操作系统内核和应用程序准备一个正确的环境。境。Bootloader依赖实际硬件环境,通常不存在一个通用的依赖实际硬件环境,通常不存在一个通用的标准。对于不同的嵌入式系统,标准。对于不同的嵌入式系统,Bootloader程序内容也不相程序内容也不相同。本书以同。本书以ARM处理器为例介绍嵌入式系统的初始化。处理器为例介绍嵌入式系统的初始化。16.3 16.3
9、 嵌入式系统的初始化嵌入式系统的初始化16.4 Linux16.4 Linux内核初始化内核初始化Linux内核在不同处理器体系结构上启动代码不全相同内核在不同处理器体系结构上启动代码不全相同,但是启动的流程基本一致,本书根据嵌入式开发的需要从,但是启动的流程基本一致,本书根据嵌入式开发的需要从ARM核分析核分析Linux内核初始化过程。内核初始化过程。16.4.1 16.4.1 解压缩内核映像解压缩内核映像对于大多数嵌入式应用,由于存储器空间的限制,大对于大多数嵌入式应用,由于存储器空间的限制,大多数编译后的内核映像都是压缩存放,所以进入内核的第一多数编译后的内核映像都是压缩存放,所以进入内
10、核的第一步首先是解压缩内核映像。步首先是解压缩内核映像。16.4.2 16.4.2 进入内核代码进入内核代码接下来就进入了真正的内核代码。在有接下来就进入了真正的内核代码。在有MMU的处理器的处理器上,系统会使用虚拟地址,通过上,系统会使用虚拟地址,通过MMU指向实际物理地址。指向实际物理地址。16.5 16.5 启动启动initinit内核进程内核进程在在start_kernel()函数最后调用了函数最后调用了rest_init()函数,此函函数,此函数用来创建内核数用来创建内核init进程,这也是内核态的最后的工作。代进程,这也是内核态的最后的工作。代码如下:码如下:static void
11、 rest_init(void) kernel_thread(init, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGNAL); unlock_kernel(); current-need_resched = 1; cpu_idle();16.6 16.6 根文件系统初始化根文件系统初始化Linux内核启动完毕后,首先就是要创建根文件系统,内核启动完毕后,首先就是要创建根文件系统,用户空间所有的操作都依赖根文件系统。本节介绍根文件系用户空间所有的操作都依赖根文件系统。本节介绍根文件系统的结构,并结合代码分析根文件系统的初始化过程。统的结构,并结合代码分析根文
12、件系统的初始化过程。16.6.1 16.6.1 根文件系统介绍根文件系统介绍在内核代码启动完之后,进入文件系统初始化的阶段在内核代码启动完之后,进入文件系统初始化的阶段,Linux需要加载根文件系统。需要加载根文件系统。Linux的根文件系统可以分两的根文件系统可以分两类:虚拟根文件系统和真实根文件系统。类:虚拟根文件系统和真实根文件系统。Linux内核的发展内核的发展趋势是把更多的功能放在用户空间完成,可以保持内核的精趋势是把更多的功能放在用户空间完成,可以保持内核的精简。虚拟根文件系统也是各简。虚拟根文件系统也是各Linux发行厂商采用的一种方式发行厂商采用的一种方式,可以把初始化的工作在
13、虚拟的根文件系统完成,最后再切,可以把初始化的工作在虚拟的根文件系统完成,最后再切换到真实的文件系统。换到真实的文件系统。1 传统的传统的initrd根文件系统根文件系统2 initramfs根文件系统根文件系统3 根文件系统的挂载根文件系统的挂载16.6.2 16.6.2 挂载虚拟文件系统挂载虚拟文件系统挂载文件系统在挂载文件系统在kernel_init()函数实现,本节重点分析函数实现,本节重点分析该函数。该函数。1 基本参数初始化基本参数初始化2创建系统第一个进程创建系统第一个进程3挂载根文件系统挂载根文件系统16.7 16.7 内核交出权限内核交出权限Linux内核通过内核通过sys_
14、fork()函数,之后在调用函数,之后在调用sys_execve()函数创建一个新的进程。系统启动后,核心态函数创建一个新的进程。系统启动后,核心态创建名为创建名为init的第一个用户进程。实现这种逆向迁移,的第一个用户进程。实现这种逆向迁移,Linux内核并不调用用户层代码。实现逆向迁移通常做法是在用户内核并不调用用户层代码。实现逆向迁移通常做法是在用户进程的核心栈压入用户态的进程的核心栈压入用户态的SS,ESP,EFLAGS,CS,EIP等寄存器伪装成用户进程,然后通过等寄存器伪装成用户进程,然后通过trap进入核心态,最后进入核心态,最后通过通过 iret指令返回用户态。指令返回用户态。
15、16.8 init16.8 init进程进程也是一个链接,具体指向哪个程序可以由用户配置。也是一个链接,具体指向哪个程序可以由用户配置。init进程的主要任务是按照进程的主要任务是按照inittab配置文件提供的信息配置文件提供的信息创建进程,由于进行系统初始化的进程都是由创建进程,由于进行系统初始化的进程都是由init进程创建的进程创建的,所以,所以init进程也称为系统初始化进程。进程也称为系统初始化进程。inittab配置文件的格式是没一行一个配置项,有如下结配置文件的格式是没一行一个配置项,有如下结构:构:id:rstate:action:process每项有四个字段,字段之间用每项有
16、四个字段,字段之间用“:”分割,如果某个字段分割,如果某个字段没有设置,直接留空。下面解释各字段含义:没有设置,直接留空。下面解释各字段含义:1id字段字段2rstate字段字段3action字段字段4process字段字段16.9 16.9 初始化初始化RAM DiskRAM Disk现代计算机的内存容量越来越大,并且价格也不断下现代计算机的内存容量越来越大,并且价格也不断下降。内存具备了相对外存储器访问速度快,价格低廉的优势降。内存具备了相对外存储器访问速度快,价格低廉的优势。Linux系统支持一项功能,可以指定一块内存区域作为文系统支持一项功能,可以指定一块内存区域作为文件分区。用户可以
17、像使用普通文件分区一样使用内存。本节件分区。用户可以像使用普通文件分区一样使用内存。本节介绍这种内存管理技术。介绍这种内存管理技术。16.9.1 RAM Disk16.9.1 RAM Disk介绍介绍Linux系统提供一种特殊的功能系统提供一种特殊的功能-“初始化内存盘初始化内存盘”,英,英文名文名Initial Ram Disk。RAM Disk技术与压缩映像技术结合技术与压缩映像技术结合,使用该技术后,使用该技术后Linux系统可以从容量较小的内存盘启动。系统可以从容量较小的内存盘启动。使用系统内存的一部分作为根文件系统,可以不使用交换分使用系统内存的一部分作为根文件系统,可以不使用交换分
18、区。换句话说,使用内存盘技术可以把区。换句话说,使用内存盘技术可以把Linux系统完全嵌入系统完全嵌入内存,不依赖其他外部存储设备。内存,不依赖其他外部存储设备。使用使用RAM Disk技术,系统不工作在硬盘活其他外部设技术,系统不工作在硬盘活其他外部设备上,消除了读写延迟;根文件系统和操作完全运行在备上,消除了读写延迟;根文件系统和操作完全运行在CPU/RAM环境下,系统速度和可靠性方面比较好;此外,环境下,系统速度和可靠性方面比较好;此外,根文件系统也不会因为非法关机导致被破坏。根文件系统也不会因为非法关机导致被破坏。RAM Disk唯一的一个缺点是对内存有一定的要求,要唯一的一个缺点是对
19、内存有一定的要求,要获得较好的性能,内存容量是不能太小的,目前获得较好的性能,内存容量是不能太小的,目前PC机的内存机的内存一般都很大,在内存运行根文件系统没有问题。嵌入式系统一般都很大,在内存运行根文件系统没有问题。嵌入式系统如果配备了较大的内存也可以考虑使用如果配备了较大的内存也可以考虑使用RAM Disk技术。技术。16.9.2 16.9.2 如何使用如何使用RAM DiskRAM DiskRAM Disk也称作也称作RAM盘,作用是在内存中使用一块盘,作用是在内存中使用一块内存区域虚拟出一个硬盘。使用内存区域虚拟出一个硬盘。使用RAM Disk需要在编译内核需要在编译内核的时候,在的时候,在“Block Device”选项中选择选项中选择“BlockDevice”菜单菜单项。在设置项。在设置“Block Disk”的时候,需要设置的时候,需要设置RAM Disk的参的参数。修改设置后,需要重新编译数。修改设置后,需要重新编译Linux内核才能使用。编译内核才能使用。编译带有带有RAM Disk选项的内核。选项的内核。16.9.3 16.9.3 实例:使用实例:使用RAM DiskRAM Disk作为根文件系统作为根文件系统本实例以创建一个本实例以创建一个Apache网络服务器为例,展示如何网络服务器为例,展示如何创建从
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 体育场馆租用合同(2024年版)
- 住宅建设项目总承包商合同范本2024
- 空调节能改造合同
- 商品房预售合同违约责任分析
- 2024年环境材料项目评估分析报告
- 2023年海洋监测仪器项目评估分析报告
- 私人工程承包合同书
- 2024至2030年中国管子内接数据监测研究报告
- 2024至2030年中国人胎素补水保温面膜数据监测研究报告
- 2024至2030年弧炉电极自动控制装置项目投资价值分析报告
- 《建设美丽中国》课件
- 2024年全国高考体育单招考试语文试卷试题(含答案详解)
- 多叶片微风风力发电项目融资计划书
- 普通诊所污水、污物、粪便处理方案 及周边环境情况说明
- 新媒体视听节目制作 课件全套 第1-10章 新媒体时代导演的基本素养-节目的合成
- 儿科遗尿中医诊疗规范诊疗指南2023版
- 过期、破损、不合格药品报损销毁表
- 录用体检操作手册(试行)
- 基层反映大学生实习乱象频发亟待关注
- 内夯沉管灌注桩专项施工方案
- 气瓶充装安全技术操作规程
评论
0/150
提交评论