난 알아내야 해압축 유형나는 리눅스 커널을 갖춘 아치 리눅스 시스템을 가지고 있지만 이론보다 더 많은 방법을 찾을 수 없습니다: 지금 bzip2
( bz
), 이전 gzip
( z
).
내 컴퓨터에서 다음 명령을 실행합니다.
$ file /boot/vmlinuz-linux
/boot/vmlinuz-linux: Linux kernel x86 boot executable bzImage, version 5.3.11-arch1-1 (linux@archlinux) #1 SMP PREEMPT Tue, 12 Nov 2019 22:19:48 +0000, RO-rootFS, swap_dev 0x5, Normal VGA
bzImage
이론적으로는 압축되어야 한다는 것을 알지만 gzip (z)
증명할 수는 없습니다.
gzip
bzImage는 압축을 위해 더 많은 알고리즘을 도입한 Linux 2.6.30을 사용해 왔습니다 . 이bz
접두사가 bzip2 압축(bzip2 패키지는 종종 접두사가 붙은 도구와 함께 배포됨)을 의미한다는 것이 일반적인 오해이지만bz
, 이는 사실이 아닙니다.bzless
bzcat
내 컴퓨터에서 이를 증명할 수 있는 방법이 있나요? 아니면 이 경우 이론 자체가 "경험적"입니까?
답변1
특정 커널 이미지를 실행하거나 구성을 조회하지 않고 해당 커널 이미지에서 어떤 압축이 사용되는지 최종적으로 결정하려면 커널 자체에서 사용하는 방법을 따를 수 있습니다.extract-vmlinux
스크립트:
이미지에서 압축기의 서명을 찾으세요.
gunzip
:\037\213\010
xz
:\3757zXZ\000
bzip2
:BZh
lzma
:\135\0\0\0
lzo
:\211\114\132
lz4
:\002!L\030
zstd
:(\265/\375
찾은 서명의 오프셋부터 시작하여 이미지에서 데이터를 추출해 보십시오.
결과(있는 경우)가 ELF 이미지인지 확인합니다.
대본을 수정했습니다여기이렇게 하면 압축 유형만 보고됩니다. GPL 2에서만 라이센스가 부여되었기 때문에 여기에 포함시키지 않았습니다.
답변2
커널이 지원하는 압축 방법을 확인할 수 있습니다. 어느 쪽인지 증명할 수 있도록 하나만 선택할 수 있습니다.
여기서는 gzip을 사용합니다.
$ zgrep CONFIG_KERNEL_ /proc/config.gz
CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_BZIP2 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_XZ is not set
# CONFIG_KERNEL_LZO is not set
# CONFIG_KERNEL_LZ4 is not set
답변3
VMlinuz는 다음 링크에 표시된 것처럼 gzip으로 압축되었습니다.
http://www.linfo.org/vmlinuz.html
https://en.wikipedia.org/wiki/Vmlinux
아이러니하게도 페이지에는 아래와 같이 많은 사람들이 확장 프로그램을 bzip2와 혼동한다고 나와 있습니다.
zImage 파일이라는 컴파일된 커널은 일부 이전 시스템에서 생성되고 이전 버전과의 호환성을 위해 최신 시스템에서 유지됩니다. zImage와 bzImage는 모두 다음과 같이 압축됩니다.보관소. 차이점은 zImage는 낮은 메모리(즉, 처음 640kB)로 압축이 풀리고 bzImage는 높은 메모리(1MB 이상)로 압축이 풀린다는 것입니다. 흔히 하는 오해가 있는데bz이미지실제로 압축을 위해 bzip2 유틸리티를 사용하십시오. b는 단지 big을 의미합니다.
이 정보가 귀하에게 도움이 되기를 바랍니다.