原來的格式
源文件爲 main.c
若直接使用gcc 編譯文件,編譯出的是 ELF64 格式的。
用 readelf -e 文件名,即可查看文件的ELF的信息。
由上圖可以看出,直接使用 gcc 編譯、鏈接出來的elf 文件,class 是ELF64,machine是 Advanced Micro Devices X86-64。
而我們需要的是ELF32格式的,而且是要運行在intel 80386機器上。
改動後
首先是編譯:
gcc -m32 -c -o main.o main.c
然後是鏈接:
ld -m elf_i386 main.o -Ttext 0xc0001500 -e main -o kernel.bin
可以看出,Class 和 Machine 都變爲咱期望的樣子了。
總結
也就比原來的命令多了個參數,
編譯時,多了個 -m32
鏈接時,多了個 -m elf_i386
其它沒有變化。