一、 概况
系统的引导和初始化是操作系统实现控制的第一步,也是集中体现系统优劣的重要部分。LINUX作为一个免费的准UNIX操作系统,在众多业余爱好者以及小型商业处理市场表现不俗,成为继WINDOWS系列后的另一个主流。了解LINUX系统的初始化,对于进一步掌握UNIX系统是十分有帮助的。 通常,LINUX系统的初始化可以分为两部分:内核部分和init程序部分。内核主要完成系统的硬件检测和初始化,init程序则主要完成系统的各项配置。 本文将着眼LINUX系统初始化的两个部分,初步解析LINUX的特点。
二、 初始化详解
1.内核部分
通常情况下,计算机首先用LILO程序引导内核的一部分(这部分没有被压缩),以此来引导内核的其他部分。LILO程序是最常用的、也是比较完善的LINUX系统引导器,PC机通常从硬盘的引导扇区读取这部分程序。关于LILO程序的详细内容可以参照其他资料。 内核被解压缩并装入内存后,开始初始化硬件和设备驱动程序。下面是内核初始化系统的具体步骤(各个版本之间会有一定的差异,下面是2.2.16-22版本的一个例子): (1) 检测CPU的主频和控制台的显示类型,并对CPU速度用Bogo MIPS程序进行估算。 (2) 此后内核通过外设显示系统内存信息:如131072k(128M),127820k剩余,使用的具体情况为:1048k内核代码,412k保留,1728k数据等。尔后是各类hash table的信息。 (3) 内核加载磁盘空间限量支持,完成CPU检测(包括检查数学协处理器),以及POSIX适应性检测。 (4) 初始化PCI BIOS,检测系统的PCI设备,并加载TCP/IP网络支持。 (5) 内核开始检测其他各种硬件设备:如PS/2端口设备,串行口设备,硬盘,软盘,SCSI等。 此后,内核将启动init程序,形成系统的第一个进程。下面是dmesg记录的内核初始化信息(部分):
Detected 499845 kHz processor. Console: colour VGA+ 80x25 Calibrating delay loop... 996.15 BogoMIPS Memory: 127820k/131072k available (1048k kernel code, 412k reserved, 1728k data, 64k init, 0k bigmem) Dentry hash table entries: 262144 (order 9, 2048k) Buffer cache hash table entries: 131072 (order 7, 512k) Page cache hash table entries: 32768 (order 5, 128k) VFS: Diskquotas version dquot_6.4.0 initialized CPU: Intel Celeron (Mendocino) stepping 05 Checking 386/387 coupling... OK, FPU using exception 16 error reporting. Checking hlt instruction... OK. POSIX conformance testing by UNIFIX mtrr: v1.35a (19990819) Richard Gooch (rgooch@atnf.csiro.au) PCI: PCI BIOS revision 2.10 entry at 0xfb190 PCI: Using configuration type 1 PCI: Probing PCI hardware Linux NET4.0 for Linux 2.2 …… Starting kswapd v 1.5 Detected PS/2 Mouse Port. Serial driver version 4.27 with MANY_PORTS MULTIPORT SHARE_IRQ enabled ttyS00 at 0x03f8 (irq = 4) is a 16550A ttyS01 at 0x02f8 (irq = 3) is a 16550A pty: 256 Unix98 ptys configured apm: BIOS version 1.2 Flags 0x07 (Driver version 1.13) Real Time Clock Driver v1.09 RAM disk driver initialized: 16 RAM disks of 4096K size …… hda: QUANTUM FIREBALLlct10 15, ATA DISK drive hdd: ASUS CD-S400/A, ATAPI CDROM drive ide0 at 0x1f0-0x1f7,0x3f6 on irq 14 ide1 at 0x170-0x177,0x376 on irq 15 hda: QUANTUM FIREBALLlct10 15, 14324MB w/418kB Cache, CHS=1826/255/63 Floppy drive(s): fd0 is 1.44M FDC 0 is a post-1991 82077 md driver 0.90.0 MAX_MD_DEVS=256, MAX_REAL=12 raid5: measuring checksumming speed raid5: MMX detected, trying high-speed MMX checksum routines …… using fastest function: p5_mmx (1168.146 MB/sec) scsi : 0 hosts. scsi : detected total. md.c: sizeof(mdp_super_t) = 4096 Partition check: hda: hda1 hda2 < hda5 hda6 hda7 hda8 hda9 hda10 hda11 > autodetecting RAID arrays autorun ... ... autorun DONE. VFS: Mounted root (ext2 filesystem) readonly. Freeing unused kernel memory: 64k freed ……