我在默认配置中编译了最新的Linux内核,使用make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig make -j4 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-命令对arm64目标启用了调试。根文件夹中有vmlinux文件,arch/arm64/boot中有Image文件。
在QEMU上,我可以使用以下命令引导'Image‘文件,但不能引导'vmlinux’文件。
//Boots
qemu-system-aarch64 -semihosting -m 1024M -nographic -machine virt,gic-version=3,virtualization=on -cpu max -kernel mylinux/arch/arm64/boot/Image
//Not booting
qemu-system-aarch64 -semihosting -m 1024M -nographic -machine virt,gic-version=3,virtualization=on -cpu max -kernel linux/vmlinux下面也给出了文件命令的结果。
$ file vmlinux
vmlinux: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), statically linked, BuildID[sha1]=65799dedbc4bed593ecec1fe49d7b267, with debug_info, not stripped
$ file arch/arm64/boot/Image
arch/arm64/boot/Image: MS-DOS executable PE32+ executable (EFI application) Aarch64 (stripped to external PDB), for MS Windows我可以知道这两个文件之间的确切区别以及为什么一个文件正在引导。
发布于 2022-11-05 07:20:39
"vmlinux“是在从源代码构建内核文件的过程中创建的文件。它以ELF格式保存。然后,可以使用某些调试器(即GDB)进行调试。它不用于引导系统。
基于这个"vmlinux“ELF文件,还创建了其他文件--比如"Image”。"Image“是一个文件,它由vmlinux的某些部分加上一些引导代码组成,然后引导加载程序使用这个引导代码启动系统上的内核。
https://stackoverflow.com/questions/74325349
复制相似问题