按下电源,咔一下,电脑启动啦,接着BIOS的画面出来啦,不一会,GRUB的界面出来,然后就是一行接一行的字符在黑屏上闪动,不时地有OK的字样出现.呵呵,不要走神哈,该输入用户名和密码啦,….成功地进入了系统,这算是系统启动完成啦。那么这个过程到底有什么事情发生啦,哪些值得我们学习呢?本文就以linux 开机为线索,讲述引导器,内核,根文件系统的关系。
! s) p2 A7 h1 O# i7 d: T% U% V( |1)引导器
7 X, R& L" a& k: H这个是大家所熟知的吧,linux下常用的就有:grub,这是当今主流啦;lilo,这啊,曾经风光过,现在让grub接了重任;syslinux这是个轻量级的引导器,一般在光盘,USB上做引导器,做个liveUSB的应该很清楚哦,无盘启动的应用中也能找到它的身影.
/ H3 O/ X9 Y0 Y e引导器的主要功能就是找到内核(vmlinuz),然后把它载入内存,当然还有initrd啦,以GRUB为例,在我的系统(centos5.2)里是这么写的7 c: q, X @9 M k& U
. K, y& z- t8 D4 P6 ?# [8 p, M$ J: u
#/boot/grub/menu.lst 5 l. B D5 F) ]. x, r/ T9 n8 b6 }
title Centos 5.2 kernel-2.6.18-92.1.17.el5
% }$ O3 U) {2 t( c( r- ^; _root (hd0,7) H* Y. A. b, V$ Z
kernel /vmlinuz-2.6.18-92.1.17.el5 root=/dev/VolGroup00/LogVol004 R" |3 P$ z: k3 |8 n
initrd /initrd-2.6.18-92.1.17.el5.img; @4 w% o, Y; B
boot
8 y: ^+ y2 t( _9 s1 ]$ l j
" g1 i' q2 M, u1 w( Y在这明确了内核的位置,并向内核传递了一些参数。initrd扮了一个很重要的角色 ,负责在内核访问根文件系统前加载驱动。3 O% r3 }) ]$ i& y8 f) Q6 }! s
2)内核" E$ n: Q- i( O2 {# E7 m- B1 {
一个完整的内核就是由内核源码产生的,在这kernel.org 能找到源码,压缩后有50M左右,解开后有好几百M呢,我们可以重新编译源码来更新我们已有的内核,以提高性能和兼容能力。那么这个源码经编译后产出了哪些东东呢,出以我的机子为例:* D& k C4 d0 b! J# R2 z7 j& c
A)内核部分,在/boot分区下9 @2 f" A( A/ s3 H
; t f! t4 ]- X8 L3 U f$ b/boot/initrd-2.6.18-92.1.17.el5.img, r& c' b# O# n+ B% S ~
/boot/System.map-2.6.18-92.1.17.el5…………….这是符号表,函数与地址的映射关系. C; G( a7 a6 ?
/boot/vmlinuz-2.6.18-92.1.17.el5
* P6 @+ o2 c: Z( {* y, u/boot/config-2.6.18-92.1.17.el5………………………..内核的配置文件,由make xconfig命令产生的' X' u$ }0 @) P
5 `2 h0 l( A# v" _2 J5 J
* }9 _. x& Z! M. A+ g- ]& X" LB) 内核模块部分,在/lib/modules/2.6.18-92.1.17.el5目录下 ,2.6.18-92.1.17.el5这是版本号,每一个人的机子上可能会不同。所有模块都在这,还有它们之间的依赖关系 |