한번이라도, 조금이라도 뭔가 해보거나 알아보고 질문하시는 것인지 궁금한데요.
컴파일한 결과물은 모두 ELF object 이고, grub 이건 커널이건 ELF object 가 컴파일 및 링크의 최종 결과물입니다.
빌드 로그를 뜯어보시면 컴파일과 링크, 바이너리 변환 과정 및 기타등등 후처리 과정이 그대로 보이실텐데.
제가 추측한 리눅스 커널 이미지 파일은 /boot/vmlinuz-4.4.0-53-generic 이라고 생각했었지만, bash shell에서:
$ readelf /boot/vmlinuz-4.4.0-53-generic -aW
위의 명령을 하면, 아래와 같은 에러메시지가 뜨기 때문입니다.
readelf: Error: Input file 'vmlinuz-4.4.0-53-generic' is not readable.
그 이유는 vmlinuz-4.4.0-53-generic이 압축파일이기 때문이고, 때문에 아래와 같이 명령어를 치면 ELF 파일로 풀립니다.
이
$ sudo /usr/src/linux-headers-$(uname -r)/scripts/extract-vmlinux vmlinuz-$(uname -r) > /home/skyer/temp
제가 질문에서 의미했던 컴파일된 커널 이미지란, 컴파일 -> 링킹 -> bootable image 생성 이 모든 단계를 거쳐서 생성된 최종 부팅가능한 커널 이미지였습니다. 질문이 자세하지 못하여 오해를 불러일으켜드려서 죄송합니다.
대부분의 아키텍쳐에선 vmlinux 를 그대로 사용하지 않고 objcopy 를 이용해서 기계어만 나열된 덩어리로 변환한 다음에 압축을 하던가 그대로 사용하던가 합니다.
extract-vmlinux 는 '커널 이미지 파일'에 포함된 압축해제코드를 제거하고, 압축해제를 대신 해주는 역할일 뿐이니,
이걸 해서 ELF 가 나오는 것은 x86을 비롯한 극소수입니다.
한번이라도, 조금이라도 뭔가 해보거나 알아보고
한번이라도, 조금이라도 뭔가 해보거나 알아보고 질문하시는 것인지 궁금한데요.
컴파일한 결과물은 모두 ELF object 이고, grub 이건 커널이건 ELF object 가 컴파일 및 링크의 최종 결과물입니다.
빌드 로그를 뜯어보시면 컴파일과 링크, 바이너리 변환 과정 및 기타등등 후처리 과정이 그대로 보이실텐데.
기분상하게 해드렸다면 죄송합니다. 제가 태초에 이 질문을 드린 이유는
제가 추측한 리눅스 커널 이미지 파일은 /boot/vmlinuz-4.4.0-53-generic 이라고 생각했었지만, bash shell에서:
$ readelf /boot/vmlinuz-4.4.0-53-generic -aW
위의 명령을 하면, 아래와 같은 에러메시지가 뜨기 때문입니다.
readelf: Error: Input file 'vmlinuz-4.4.0-53-generic' is not readable.
그 이유는 vmlinuz-4.4.0-53-generic이 압축파일이기 때문이고, 때문에 아래와 같이 명령어를 치면 ELF 파일로 풀립니다.
이
$ sudo /usr/src/linux-headers-$(uname -r)/scripts/extract-vmlinux vmlinuz-$(uname -r) > /home/skyer/temp
제가 질문에서 의미했던 컴파일된 커널 이미지란, 컴파일 -> 링킹 -> bootable image 생성 이 모든 단계를 거쳐서 생성된 최종 부팅가능한 커널 이미지였습니다. 질문이 자세하지 못하여 오해를 불러일으켜드려서 죄송합니다.
대부분의 아키텍쳐에선 vmlinux 를 그대로
대부분의 아키텍쳐에선 vmlinux 를 그대로 사용하지 않고 objcopy 를 이용해서 기계어만 나열된 덩어리로 변환한 다음에 압축을 하던가 그대로 사용하던가 합니다.
extract-vmlinux 는 '커널 이미지 파일'에 포함된 압축해제코드를 제거하고, 압축해제를 대신 해주는 역할일 뿐이니,
이걸 해서 ELF 가 나오는 것은 x86을 비롯한 극소수입니다.
결국 첫번째 답글에 답이 있습니다.
결국 첫번째 답글에 답이 있습니다.
컴파일,링크 결과물은 elf이고, 후처리가 있는겁니다.
댓글 달기