1.grub 系统引导工具,有linux ,windows版本 用于一台电脑安装多种操作系统,它提供给各个系统引导也就是说做一个多系统启动的菜单。
2.initrd
initrd 映像中包含了支持 Linux 系统两阶段引导过程所需要的必要可执行程式和系统文件。
initrd是“initial
ramdisk”的简写。initrd一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。图中的initrd-
2.4.7-10.img主要是用于加载ext3等文件系统及scsi设备的驱动。比如,使用的是scsi硬盘,而内核vmlinuz中并没有这个
scsi硬件的驱动,那么在装入scsi模块之前,内核不能加载根文件系统,但scsi模块存储在根文件系统的/lib/modules下。为了解决这个
问题,可以引导一个能够读实际内核的initrd内核并用initrd修正scsi引导问题。initrd-2.4.7-10.img是用gzip压缩的
文件,下面来看一看这个文件的内容,操作步骤如下图所示:
从图中linuxrc这个脚本的内容可以看到,initrd实现加载一些模块和安装文件系统等。
initrd映象文件是使用mkinitrd创建的。mkinitrd实用程序能够创建initrd映象文件。这个命令是RedHat专有的。其它Linux发行版或许有相应的命令。这是个很方便的实用程序。具体情况请看帮助:man mkinitrd
3.vmlinuz
vmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”。Linux
支持虚拟内存,不像老的操作系统比如DOS有640KB内存的限制。Linux能够使用硬盘空间作为虚拟内存,因此得名“vm”。vmlinuz是可执行
的Linux内核,它位于/boot/vmlinuz,它一般是一个软链接,比如图中是vmlinuz-2.4.7-10的软链接。
vmlinuz的建立有两种方式。一是编译内核时通过“make zImage”创建,然后通过:
“cp
/usr/src/linux-2.4/arch/i386/linux/boot/zImage
/boot/vmlinuz”产生。zImage适用于小内核的情况,它的存在是为了向后的兼容性。二是内核编译时通过命令make
bzImage创建,然后通过:“cp /usr/src/linux-2.4/arch/i386/linux/boot/bzImage
/boot/vmlinuz”产生。bzImage是压缩的内核映像,需要注意,bzImage不是用bzip2压缩的,bzImage中的bz容易引起
误解,bz表示“big zImage”。 bzImage中的b是“big”意思。
zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip压缩的。它们不仅是一个压缩文件,而且在这两个文件的开头部分内嵌有gzip解压缩代码。所以你不能用gunzip 或 gzip –dc解包vmlinuz。
内
核文件中包含一个微型的gzip用于解压缩内核并引导它。两者的不同之处在于,老的zImage解压缩内核到低端内存(第一个640K),bzImage
解压缩内核到高端内存(1M以上)。如果内核比较小,那么可以采用zImage
或bzImage之一,两种方式引导的系统运行时是相同的。大的内核采用bzImage,不能采用zImage。
vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件。
4.kernel
5.System.map内核符号映射表,顾名思义就是将内核中的符号(也就是内核中的函数)和它的地址能联系起来的一个列表
下面是一个system.map一部分,每次编译内核都会产生一个新的system.map
c0100000 A _text
c0100000 t startup_32
c01000a5 t checkCPUtype
c0100133 t is486
c0100142 t is386
c010018c t L6
c010018e t ready
c010018f t check_x87
c01001b6 t setup_idt
c01001d3 t rp_sidt
c01001e0 T stack_start
c01001e8 t int_msg
c01001fc t ignore_int
c010021e T idt_descr
c0100224 T cpu_gdt_descr
c0101000 T swapper_pg_dir
c0102000 T pg0
c0103000 T pg1
c0104000 T empty_zero_page
c0105000 T _stext