X86和arm操作系统启动流程(转)
软件开发与易经描述的卦象,有异曲同⼯之处,现今种类繁多的编程语⾔、开发框架,好⽐六⼗四卦,追根溯源,终究会回归到最初的太极图;软件开发⽽⾔,这些开发语⾔、框架,也就最终都会回归到操作系统。所以有了操作系统连载篇章,记录⾃⼰学习操作系统的历程。
⾸先来了解什么是操作系统:"操作系统就是⼀个运⾏于硬件上的特殊软件!"
PC计算机系统
上图为现代计算机系统架构,可以看到,操作系统位于硬件层、BIOS之上,简⽽⾔之,也就是⼀个软件,这个软件管理着硬件资源、软件资源。⽤户软件经过编译软件编译后,运⾏于操作系统上,操作系统对其进⾏管理、调度等统筹⼯作。
-- BIOS是啥玩意?
在上图中,操作系统与硬件层之间,有⼀个BIOS的东西,那么BIOS是啥?我们知道,操作系统是软件,软件是不能直接单⼑直⼊的运⾏于硬件之上,⽽需要借助其他⼒量,⽽BIOS(输⼊输出系统)扮演的就是这个⾓⾊,在我们开机时出现的蓝⾊操作界⾯,就是BIOS运⾏的效果,如下:
BIOS操作界⾯供我们选择从哪⾥启动操作系统,如果重装操作系统或者装了双系统的朋友,就是会看到会让选择从哪⾥启动操作系统(硬盘、USB等),BIOS是直接固化在硬件中的固件,出⼚时已经烧写完成,不可更改,如果⼀台电脑的BIOS坏了,那么这台电脑也就寿终正寝了。BIOS
作⽤是操作系统与硬件层的桥梁,开机时拉起操作系统。
-- 操作系统启动流程
以上了解了BIOS,现在来了解电脑如何从开机⼀步步进⼊到漂亮的操作系统界⾯的。
在上图中,可以看到现代操作系统的启动流程,BIOS的⼯作使命就是硬件初始化、建⽴中断向量表,然后加载主引导程序,主引导程序⼀旦开始执⾏,BIOS的任务可以说结束了,主引导程序同样会进⾏⼀系列的初始化⼯作,最终加载运⾏操作系统内核,之后便是操作系统初始化,然后就进⼊操作系统了。这⾥我把流程分为三⼤块:
开机⾃动执⾏BIOS --> 拉起主引导程序 --> 拉起操作系统内核 --> 操作系统从此可以⾃嗨
疑问⼀、如何开机⾃动执⾏BIOS?
BIOS既然是固件,那么就肯定存在硬件某个地址处,这个地址就是0XFFFF0,也就是执⾏BIOS的⼊⼝地址,硬件的特殊设计,使得CPU在开机时⾃动从0XFFFF0地址开始执⾏,也就解答了为啥开机就⾃动执⾏BIOS。
疑问⼆、BIOS如何拉起主引导程序执⾏?
上边说了,BIOS操作界⾯会选择什么介质启动操作系统,在选择具体的启动介质后,将启动介质中主引导区的主引导程序加载到内存,主引导程序⼀般位于主引导区的前512字节,并且主引导程序⼊⼝地址固定为0X7C00,拉起主引导程序,也就是跳转到0X7C00地址处执⾏⽽已, 汇编语⾔中就是⼀个jmp指令,继⽽将控制权交给主引导程序。
疑问⼆、如何寻主引导区?如何获取主引导程序?
主引导区固定位于启动介质的开始地址处,⼤⼩为512字节,这512字节的内容,就是主引导程序,需要注意的⼀点是,512字节最后两字节固定为0X55AA
以上说明了系统的启动流程,下边⽤⼀张详细的图来总结:
总结:
1、BIOS是计算机上电后第⼀个运⾏的程序
2、BIOS对硬件等进⾏必要的初始化,并加载运⾏主引导程序
3、主引导程序位于启动介质的最开始512字节处,该512字节以0X55AA结束
4、主引导程序继续完善初始化⼯作,并加载运⾏操作系统内核
嵌⼊式系统
嵌⼊式系统与传统的PC⼀样,也是⼀种计算机系统,是由硬件和软件组成的。⼀般⽽⾔,典型的嵌⼊式系统的⼜可以进⼀步分成四个部分:嵌⼊式处理器、嵌⼊式外围设备、嵌⼊式操作系统和嵌⼊式应⽤软件,如下图所⽰:
嵌⼊式处理器
嵌⼊式处理器是嵌⼊式系统硬件平台的核⼼。嵌⼊式处理器与通⽤处理器最⼤的不同点在于,嵌⼊式CPU⼤多⼯作在为特定⽤户所专门设计的系统中,它将通⽤CPU中许多由板卡完成的任务集成到芯⽚内部,从⽽有利于嵌⼊式系统在设计时趋于⼩型化,同时还具有很⾼的效率和可靠性。 嵌⼊式处理器的体系结构经历了从CISC(复杂指令集)⾄RISC(精简指令集)和Compact RISC的转变,位数则
由4位、8位、16位、32位逐步发展到64位。⽬前常⽤的嵌⼊式处理器可分为低端的嵌⼊式微控制器(Micro Controller Unit,MCU)、中⾼端的嵌⼊式微处理器(Embedded Micro Processor Unit,EMPU)、⽤于计算机通信领域的嵌⼊式DSP处理器(Embedded Digital Signal
Processor,EDSP)和⾼度集成的嵌⼊式⽚上系统(System On Chip,SOC)。
⽬前⼏乎每个半导体制造商都⽣产嵌⼊式处理器,并且越来越多的公司开始拥有⾃主的处理器设计部门,据不完全统计,全世界嵌⼊式处理器已经超过1000多种,流⾏的体系结构有30多个系列,其中以ARM、PowerPC、MC 68000、MIPS等使⽤得最为⼴泛。
嵌⼊式外围设备
在嵌⼊系统硬件系统中,除了中⼼控制部件(MCU、DSP、EMPU、SOC)以外,⽤于完成存储、通信、调试、显⽰等辅助功能的其他部件,事实上都可以算作嵌⼊式外围设备。外部设备在不同的系统中有不同的选择。例如,在汽车上,外部设备主要是传感器;⽽在⼀般⼿机上,外部设备可以是键盘、液晶屏幕等。
嵌⼊式操作系统
嵌⼊式操作系统是⽤来⽀持嵌⼊式应⽤的系统软件,是嵌⼊式系统极为重要的组成部分,通常包括与
硬件相关的底层驱动程序、系统内核、设备驱动接⼝、通信协议、图形⽤户界⾯(GUI)等。嵌⼊式操作系统具有通⽤操作系统的基本特点,如能够有效管理复杂的系统资源,能够对硬
件进⾏抽象,能够提供库函数、驱动程序、开发⼯具集等。但与通⽤操作系统相⽐较,嵌⼊式操作系统在系统实时性、硬件依赖性、软件固化性以及应⽤专⽤性等⽅⾯,具有更加鲜明的特点。
嵌⼊式应⽤软件
嵌⼊式应⽤软件是针对特定应⽤领域,基于某⼀固定的硬件平台,⽤来达到⽤户预期⽬标的计算机软件,由于⽤户任务可能有时间和精度上的要求,因此有些嵌⼊式应⽤软件需要特定嵌⼊式操作系统的⽀持。嵌⼊式应⽤软件和普通应⽤软件有⼀定的区别,它不仅要求其准确性、安全性和稳定性等⽅⾯能够满⾜实际应⽤的需要,⽽且还要尽可能地进⾏优化,以减少对系统资源的消耗,降低硬件成本。
ARM处理器
确切地说ARM处理器不是指某种处理器,⽽是采⽤ARM体系结构开发的处理器。可以说说ARM处理器是⽬前在嵌⼊式领域最重要的处理器。⽬前有数⼗家公司使⽤ARM体系结构开发⾃⼰的芯⽚,⽀持的外部设备和功能丰富多样。
1.3.1ARM处理器介绍
通常⼈们认为ARM(Advanced RISC Machine)是⼀家公司的名字,也可以认为是⼀类处理器的统称,还可以认为是⼀种技术的名字。
ARM公司于1991年成⽴于英国剑桥,是微处理器⾏业的⼀家知名企业,⾃⼰本⾝并不⽣产芯⽚,⽽是主要通过出售芯⽚设计技术的授权获取利润。该企业设计了⼤量低成本、⾼性能、低功耗的RISC处理器、 相关技术及软件。
⽬前,采⽤ARM技术知识产权(IP核)的微处理器,即通常所说的 ARM微处理器,已遍及⼯业控制、消费类电⼦产品、通信系统、⽹络系统、⽆线系统 等各类产品市场。基于ARM技术的微处理器应⽤约占据了32位RISC微处理器80%以 上的市场份额,其中在⼿机市场,ARM占有绝对的垄断地位。
1.3.2ARM体系结构的发展
体系结构,定义了指令集(ISA)和基于这⼀体系结构下处理器的编程模型。 基于同种体系结构可以有多种处理器,每个处理器性能不同,所⾯向的应⽤也就不 同,但每个处理器的实现都要遵循同⼀体系结构。
1983年ARM公司开始ARM的设计,早期的V1结构、V2结构有26位的寻址空间,现已废弃不⽤。在1980年代晚期的V3结构将寻址范围扩展到32位,是ARM质⼀般的飞跃。后来V4结构不再强制要求与
以前的26位体系结构版本兼容,它清楚地指明了哪个指令会引起未定义指令异常发⽣,V4结构可谓是真正地得到了推⼴,值得⼀提的是16位指令集Thumb指令集就是在这个版本上成⽴的。
V5结构在版本4的基础上,对现在指令的定义进⾏了必要的修正,对版本4体系结构进⾏了扩展,并增加了指令。V5结构的ARM处理器提升了ARM和Thumb两种指令的交互⼯作能⼒,同时 有了DSP指令—V5E结构、Java指令—V5J结构的⽀持。
ARM体系结构版本6是2001年发布的,该版本增加了媒体指令。属于V6体系结构的处理器核有ARM11(2002年发布)。V6体系结构包含ARM体系结构中所有的4种特殊指令集:Thumb指令(T)、DSP指令(E)、Java指令(J)和Media指令。
ARM体系结构版本V7是在版本V6基础上诞⽣的。V7结构采⽤了Thumb-2技术,它是在ARM的Thumb代码压缩技术的基础上发展起来的,并且保持了对现存ARM解决⽅案的完整的代码兼容性。V7结构还采⽤了NEON技术,将DSP和媒体处理能⼒提⾼了近4倍。并⽀持改良的浮点运算,满⾜下⼀代3D图形、游戏以及传统嵌⼊式控制应⽤的需求。从此版本开始,ARM公司正式将以前的版本ARM处理器称为经典系列,V7结构及以后处理器称为Cortex系列,并且将 Cortex系列产品分为A(应⽤处理)、R(实时控制)、M(微控制)三个⼦系列。
ARM在2012年下半年⾸次发布采⽤64位V8架构产品。V8是ARM公司的第⼀款64位处理器架构,包括
AArch64和AArch32⼆种主要执⾏状态。其中前者引⼊了⼀套新的指令集“A64”专门⽤于64位处理器,后者后者⽤来兼容现有的32位ARM指令集。⽬前我们看到的Cortex-A53, Cortex-A57(现在被A72替代了)⼆款处理器便属于Cortex-A50系列。
1.3.3ARM处理器
芯⽚⼚家获得ARM公司的授权以后⽣成出来不同的处理器,ARM处理器的⽀持(如指令语义)的实现细节可能会有所不同。根据结构体系及内核的差异,⽬前ARM处理器⼜分为不同的系列,如下表所⽰:
表1ARM处理器内核列表
架构 处理器家族
ARMv1 ARM1
ARMv2 ARM2、ARM3
ARMv3 ARM6、ARM7
ARMv4 StrongARM、ARM7TDMI、ARM9TDMI
ARMv5 ARM7EJ、ARM9E、ARM10E、XScale
ARMv6 ARM11、ARM Cortex-M
ARMv7 ARM Cortex-A、ARM Cortex-M、ARM Cortex-R
x86架构和arm架构区别ARMv8 Cortex-A35、Cortex-A50系列、Cortex-A72、Cortex-A73
世界各⼤半导体⽣产商从ARM公司购买其设计 的 ARM 微处理器核,根据各⾃不同的应⽤领域,加⼊适当的外围电路,从⽽形成⾃ ⼰
的 ARM 微处理器芯⽚进⼊市场,⼜形成了各⾃的ARM系列芯⽚。典型的如基于Cortex-M3内核的意法半导体STM32 系列芯⽚,基于
ARM920T内核的Samsung S3C2442和 S3C2410芯⽚ ,基于ARM7TDMI(-S)内核的恩智浦半导体LPC2000及LH754xx系列芯⽚等。
1.4Linux操作系统
应⽤于嵌⼊式系统的的嵌⼊式操作系统很多,如Linux、uCOS-II、WinCE等,其中Linux系统是应⽤最
为⼴泛的。 Linux系统是⼀个免费使⽤的类似Unix的操作系统,最初运⾏在X86体系结构,⽬前已被移植到数⼗种处理器上,如ARM、LoongSon等。Linux最初是由芬兰的Linux Torvalds设计开发,经过多年的发展,已经形成⼀个⾮常庞⼤、功能完善的操作系统。
嵌⼊式Linux是以Linux为基础的嵌⼊式操作系统,它被⼴泛应⽤在移动电话、媒体播放器、消费性电⼦产品以及航空航天等领域。嵌⼊式Linux是将Linux操作系统进⾏裁剪修改,使之能在嵌⼊式计算机系统上运⾏的⼀种操作系统。嵌⼊式Linux既继承了Internet上⽆限的开放源代码资源,⼜具有嵌⼊式操作系统的特性。嵌⼊式Linux的特点是版本免费,⽽且性能优异,软件移植容易,代码开放,有许多应⽤软件⽀持,应⽤产品开发周期短,新产品上市迅速,稳定性好、安全性好。
1.4.1Linux内核版本
严格来讲,Linux这个词本⾝只表⽰Linux内核,任何使⽤Linux内核的操作系统都可以称为Linux操作系统。 内核,是⼀个操作系统的核⼼。是基于硬件的第⼀层软件扩充,提供操作系统的最基本的功能,是操作系统⼯作的基础,它负责管理系统的进程、内存、设备驱动程序、⽂件和⽹络系统,决定着系统的性能和稳定性。Linux内核的主要模块(或组件)分以下⼏个部分:存储管理、CPU和进程管理、⽂件系统、设备管理和驱动、⽹络通信,以及系统的初始化(引导)、系统调⽤等。
Linux内核版本号⼀般由3组数字组成:X.Y.Z。X表⽰主版本号,Y表⽰次版本号,Z表⽰修订版本号。
早期次版本号为奇数时代表的是不稳定版本,偶数时代表稳定版本。⽬前Linux内核的最新的稳定版本为5.1.10版。
⼩技巧:如何查看Linux内核版本号?
在Linux终端中输⼊ uname -a
1.4.2Linux发⾏版本
Linux系统是开放的,任何⼈都可以制作⾃⼰的系统。Linux 主要作为Linux发⾏版(通常被称为"distro")的⼀部分⽽使⽤。这些发⾏版由个⼈,松散组织的团队,以及商业机构和志愿者组织编写。它们通常包括了其他的系统软件和应⽤软件,以及⼀个⽤来简化系统初始安装的安装⼯具,和让软件安装升级的集成管理器。⼤多数系统还包括了像提供GUI界⾯的XFree86之类的曾经运⾏于BSD的程序。 ⼀个典型的Linux发⾏版包括:Linux内核,⼀些GNU程序库和⼯具,命令⾏shell,图形界⾯的X Window系统和相应的桌⾯环境,如KDE或GNOME,并包含数千种从办公套件,编译器,⽂本编辑器到科学⼯具的应⽤软件。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论