Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->网络应用 ->正文

Linux操作系统下关于引导和初始化的问题

来源: 作者:Webmaster 时间:2007-07-09 点击: [收藏] [投稿]

系统引导和初始化概述

相关代码(引导扇区的程序及其辅助程序,以x86体系为例):

\linux-2.4.22\arch\i386\boot\bootsect.S:Linux引导扇区的源代码;512字节

\linux-2.4.22\arch\i386\boot\setup.S:辅助程序;

\linux-2.4.22\arch\i386\boot\video.S:辅助程序,用于引导过程中的屏幕显示.

\linux-2.4.22\arch\i386\boot\compressed\head.S,

\linux-2.4.22\arch\i386\boot\compressed\misc.c :用于对内核映像解压缩

-----------------------------------------

\linux-2.4.22\arch\i386\kernel\head.s系统初始化入口

\linux-2.4.22\init\main.c 系统初始化入口

参考文档:\linux-2.5.75\Documentation\i386\boot.txt

过程描述

系统加电,CPU RESET

跳到地址0xFFFFFFF0,此处是BIOS

BIOS完成它的操作把第一扇区的内容读入到0x7c00

就是bootsect.S

把自己移到绝对地址0x90000处,并调转到那里继

续执行

通过BIOS提供的读磁盘调用"int 0x13"从磁盘上读

入setup和内核的映像

将(boot/setup.S)2kB字节的代码读入内存0x90200处,

然后跳转到setup的代码中做执行内核映像的准备

从0x100000开始执行startup_32()进行初始化(head.s)

---〉start_kernel()[main.c]-cpu_idle()

start_kernel()创建的进程init()被调度执行,完成

1.指令的跳转及其机理

l 80x86/Pentium的地址映射

0–640 KB MS-DOS Area.

640–768 KB Video Buffer Area.

768–896 KB in 16-KB sections (total of eight sections) - Expansion Area.

896 -960 KB in 16-KB sections (total of four sections) - Extended System BIOS Area.

960-KB–1-MB memory (BIOS Area) - System BIOS Area.

扩展内存区:由1M到4GB-1

— High BIOS area from 4 GB to 4 GB–2 MB

Intel 82875P Memory Controller Hub (MCH)

memery的监测和初始化:在对内存接口做操作前,必须初始化MCH DRAM寄存器.MCH必须配制成针对所安

装的内存的类型进行操作.对内存类型和大小的检测是通过ICH5上的System Management Bus (SMBus)来

完成.这个两线的总线通过DRAM DIMM上的Serial Presence Detect端口获得DRAM的类型和大小信息.

BIOS需要确定每行内存的大小和类型来配置MCH内存接口.

2.x86MPU 启动时的初始化

复位输入提供一种初始化的硬件手段.通过复位接口电路向mpu提供信号,Reset要保持1至少15个

CLK2周期,当返回0后,MPU启动内部初始化程序,进入实地址模式.初始化完成后,标志寄存器设为

0xUUUU0002(u代表未定义,实模式下9位标志可用,这里是奇偶标志为1);指令指针设为0x0000FFF0,CS

寄存器设为0xF000,DS,SS,ES,FS和GS寄存器都设为0x0000,指令队列清空.

实模式下地址的形成:段基址+指令指针偏移

MPU在识别出Reset信号后把数据总线设在高阻状态,地址线强行设为1.由于清空中断标志是初始化

的一部分,外部中断被禁止.因为代码段寄存器为0xF000,指令指针为0x0000FFF0,地址线A20-A31全部

是1,从而复位后实模式程序从地址0xFFFFFFF0开始(只用于实模式高地址位忽略,从地址0xFFFF0开始.

该地址处可以包含一条转移指令跳到启动程序处.

物理地址为0xfffffff0的代码将被执行.这个地址被存储在一个只读存储器(ROM)里.BIOS(基本

输入/输出系统)实际上是一段存储在ROM里的程序.它包含了一系列可以被某些操作系统调用,用于处理

计算机各种硬件设备的中断驱动和低级程序.其中微软的DOS就是这样的一种操作系统.

所有的BIOS程序都是在实模式下运行的.但是,Linux内核是在保护模式下运行,而不是在实模式下.

因此,一旦初始化完成后,Linux就不再使用BIOS,而是完全由自己来为计算机上的所有硬件提供驱动程

序.

那么什么时候Linux使用保护模式 为什么BIOS不能使用相同的模式 BIOS使用实模式是因为其在

操作过程中使用的是实模式地址,并且在计算机刚打开电源时,只有实模式地址可用.一个实模式地址由

段地址和偏移地址组成,因此,相应的物理地址就为段地址×(2×8)+偏移.

这是不是意味着在整个启动过程中,Linux就从来不使用BIOS了呢 答案是否定的.在启动阶段,Linux

从硬盘或者其它外部设备加载内核时,需要使用BIOS.

3.BIOS的作用:

BIOS要对硬件进行一系列彻底的检测.这个步骤主要是检查系统安装有哪些设备,以及它们工作是否

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:RedHat Linux操作系统下配置XDMCP的方法   下一篇:Linux系统服务器安全配置与优化方向概述

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号