
私は最新のソースコード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)。