Linux系统启动概述
Posted YoungerChina
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统启动概述相关的知识,希望对你有一定的参考价值。
博客:http://blog.csdn.net/younger_china/article/details/51615916
Linu系统启动是一个”冗长乏味”的过程,那么我们现就需要去经历一下这个冗长乏味的生活。我们按照如下流程来分析:
1. 史前时代:Bios
计算机在上电那一刻几乎是毫无用处的,此时,RAM中包含的全部是随机数据。
在开始启动时,一个特殊的硬件电路在CPU的一个引脚上产生一个RESET逻辑值,在RESET产生之后,就把处理器的一些寄存器设置成固定的值,并执行在物理地址0xFFFFFFF0处找到的代码(Younger注:该代码我称之为BIOS代码)。硬件会把这个地址映射到某个只读、持久的存储芯片中,该芯片被称为ROM(即:Read-Only Memory)。
Linux一旦进入实模式,就不再使用BIOS,而是linux本身为计算机上的每个硬件设备提供各自的设备驱动程序。实际上,因为BIOS过程必须在实模式下运行,而内核在保护模式下运行,所以即使在二者之间共享函数是有益的,也不能共享。
BIOS是采用实模式寻址的,因为在上电启动时,计算机只能寻址这么大的地址空间(请参阅实模式与保护模式的区别)。实模式地址由一个segment段和一个offset偏移量组成.。相应的物理地址样计算方法:segment*16 + offset。此时,CPU寻址电路不需要全局描述表(GDT)、局部描述表(LDT)和页表(PT)。显然,对GDT,LDT和PT进行初始化的代码必须在实模式下运行。
那么在BIOS阶段,都是做了哪些工作哪?.BIOS启动过程实际上执行一下4个操作:
1. 上电自检:对计算机硬件执行一系列的测试,用来检测现在都有什么设备以及这些设备是否正常工作,这个阶段通常称为POST(上电自检)。这个阶段中,会显示一些信息,如BIOS版本号等。
2. 初始化硬件设备:这个阶段在现代基于PCI的体系机构中相当重要,因为它可以保证所有的硬件设备操作不会引起IRQ线与I/O端口的冲突。在本阶段的最后,会显示系统中所安装的所有PCI设备的一个列表。(实际上,由BIOS扫描的一系列设备数据都会被内存引用,尤其是在PCI扫描的过程,一般只是对 BIOS扫描结果后的一种确认,而内核也一般不需要过多地重新扫描PCI资源)。
3. 搜索一个操作系统来启动:实际上,根据BIOS的设置,这个过程可能要试图访问系统中的软盘,硬盘和CDROM等设备的第一个扇区。
4. 装载代码(引导程序):只要找到一个有效的设备,就把第一个扇区的内容拷贝到RAM中从物理地址0x00007c00(X86)或0x00008000(ARM)开始的位置,然后跳转到这个地址处,开始执行刚才转载进来的代码。
head-y := arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o
textofs-y := 0x00008000
以上是关于Linux系统启动概述的主要内容,如果未能解决你的问题,请参考以下文章