Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

While browsing through the Kernel Makefiles, i found these terms. So i would like to know what is the difference between vmlinux, vmlinuz, vmlinux.bin, zimage & bzimage?

share|improve this question
outsize of I think zimage is gz compression and bzimage is bz compression... jut naming, afaik none of it means a damn thing. but I could be wrong. – xenoterracide Jan 7 '11 at 14:26
There is also vmlinuz.efi used on Ubuntu 14.04: askubuntu.com/questions/330541/what-is-vmlinuz-efi – Ciro Santilli 巴拿馬文件 六四事件 法轮功 Aug 24 '15 at 8:37
up vote 30 down vote accepted


This is the Linux kernel in an statically linked executable file format. Generally, you don't have to worry about this file, it's just a intermediate step in the boot procedure.

The raw vmlinux file may be useful for debugging purposes.


The same as vmlinux, but in a bootable raw binary file format. All symbols and relocation information is discarded. Generated from vmlinux by objcopy -O binary vmlinux vmlinux.bin.


The vmlinux file usually gets compressed with zlib. Since 2.6.30 LZMA and bzip2 are also available. By adding further boot and decompression capabilities to vmlinuz, the image can be used to boot a system with the vmlinux kernel. The compression of vmlinux can occur with zImage or bzImage.

The function decompress_kernel() handles the decompression of vmlinuz at bootup, a message indicates this:

Decompressing Linux... done
Booting the kernel.

zImage (make zImage)

This is the old format for small kernels (compressed, below 512KB). At boot, this image gets loaded low in memory (the first 640KB of the RAM).

bzImage (make bzImage)

The big zImage (this has nothing to do with bzip2), was created while the kernel grew and handles bigger images (compressed, over 512KB). The image gets loaded high in memory (above 1MB RAM). As today's kernels are way over 512KB, this is usually the preferred way.

An inspection on Ubuntu 10.10 shows:

ls -lh /boot/vmlinuz-$(uname -r)
-rw-r--r-- 1 root root 4.1M 2010-11-24 12:21 /boot/vmlinuz-2.6.35-23-generic

file /boot/vmlinuz-$(uname -r)
/boot/vmlinuz-2.6.35-23-generic: Linux kernel x86 boot executable bzImage, version 2.6.35-23-generic (buildd@rosea, RO-rootFS, root_dev 0x6801, swap_dev 0x4, Normal VGA
share|improve this answer
Where is this decompress_kernel() function implementation located? – Sen Jan 10 '11 at 5:43
Great Answer.. Thanks.. – Sen Jan 10 '11 at 5:44
It is located at /arch/$ARCH/boot/compressed/misc.c, see here: lxr.linux.no/#linux+v2.6.37/arch/x86/boot/compressed/… – wag Jan 10 '11 at 9:28

It's all in here: http://en.wikipedia.org/wiki/Vmlinux

share|improve this answer


A non-compressed and non-bootable Linux kernel file format, just an intermediate step to producing vmlinuz.

A compressed and bootable Linux kernel file. It is actually zImage or bzImage file.

For old kernels, just fit 640k ram size.

Big zImage, no 640k ram size limit, can much larger.

Please refer this document: vmlinuz Definition.

share|improve this answer

bzImage is the target used for x86 architectures working with PC BIOS. In contrast, zImage is an architecture-specific target most commonly used for embedded devices and works well with their bootloaders.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.