{{위키데이터 속성 추적}}
{{소문자}}
[[파일:Linux-kernel-vmlinux.png|섬네일|리눅스 커널 부트와 압축 해제 과정.]]
[[리눅스]] 시스템에서 '''<code>vmlinux</code>'''는 리눅스가 지원하는 [[목적 파일]] 포맷들 중 하나에서 [[리눅스 커널]]을 포함하는 [[정적 라이브러리|정적으로 링크된]] [[실행 파일]]이며, [[ELF 파일 형식|ELF]], [[COFF]], [[a.out]]을 포함한다. <code>vmlinux</code> 파일은 커널 [[디버깅]], [[심볼 테이블]] 생성 등의 작업을 위해 필요하지만 멀티부트 헤더, [[부트섹터]], 셋업 루틴을 추가함으로써 [[운영 체제 커널]]로서 사용되기 전에 부팅이 가능한 상태여야 한다.

== 용어 ==
전통적으로 [[유닉스]] 플랫폼은 커널 이미지 <code>/unix</code>를 호출하였다. [[가상 메모리]]의 개발과 함께 이 기능을 지원했던 커널들은 이와 구별하기 위해 <code>vm-</code> 두문자를 부여받았다. <code>vmlinux</code>라는 이름은 [[vmunix]]의 돌연변이이며, <code>vmlinuz</code> 끝의 문자 <code>z</code>는 압축되었다는 것을 의미한다. (이를테면 [[gzip]])<ref>{{웹 인용|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>

== 위치 ==
전통적으로 커널은 파일 시스템 계층의 [[루트 디렉터리]]에 위치하였다. 그러나 이 부트로더는 [[바이오스]] 드라이버를 사용하여 [[하드 디스크]]에 접근해야 했으므로 일부 [[i386]] 시스템에서의 제한으로 인해 하드 디스크의 [[실린더 1024|처음 1024 실린더]]가 어드레싱가능하다는 것을 의미했다.

이를 극복하기 위해 리눅스 배포자들은 [[부트로더]]와 커널 관련 파일을 저장하기 위해 사용자가 드라이브의 처음 부분에 [[디스크 파티션|파티션]]을 생성하도록 권장하였다. [[GRUB]], [[LILO]], [[SYSLINUX]]는 일반적인 부트로더들이다.

이 파티션은 <code>/boot</code>라는 파일시스템 계층에 마운트된다. 이것은 나중에 [[파일시스템 계층구조 표준]](FHS)에 의해 표준화되었고 이 표준은 현재 리눅스 커널 이미지는 <code>/</code> 또는 <code>/boot</code>에 위치할 것을 요구하지만 실제로 이를 강제할 기술적인 제한은 존재하지 않는다.<ref>{{서적 인용
 | chapter    = Section 3.5.2 — /boot : Static files of the boot loader
 | title      = FHS 2.3
 | date       = 2004-01-29
 | accessdate = 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>

== 오브젝트 포맷 ==
다음은 x86-64 [[젠투 리눅스|젠투]] 2.6.29 실행 커널 이미지에 있는 ELF 헤더이다.

<syntaxhighlight lang="console">
$ readelf -h vmlinux
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x1000000
  Start of program headers:          64 (bytes into file)
  Start of section headers:          13951312 (bytes into file)
  Flags:                             0x0
  Size of this header:               64 (bytes)
  Size of program headers:           56 (bytes)
  Number of program headers:         5
  Size of section headers:           64 (bytes)
  Number of section headers:         45
  Section header string table index: 42
</syntaxhighlight>

== 같이 보기 ==
* [[리눅스 커널]]
* [[initrd]]

== 추가 문헌 ==
*{{서적 인용
 |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
 |확인날짜 = 2018-03-21
 |보존url    = https://web.archive.org/web/20171010203604/http://oss.sgi.com/LDP/HOWTO/Kernel-HOWTO/kernel_files_info.html
 |보존날짜 = 2017-10-10
 |url-status = dead
}}
*{{저널 인용
 | 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.
}}

== 각주 ==
{{각주}}

== 외부 링크 ==
* [http://www.faqs.org/docs/kernel_2_4/lki-1.html Boot process]

{{리눅스 커널}}

[[분류:리눅스 커널]]