내가 알고 있는 것(잘못 이해했다면 정정해 주세요):
가상 기기: 압축되고 자체 압축이 풀리는 부팅 가능한 Linux 이미지입니다. 항상 ELF? 어떻게 생성되나요?
zImage (또는 bzImage): 압축되고 자체 압축이 풀리는 부팅 가능한 Linux 이미지입니다. 항상 바이너리입니다. "make zImage"에 의해 생성됩니다.
일부 출처에서는 이것이 실제로 동일한 이미지라고 말합니다. 예를 들면 다음과 같습니다.여기그리고여기.
하지만 그렇지 않은 것 같습니다. 임베디드 Openwrt 프로젝트를 구축했고 "file vmlinuz"를 실행하면 다음과 같은 결과가 나타납니다.
vmlinuz: ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), statically linked, stripped
보시다시피 zImage와 같은 바이너리 파일이 아닌 ELF 형식입니다.
더욱 혼란스러운 점은 ubuntu vmlinuz에서 readelf를 실행하면 ELF 파일이 아니라는 점입니다.
답변1
vmlinuz도 마찬가지입니다.
를 실행하면 이를 알 수 있습니다 make install
. zImage 또는 bzImage는 에 설치됩니다 /boot/vmlinuz-$VERSION
.
일부 아키텍처에서는 이를 ELF로 포장하는 것처럼 보입니다(일부는 그렇지 않음). x86 기반 Linux는 LILO, syslinux 등과 같은 부트로더와의 호환성으로 인해 ELF가 없으면 멈출 수 있습니다. 어쩌면 그들은 GRUB이 ELF 파일을 로드하는 방식을 좋아하지 않을 수도 있습니다. 다른 아키텍처에서는 같은 이유로 ELF에 걸릴 수 있습니다. 압축이 풀린 이미지는 항상 ELF입니다(참조예를 들어).