Linux 0.00 Makefile 说明
關于Linux-0.00 的編譯和運行可以參考我的博文:http://blog.csdn.net/longintchar/article/details/78757065
為了能在64位的Ubuntu環境下編譯,修改后的Makefile是
# Makefile for the simple example kernel. AS86 =as86 -0 -a LD86 =ld86 -0 AS =as --32 LD =ld LDFLAGS =-m elf_i386 -Ttext 0 -e startup_32 -s -x -M all: ImageImage: boot systemdd bs=32 if=boot of=Image skip=1objcopy -O binary system headcat head >> Imagedisk: Imagedd bs=8192 if=Image of=/dev/fd0sync;sync;synchead.o: head.ssystem: head.o $(LD) $(LDFLAGS) head.o -o system > System.mapboot: boot.s$(AS86) -o boot.o boot.s$(LD86) -s -o boot boot.oclean:rm -f Image System.map core boot head *.o system對于boot.s文件,我們用的是as86匯編器和ld86鏈接器。
as86:
-0 :生成8086目標程序;
-a :生成與gas和gld部分兼容的代碼;
ld86:
-0:產生具有16bit魔數的頭結構;
boot.s–>boot.o–>boot
用命令file boot可以查看boot的文件類型是
Linux-8086 impure executable
需要注意的是:boot的大小是544B,包含一個32B的文件頭,所以需要把這個頭去掉。
dd bs=32 if=boot of=Image skip=1這個命令表示跳過boot的前32字節,把其余部分寫入文件Image;
這時候Image的大小是512字節,用file命令查看的結果是 x86 boot sector;
對于head.s文件,我們用的是GNU的as匯編器和ld鏈接器。
as –32表示生成32位的代碼;
ld:
-m elf_i386:指定仿真模式是elf_i386;
-Ttext 0:指定.text的段地址為0;
-e startup_32:指定入口函數是startup_32;
-s:刪除符號信息;
-x:丟棄局部符號;
-M:在標準輸出上打印鏈接圖文件;
head.o: head.s用的是隱含規則,即
as -o head.o head.s
用file查看head.o,得到
ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped
鏈接后得到system,用file查看得到
ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, stripped
以上命令表示把elf格式的system轉換成二進制文件head,用file查看head,得到
COM executable for DOS
表示把head追加到Image的后面。Image就是最終的鏡像文件。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Linux 0.00 Makefile 说明的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 0.11 实验环境搭建
- 下一篇: css元素隐藏不可获取,Css隐藏元素(