/boot分区就是作业系统的核心及在引导过程中使用的档案,一般是几年前的版本要求划分的一个区,大小为100MB左右,但现在的新版本都不需要对这个分区进行单独划分,也就是说你完全可以不分/boot。
安装Linux只要求两个基本分区,即根分区及交换分区,如果你的磁碟空间足够大,可以多划分空间给根分区,你也可以把常用的目录新建到桌面,如下载的软体包,放到桌面不影响你进入Linux系统的速度,这要求你有足够大的根分区。
基本介绍
- 中文名boot分区
- 外文名boot
boot分区
一 个/boot分区 这里提到的分区多数是针对大的系统,这个分区则对空间很少的小系统很有用。所有LILO启动时需要的档案都在/boot目录里,因为/boot中的这些文 件(包括Linux核心)占1MB空间,如果很难为LILO要用的根分区安排100MB空间,可以幸运地只用5-10MB的分区来存放/boot,但仍然 需要创建一个根分区,这时,它可以在系统的任何地方(受BIOS的限制)使用含有/boot的分区。
BOOT目录下的档案
vmlinuz
vmlinuz是可引导的、压缩的核心。“vm”代表“Virtual Memory”。Linux 支持虚拟记忆体,不像老的作业系统比如DOS有640KB记忆体的限制。Linux能够使用硬碟空间作为虚拟记忆体,得名“vm”。vmlinuz是可执行的Linux核心,它位于/boot/vmlinuz。
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的压缩档案。
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的压缩档案。
initrd-x.x.x.img
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压缩的档案,initrd实现载入一些模组和安装档案系统等功能。
initrd映象档案是使用mkinitrd创建的。mkinitrd实用程式能够创建initrd映象档案。这个命令是RedHat专有的。其它Linux发行版或许有相应的命令,:man mkinitrd下面的命令创建initrd映象档案。
initrd映象档案是使用mkinitrd创建的。mkinitrd实用程式能够创建initrd映象档案。这个命令是RedHat专有的。其它Linux发行版或许有相应的命令,:man mkinitrd下面的命令创建initrd映象档案。
System.map
System.map是一个特定核心的核心符号表。它是你当前运行的核心的System.map的连结。
核心符号表是怎幺创建的呢? System.map是由“nm vmlinux”产生并且不相关的符号被滤出。
编译核心时,System.map创建在/usr/src/linux-2.4/System.map。像下面这样:
nm /boot/vmlinux-2.4.7-10 > System.map
nm vmlinux | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map
然后複製到/boot:
cp /usr/src/linux/System.map /boot/System.map-2.4.7-10
是System.map档案的一部分:
在进行程式设计时,会命名一些变数名或函式名之类的符号。Linux核心是一个很複杂的代码块,有许许多多的全局符号。
Linux核心不使用符号名,而是通过变数或函式的地址来识别变数或函式名。比如不是使用size_t BytesRead这样的符号,而是像c0343f20这样引用这个变数。
对于使用计算机的人来说,更喜欢使用那些像size_t BytesRead这样的名字,而不喜欢像c0343f20这样的名字。核心主要是用c写的,所以编译器/连线器允许我们编码时使用符号名,当核心运行时使用地址。
,在有的情况下,我们需要知道符号的地址,或者需要知道地址对应的符号。这由符号表来完成,符号表是所有符号连同它们的地址的列表。就是一个核心符号表,可知变数名checkCPUtype在核心地址c01000a5。
Linux 符号表使用到2个档案:
/proc/ksyms
System.map
/proc/ksyms是一个“proc file”,在核心引导时创建。实际上,它并不真正的是一个档案,它只不过是核心数据的表示,却给人们是一个磁碟档案的假象,这从它的档案大小是0可以看出来。,System.map是存在于你的档案系统上的实际档案。
当你编译一个新核心时,各个符号名的地址要发生变化,你的老的System.map具有的是错误的符号信息。每次核心编译时产生一个新的System.map,你应当用新的System.map来取代老的System.map。
虽然核心本身并不真正使用System.map,但其它程式比如klogd,lsof和ps等软体需要一个正确的System.map。如果你使用错误的或没有System.map,klogd的输出将是不可靠的,这对于排除程式故障会带来困难。没有System.map,你可能会面临一些令人烦恼的提示信息。
少数驱动需要System.map来解析符号,没有为你当前运行的特定核心创建的System.map它们就不能正常工作。
Linux的核心日誌守护进程klogd为了执行名称-地址解析,klogd需要使用System.map。System.map应当放在使用它的软体能够找到它的地方。执行:man klogd可知,如果没有将System.map作为一个变数的位置给klogd,那幺它将按照下面的顺序,在三个地方查找System.map:
/boot/System.map
/System.map
/usr/src/linux/System.map
System.map也有版本信息,klogd能够智慧型地查找正确的映象(map)档案。
核心符号表是怎幺创建的呢? System.map是由“nm vmlinux”产生并且不相关的符号被滤出。
编译核心时,System.map创建在/usr/src/linux-2.4/System.map。像下面这样:
nm /boot/vmlinux-2.4.7-10 > System.map
nm vmlinux | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map
然后複製到/boot:
cp /usr/src/linux/System.map /boot/System.map-2.4.7-10
是System.map档案的一部分:
在进行程式设计时,会命名一些变数名或函式名之类的符号。Linux核心是一个很複杂的代码块,有许许多多的全局符号。
Linux核心不使用符号名,而是通过变数或函式的地址来识别变数或函式名。比如不是使用size_t BytesRead这样的符号,而是像c0343f20这样引用这个变数。
对于使用计算机的人来说,更喜欢使用那些像size_t BytesRead这样的名字,而不喜欢像c0343f20这样的名字。核心主要是用c写的,所以编译器/连线器允许我们编码时使用符号名,当核心运行时使用地址。
,在有的情况下,我们需要知道符号的地址,或者需要知道地址对应的符号。这由符号表来完成,符号表是所有符号连同它们的地址的列表。就是一个核心符号表,可知变数名checkCPUtype在核心地址c01000a5。
Linux 符号表使用到2个档案:
/proc/ksyms
System.map
/proc/ksyms是一个“proc file”,在核心引导时创建。实际上,它并不真正的是一个档案,它只不过是核心数据的表示,却给人们是一个磁碟档案的假象,这从它的档案大小是0可以看出来。,System.map是存在于你的档案系统上的实际档案。
当你编译一个新核心时,各个符号名的地址要发生变化,你的老的System.map具有的是错误的符号信息。每次核心编译时产生一个新的System.map,你应当用新的System.map来取代老的System.map。
虽然核心本身并不真正使用System.map,但其它程式比如klogd,lsof和ps等软体需要一个正确的System.map。如果你使用错误的或没有System.map,klogd的输出将是不可靠的,这对于排除程式故障会带来困难。没有System.map,你可能会面临一些令人烦恼的提示信息。
少数驱动需要System.map来解析符号,没有为你当前运行的特定核心创建的System.map它们就不能正常工作。
Linux的核心日誌守护进程klogd为了执行名称-地址解析,klogd需要使用System.map。System.map应当放在使用它的软体能够找到它的地方。执行:man klogd可知,如果没有将System.map作为一个变数的位置给klogd,那幺它将按照下面的顺序,在三个地方查找System.map:
/boot/System.map
/System.map
/usr/src/linux/System.map
System.map也有版本信息,klogd能够智慧型地查找正确的映象(map)档案。