快速业务通道

linux下内核相关的三个文件详解

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-15

  在网络中,不少服务器采用的是Linux系统.为了进一步提高服务器的性能,可能需要根据特定的硬件及需求重新编译Linux内核.编译Linux内核,需要根据规定的步骤进行,编译内核过程中涉及到几个重要的文件.比如对于RedHat Linux,在/boot目录下有一些与Linux内核有关的文件,进入/boot执行:ls -l.编译过RedHat Linux内核的人对其中的System.map 、vmlinuz、initrd-2.4.7-10.img印象可能比较深刻,编译内核过程中涉及到这些文件的建立等操作.那么这几个文件是怎么产生的?又有什么作用呢?本文对此做些介绍.

  一、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的压缩文件.

  二、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压缩的文件.

  linuxrc这个脚本initrd实现加载一些模块和安装文件系统等. initrd映象文件是使用mkinitrd创建的.mkinitrd实用程序能够创建initrd映象文件.这个命令是RedHat专有的.其它 Linux发行版或许有相应的命令.这是个很方便的实用程序.具体情况请看帮助:man mkinitrd.

  三、 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

  下面几行来自/usr/src/linux-2.4/Makefile:

  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

  在进行程序设计时,会命名一些变量名或函数名之类的符号.Linux内核是一个很复杂

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号