Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Vmlinux
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Executable file containing the Linux kernel}} {{lowercase title}} {{Refimprove|date=April 2012}} [[Image:Linux-kernel-vmlinux.png|right|thumb|Linux kernel boot and decompression process]] '''<code>vmlinux</code>''' is a [[static library|statically linked]] [[executable]] file that contains the [[Linux kernel]] in one of the [[object file]] formats supported by Linux, which includes [[Executable and Linkable Format]] (ELF) and [[Common Object File Format]] (COFF). The <code>vmlinux</code> file might be required for kernel [[debugging]], [[symbol table]] generation or other operations, but must be made bootable before being used as an [[operating system kernel]] by adding a [[Multiboot Specification|multiboot]] header, [[bootsector]] and setup routines. ==Etymology== Traditionally, [[UNIX]] platforms called the kernel image <code>/unix</code>. With the development of [[virtual memory]], kernels that supported this feature were given the <code>vm</code>- prefix to differentiate them. The name <code>vmlinux</code> is a mutation of [[vmunix]], while in <code>vmlinuz</code> the letter <code>z</code> at the end denotes that it is compressed (for example [[gzip]]ped).<ref name="linfo">{{cite web | url = http://www.linfo.org/vmlinuz.html | website = www.linfo.org | date = March 29, 2005 | publisher = Bellevue Linux | access-date = 2015-06-21 | title = vmlinuz Definition}}</ref> ==Location== Traditionally, the kernel was located in the [[root directory]] of the filesystem hierarchy; however, as the bootloader must use [[BIOS]] drivers to access the [[hard disk]], limitations on some [[i386]] systems meant only the [[cylinder 1024|first 1024 cylinders]] of the [[hard disk]] were addressable. To overcome this, Linux distributors encouraged users to create a [[disk partitioning|partition]] at the beginning of their drives specifically for storing [[bootloader]] and kernel-related files. [[GRUB]], [[LILO (boot loader)|LILO]] and [[SYSLINUX]] are common [[bootloader]]s. By convention, this partition is [[mount (computing)|mount]]ed on the filesystem hierarchy as <code>/boot</code>. This was later standardised by the [[Filesystem Hierarchy Standard]] (FHS), which now requires the Linux kernel image to be located in either <code>/</code> or <code>/boot</code>, although there is no technical restriction enforcing this.<ref>{{cite book | chapter = Section 3.5.2 — /boot : Static files of the boot loader | title = FHS 2.3 | date = 2004-01-29 | access-date = 2014-03-11 | url = http://www.pathname.com/fhs/pub/fhs-2.3.html#BOOTSTATICFILESOFTHEBOOTLOADER | quote = The operating system kernel must be located in either / or /boot.}}</ref> ==Compression== Traditionally, when creating a bootable [[Kernel (operating system)|kernel image]], the kernel is also [[data compression|compressed]] using [[gzip]], or, since Linux 2.6.30,<ref name="linux-2.6.30_compression">Linux 2.6.30, released the 9th of June 2009, added support to compress the kernel image with the LZMA and bzip2 algorithms [https://kernelnewbies.org/Linux_2_6_30#head-5773b3b80a9c48eca5aae1e45561f9237d493ae1]</ref> using [[LZMA]] or [[bzip2]], which requires a very small [[data compression|decompression]] stub to be included in the resulting image. The stub decompresses the kernel code, on some systems printing dots to the console to indicate progress, and then continues the boot process. Support for [[Lempel–Ziv–Oberhumer|LZO]],<ref>Linux 2.6.33, released on February 24, 2010, added support to compress the kernel image with LZO [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=7dd65feb6c603e13eba501c34c662259ab38e70e]</ref> [[Lempel–Ziv–Markov_chain_algorithm#xz_and_7z_formats|xz]],<ref>Linux 2.6.38, released on March 14, 2011, added support to compress the kernel image with xz [https://kernelnewbies.org/Linux_2_6_38#Core]</ref> [[LZ4 (compression algorithm)|LZ4]]<ref>Linux 3.11, released on September 2, 2013, added support to compress the kernel image with LZ4 [https://kernelnewbies.org/Linux_3.11#Core]</ref> and [[zstd]]<ref>Linux 5.9, released on October 11, 2020, added support to compress the kernel image, [[initrd]] and [[initramfs]] with zstd [https://kernelnewbies.org/Linux_5.9#Support_for_ZSTD_compressed_kernel.2C_ramdisk_and_initramfs]</ref> compression was added later. The decompression routine is a negligible factor in boot time, and prior to the development of the ''bzImage'', the size constraints of some architectures, notably i386, were extremely limiting, making compression a necessity. On the [[SPARC]] architecture, the vmlinux file is compressed using simple [[gzip]], because the [[SILO (boot loader)|SILO]] boot loader transparently decompresses gzipped images. <!-- which convention!? rather "often" or "usually" but there's no convention... --> The filename of the bootable image is not important, but many popular distributions use ''vmlinuz''. ==bzImage== [[Image:Anatomy-of-bzimage.png|thumb|Anatomy of a bzImage]] As the Linux kernel matured, the size of the kernels generated by users grew beyond the limits imposed by some architectures, where the space available to store the compressed kernel code is limited. The bzImage (''big zImage'') format was developed to overcome this limitation by splitting the kernel over non-contiguous [[computer storage|memory]] regions.{{citation needed|date=October 2018}} The bzImage was compressed using [[gzip]] until Linux 2.6.30,<ref name="linux-2.6.30_compression" /> which [[#Compression|introduced more algorithms]]. Although the <code>bz</code> [[prefix (linguistics)|prefix]] may suggest that [[bzip2]] compression is used, this is not the case.<ref name="linfo"/> (The bzip2 package is often distributed with tools prefixed with <code>bz</code>, such as <code>bzless</code>, <code>bzcat</code>, etc.) The bzImage file is in a specific format. It contains concatenated <code>bootsect.o</code> + <code>setup.o</code> + <code>misc.o</code> + <code>piggy.o</code>.<ref>{{cite mailing list | url = https://lkml.org/lkml/1999/9/28/29 | title = Re: bzImage decompression | date = 1999-09-28 | mailing-list = [[Linux kernel mailing list|LKML]] | author = Yann Droneaud | quote = The zImage contain bootsect.o + setup.o + misc.o + piggy.o}}</ref> <code>piggy.o</code> contains the gzipped vmlinux file in its data section. The script <code>extract-vmlinux</code> found under <code>scripts/</code> in the kernel sources decompresses a kernel image. Some distributions (e.g. [[Red Hat]] and clones) may come with a <code>kernel-debuginfo</code> [[RPM Package Manager|RPM]] that contains the <code>vmlinux</code> file for the matching kernel RPM, and it typically gets installed under <code>/usr/lib/debug/lib/modules/`uname -r`/vmlinux</code> or <code>/usr/lib/debug/lib64/modules/`uname -r`/vmlinux</code>. ==See also== {{Portal|Linux}} * [[Linux kernel]] * [[Module (Linux)]] * [[initrd]] * [[System.map]] * [[Object file]] ==Notes and references== {{Reflist}} ==Further reading== * {{cite book |chapter = 10. Kernel Files Information |author = Alavoor Vasudevan |date = 2003-08-15 |title = The Linux Kernel HOWTO |url = http://oss.sgi.com/LDP/HOWTO/Kernel-HOWTO/kernel_files_info.html |access-date = 2014-03-11 |archive-date = 2017-10-10 |archive-url = https://web.archive.org/web/20171010203604/http://oss.sgi.com/LDP/HOWTO/Kernel-HOWTO/kernel_files_info.html |url-status = dead }} * {{cite journal | author = Daniel Pierre Bovet | date = 2013-01-03 | title = Special sections in Linux binaries | url = https://lwn.net/Articles/531148/ | journal = [[LWN.net]] | quote = all special sections appearing in the Linux kernel end up packed in one of the segments defined in the vmlinux ELF header. Each special section fulfills a particular purpose.}} ==External links== * [http://www.faqs.org/docs/kernel_2_4/lki-1.html Boot process] {{Linux kernel}} [[Category:Linux kernel]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Citation needed
(
edit
)
Template:Cite book
(
edit
)
Template:Cite journal
(
edit
)
Template:Cite mailing list
(
edit
)
Template:Cite web
(
edit
)
Template:Linux kernel
(
edit
)
Template:Lowercase title
(
edit
)
Template:Portal
(
edit
)
Template:Refimprove
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)