Vmlinux

리눅스 커널 부트와 압축 해제 과정.

리눅스 시스템에서 vmlinux는 리눅스가 지원하는 목적 파일 포맷들 중 하나에서 리눅스 커널을 포함하는 정적으로 링크된 실행 파일이며, ELF, COFF, a.out을 포함한다. vmlinux 파일은 커널 디버깅, 심볼 테이블 생성 등의 작업을 위해 필요하지만 멀티부트 헤더, 부트섹터, 셋업 루틴을 추가함으로써 운영 체제 커널로서 사용되기 전에 부팅이 가능한 상태여야 한다.

용어

[편집]

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

위치

[편집]

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

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

이 파티션은 /boot라는 파일시스템 계층에 마운트된다. 이것은 나중에 파일시스템 계층구조 표준(FHS)에 의해 표준화되었고 이 표준은 현재 리눅스 커널 이미지는 / 또는 /boot에 위치할 것을 요구하지만 실제로 이를 강제할 기술적인 제한은 존재하지 않는다.[2]

오브젝트 포맷

[편집]

다음은 x86-64 젠투 2.6.29 실행 커널 이미지에 있는 ELF 헤더이다.

$ 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

같이 보기

[편집]

추가 문헌

[편집]
  • Alavoor Vasudevan (2003년 8월 15일). 〈10. Kernel Files Information〉. 《The Linux Kernel HOWTO》. 2017년 10월 10일에 원본 문서에서 보존된 문서. 2018년 3월 21일에 확인함. 
  • Daniel Pierre Bovet (2013년 1월 3일). “Special sections in Linux binaries”. 《LWN.net》. 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. 

각주

[편집]
  1. “vmlinuz Definition”. 《www.linfo.org》. Bellevue Linux. 2005년 3월 29일. 2015년 6월 21일에 확인함. 
  2. 〈Section 3.5.2 — /boot : Static files of the boot loader〉. 《FHS 2.3》. 2004년 1월 29일. 2014년 3월 11일에 확인함. The operating system kernel must be located in either / or /boot. 

외부 링크

[편집]