重新做一张或换一张win98启动软盘看看。
偶有点怀疑该起动盘是不是没有加载高位内存管理程序himem.sys?!
:ask
题外话:
L i n u x是不能在内存小于2 M的环境下运行的!这不是开玩笑的,楼主一定要保证你的系统内存超过2M才能安装Linux啊!
,哈哈!:p
原理如下:
当P C启动时,I n t e l系列的C P U首先进入的是实模式,并开始执行位于地址0 x F F F F 0处的代码,也就是R O M - B I O S起始位置的代码。B I O S先进行一系列的系统自检,然后初始化位于地址0的中断向量表。最后B I O S将启动盘的第一个扇区装入到0 x 7 C 0 0,并开始执行此处的代码。
这就是对内核初始化过程的一个最简单的描述。
最初,L i n u x核心的最开始部分是用8 0 8 6汇编语言编写的。当开始运行时,核心将自己装入到绝对地址0 x 9 0 0 0 0,再将其后的2 k字节装入到地址0 x 9 0 2 0 0处,最后将核心的其余部分装入到0 x 1 0 0 0 0。当系统装入时,会显示L o a d i n g . . .信息。装入完成后,控制转向另一个实模式下的汇编语言代码b o o t / S e t u p . S。S e t u p部分首先设置一些系统的硬件设备,然后将核心从0 x 1 0 0 0 0处移至0 x 1 0 0 0处。这时系统转入保护模式,开始执行位于0 x 1 0 0 0处的代码。
接下来是内核的解压缩。0 x 1 0 0 0处的代码来自于文件z B o o t / h e a d . S,它用来初始化寄存器和调用d e c o m p r e s s _ k e r n e l ( )程序。d e c o m p r e s s _ k e r n e l ( )程序zBoot/inflate.c,zBoot/unzip.c 和z B o o t / m i s c . c组成。解压缩后的数据被装入到了0 x 1 0 0 0 0 0处,这也是L i n u x不能在内存小于2 M的环境下运行的主要原因。
解压后的代码在0 x 1 0 1 0 0 0 0处开始执行,紧接着所有的3 2位的设置都将完成: I D T、G D T和L D T将被装入,处理器初始化完毕,设置好内存页面,最终调用s t a r t _ k e r n e l过程。这大概是整个内核中最为复杂的部分。
s t a r t _ k e r n e l ( )程序用于初始化系统内核的各个部分,包括:
• 设置内存边界,调用p a g i n g _ i n i t ( )初始化内存页面。
• 初始化陷阱,中断通道和调度。
• 对命令行进行语法分析。
• 初始化设备驱动程序和磁盘缓冲区。
• 校对延迟循环。
最后,系统核心转向m o v e _ t o _ u s e r _ m o d e ( ),以便创建初始化进程( i n i t)。此后,进程0开始进入无限循环。
|