나는 최신 소스 코드인 linux-6.0-rc5를 사용하여 내 컴퓨터에서 Linux 커널을 컴파일하려고 했습니다. 모든 일이 잘 진행되고 있지만 뭔가 마음에 걸리는 일이 있습니다. Image
Arch/riscv/boot 아래에 있는 파일을 가져와서 file
명령을 사용하여 살펴보니 다음과 같았습니다.
Image: MS-DOS executable PE32+ executable (EFI application) RISC-V 64-bit (stripped to external PDB), for MS Windows
하지만 제 생각에는 다른 모든 정보가 포함되어야 하므로 이를 data
입력 해야 한다고 생각합니다.objcopy -O binary -S
파일을 file
정리해서 가져 왔습니다vmlinux
vmlinux: ELF 64-bit LSB executable, UCB RISC-V, version 1 (SYSV), statically linked, BuildID[sha1]=432bf8175b2c7de8404f27f5f395fdb20479f263, with debug_info, not stripped
동일한 유형으로 새로 작성된 C 프로그램을 다시 시도하면 objcopy
수행된 작업을 사용하여 vmlinux
올바른 data
유형을 얻습니다.
수동 objcopy
컴파일은 vmlinux
PE 실행 파일과 동일한 결과를 제공하므로 make
시스템에 대한 추가 변경은 불가능합니다.
vmlinux
얻기 위해 수행되는 작업은 Image
다음과 같습니다.
riscv64-linux-gnu-objcopy -O binary -R .note -R .note.gnu.build-id -R .comment -S vmlinux arch/linux/boot/Image
--just-print
옵션을 볼 수 있듯이 make
.
objcopy
제가 해당 줄의 의미를 잘못 이해하고 있는 것인지 , 명령의 결과를 잘못 이해하고 있는 것인지 궁금합니다 file
.
답변1
이는 부팅 이미지가 다음 형식의 UEFI 실행 파일이기 때문입니다.휴대용 실행 파일(일명 Windows exe).