Linux 开机程序之研讨
各位是否曾经对电脑整个开机的流程感到好奇呢 ? 这一次 , 我们所要讨论的
主题 , 就是 Linux 从开机的一瞬间到 login 为止 , 到底发生了什麽事情 ? 想必各位都知道 , 在刚开机时 , 由於 80x86 的特性 , CS ( Code Segment ) 这个暂存器中全部都放著 1 , 而 IP ( Instruction Pointer ) 这个暂存器 中全部都放著 0 , 换句话说 , CS=FFFF 而 IP=0000 , 此时 , CPU 就依据 CS 及 IP 的值 , 到 FFFF0H 去执行那个地方所放的指令 . 这时候 , 由於 FFFF0H 已经到了高位址的顶端 , 所以 , FFFF0H 这个地方 , 总是会放一个 JMP 指令 , 跳到比较低的位址 . 接著 , ROM BIOS 就会作一些检查的动作 像记忆体 , 键盘 等...... 并在我们俗称的 UMB ( Upper Memory Block ) 之中扫描 , 看看是否有合法的 ROM 存在 ( 比如 SCSI 卡上的 ROM ) . 假如有 , 就到里面去执行一些东西 , 执行完之後再继续刚才的行程 . 到了 最後 , 读取磁碟机上的第一个 sector . 在这里 , 我假设各位由硬碟启动 因此 , 就硬碟的构造而言 , 它的第一个 sector 称为 MBR ( Master Boot Record ) . 因为一个 sector 是 512 bytes , 而 MBR 这 512 bytes 可分 为两个部份 , 第一个部份为 Pre-Boot 区 , 占了 446 bytes ; 第二部份 是 Partition Table , 占了 66 bytes . Pre-Boot 区的作用之一 , 就是 去看看那个 Partition 被标成 Active , 然後去读那个 Partition 的 Boot 区 . 在 Linux 的启动方面 , 一般人最常把 LILO 放在 MBR 或 Superblock 假如你把 LILO 放在 MBR , 那很明显的 , 当读取到 MBR 的时候 , LILO 就被执行 , 此时 , 你的萤幕上会出现 boot: 接著 , 就进行 Load Kernel 的动作 . 在另一方面来说 , 假如你把 LILO 安装在 Superblock , 通常你 还会有一个管理开机的程式 , 也许是住在 MBR ( 像 OSBS ) 或者是放在一 个单独的 Partition ( 像 OS/2 的 Boot Manager ) . 再由这个管理开机 的程式去读取 LILO , 进而做 Load Kernel 的动作 . 好了 , 到了目前为止 , 我们已经讲到 Load Kernel 的动作 . Kernel 被 load 到 memory 中之後 , 接著进行一连串 probe 周边的动作 , 像串联埠 并联埠 , 软碟 , 音效卡 , 硬碟 , 光碟机 等 ...... 接著 mount root partition . 在这之後 , kernel 会起动 init 这个 process . init 这 个 process 的 PID 为 1 , 它是所有 process 的祖先 . 接下来呢 ? 系统就开始执行 /rc.d/rc.S , 在这里 , 我们暂时打住 , 先对大概的 initialization script 执行的顺序作一个浏览 , 请看下面 的流程 : init[1] rc.S begin <--- 目前我们已经讲到这里 rc.serial begin rc.serial end rc.S end init[1] enter runlevel 5 rc.M begin rc.inet1 begin rc.inet1 end rc.inet2 begin rc.inet2 end rc.font begin rc.font end rc.local begin rc.local end rc.M end login 上面的流程清楚的指出 , 在 rc.S 这个 shell script 中 , 会去执行 rc.serial 接著再执行 rc.M , rc.M 中又包含了 rc.inet1 , rc.inet2 , rc.font , rc.local 最後执行 login . 在下面的内容中 , 将为各位介绍这几个 shell script 从下面开始 , 凡是每一列之前有一个 # 的 , 为原来 shell script 中的注解 有两个 # 的 , 为笔者加上的注解 , 当然啦 , 没有任何 # 的为 shell script 的内容 , 而对命令或内容的解释 , 一律都写在命令或内容的前面 . 首先由 rc.S 开始 : ***************************** rc.S ********************************** 上一篇:Linux 常用命令(文件的复制、删除和移动) 下一篇:RedHat Linux口令恢复任我行 更多相关文章
|
推荐文章
精彩文章
|