sunny Newbie
注册: 2005/3月/09
状态: 脱机 发表: 6
|
Linux 开机的过程
[教学] Linux 开机的过程
作者:黄敬群,国立成功大学资讯工程系 文件版次:0.1 最后修订日期:Nov 14, 2001 版权声明:允许在保留作者出处及本声明之前提下,以任何人类可读之形式自由散布
■ 开机过程简述
尚未提及如可制作 Floppy Linux 前,首先要了解整个系统开机的过程,为了普及性,这边以最容易取得的 PC 个人计算机讨论对象,处理器是 Intel 80486 以上等级。
当启动电源之际,计算机的 BIOS 就会找寻有无系统启动盘,此时会有两种状况产生:
第一种状况:找到系统启动盘 --
此时就会从系统启动盘中的第 0 扇区、第 0 磁柱载入可启动扇区
另一种状况:找不到系统启动盘 --
BIOS 就会找寻硬盘的 MBR (Master Boot Record),并且执行记录在 MBR 上 的启动加载程序 (Boot Loader) 进行开机
无论是从软盘开机也好,还是从硬盘开机也好,首先 OS Loader (就 Linux 来讲就可能是 LILO -- LInux LOader) 会加载 Linux Kernel,而 Kernel 一旦起动后,第一件事就是切入保护模式 (protected mode),此时,所有的硬件交由 Kernel 来控制,也意味挣脱 BIOS 的羁绊。
当 Kernel 加载完毕后,便开始初始化系统所有硬设备。而当所有的硬件初始化的动作也告完成之际,系统将尝试挂载 (mount) root filesystem。Root filesystem 就是被挂上当作 "/" 目录的 filesystem (以下简称 fs),当然,如果无法正确 mount 上 root fs,巧妇难为无米之炊的 Linux Kernel 也只好秀个讯息:
VFS: Unable to mount root fs on XXX
然后就会停止运作 (halt),这边的 XXX 是指那种 fs,这部份的讯息,可以参考 kernel source 中 fs/super.c 的程序代码。
当 root filesystem 成功的挂载后,就会去执行 init 这个程序。
init 会检查 /etc/inittab,找出该档中标明 sysinit 这一行,并执行该 script,在 Redhat Linux 上为 rc.sysinit,于是 rc.sysinit 肩负系统的初始化的大任,不外乎 有以下任务:
. 呼叫 /sbin/initlog 纪录系统初始化过程 . 设定 path、hostname 等信息 . banner 画面:一般我们看到 "Welcome to RedHat Linux" 的讯息 . Mount /proc . Load system font . Configure kernel parameters . Set the system clock . Load keymap . Start up swapping、turn on swap . Remount the root filesystem read-write、Clear mtab . Finding module dependencies、Load modules . Check filesystems
当 rc.sysinit 执行完毕,控制权立即移转回 init 手中,进入预设 runlevel:
. 若内定的 runlevel 为 3:
init 执行 /sbin/mingetty 启动 virtual console,并且以 "login:" 提示让使 用者登入,以完成开机。登入后系统会提供一个 shell 给使用者,就可以使用 Linux 。
. 若 runlevel 为 5:
在开启 virtual console 后,init 会再执行 xdm 启动 X window system,让使 用者以 xdm 界面登入。
以上就是 Linux 开机的过程。
|