跳转到内容

vmlinux

本页使用了标题或全文手工转换
维基百科,自由的百科全书
Linux kernel boot and decompression process.

在linux系统中,vmlinuxvmlinuz)是一个包含linux kernel的静态连结的执行档,档案型态可能是linux接受的执行档格式之一(ELFCOFFa.out),vmlinux若要用于除错时则必须要在开机前增加symbol table。

位置

一般来说,核心的位置会在档案系统的 /boot 目录下,然而因为bootloader 必须使用 BIOS 的硬碟驱动程式,在一些i386的机器上必须要放在前 1024 个磁柱内。

为了克服这个限制,Linux 发行版鼓励使用者建立一个磁区用来存放 bootloader 与核心相关的开机档案,例如 GRUB, LILOSYSLINUX ... 。而这个磁区通常会挂载到系统的/boot 上,这是 FHS (Filesystem Hierarchy Standard) 标准内定义的。

压缩

一般来说,当建立一个可启动的核心时,此核心会先经过 zlib 演算法压缩,而在核心内会包含一个相当小的解压缩程式 stub,当 stub 解压缩核心程式的时候会对 console 视窗印出"点"来表示解压缩进度。

解压缩所花费的时间在开机时间中所占程度来说其实是相当小的,而在早期的 bzImage 的发展中对于核心的大小会有所限制(特别是 i386 架构),在此情况下压缩则是必须的。

vmlinuz

vmlinuz 是vmlinux 经过 gzip和objcopy 制作出来的压缩文件,当然不再是vmlinux的一个简单的压缩版,这么简单。vmlinuz是一种统称,有两种具体的表现形式zImage 和bzImage。bzimage和zImage的区别在于本身的大小,以及加载到内存时的地址不同,zImage在0~640KB,而bzImage则在1M以上的位置。

bzImage

随著 linux Kernel 的成长,核心的内容日益增加超越了原本的限制大小。bzImage (big zImage) 格式则为了克服此缺点开始发展,利用将核心切割成不连续的记忆体区块来克服大小限制。

bzImage 格式仍然是以 zlib 演算法来做压缩,虽然有一些广泛的误解就是因为以 bz- 为开头,而让人误以为是使用 bzip2 压缩方式(bzip2 套件所带的工具程式通常是以 bz- 为开头的,例如 bzless, bzcat ...)。

bzImage 档案是一个特殊的格式,包含了 bootsect.o + setup.o + misc.o + piggy.o 串接。piggy.o 包含了一个 gzip 格式的 vmlinux 档案(可以参看 arch/i386/boot/下的 compressed/Makefile piggy.o)

标题

参见

外部链接