日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > > 充電吧
[導(dǎo)讀]# #?Makefile?for?linux. #?If?you?don't?have?'-mstring-insns'?in?your?gcc?(and?nobody?but?me?has?:-)

#
#?Makefile?for?linux.
#?If?you?don't?have?'-mstring-insns'?in?your?gcc?(and?nobody?but?me?has?:-)
#?remove?them?from?the?CFLAGS?defines.
#

#
#8086匯編編譯器和連接器.?-0生成8086目標(biāo)程序;-a生成與gas和gld部分兼容的代碼
#
AS86?=as?-0?-a?
CC86?=cc?-0
LD86?=ld?-0

#
#GNU匯編編譯器和連接器
#
AS?=gas
LD?=gld

#
#GNU連接器gld運(yùn)行時(shí)用到的選項(xiàng)
#-s?輸出文件中省略所有的符號(hào)信息
#-x?刪除所有的局部符號(hào)
#-M?在標(biāo)準(zhǔn)輸出設(shè)備(顯示器)上打印連接映象(link?map).
#連接映象:由連接程序產(chǎn)生的一種內(nèi)存地址映象,其中列出了程序裝入到內(nèi)存中的位置信息,具體有如下信息:
#目標(biāo)文件及符號(hào)信息映射到內(nèi)存中的位置
#公共符號(hào)如何放置
#連接中包含的所有文件成員及其引用的符號(hào)
#
LDFLAGS?=-s?-x?-M

#
#gcc是GNU?C程序編譯器,對(duì)于UNIX類(lèi)的腳本程序而言,
#在引用定義的標(biāo)識(shí)符時(shí),需在前面加上$符號(hào)并用括號(hào)括住標(biāo)識(shí)符
#
CC?=gcc

#
#GCC的選項(xiàng).
#-Wall?打印所有的警告信息
#-O?對(duì)代碼進(jìn)行優(yōu)化
#-fstrength-reduce?優(yōu)化循環(huán)語(yǔ)句
#
CFLAGS?=-Wall?-O?-fstrength-reduce?-fomit-frame-pointer?-fcombine-regs

#
#CPP是gcc的預(yù)處理程序
#-nostdinc?-Iinclude?不要搜索標(biāo)準(zhǔn)的頭文件目錄中的文件,
#而是使用-I選項(xiàng)指定的目錄或者是在當(dāng)前的目錄里搜索頭文件
#
CPP?=gcc?-E?-nostdinc?-Iinclude

#?
#?kernel目錄,mm目錄,fs目錄所產(chǎn)生的目標(biāo)代碼文件。
#?為了方便引用,在這里將它們用ARCHIVES(歸檔文件)標(biāo)識(shí)符表示
#
ARCHIVES=kernel/kernel.o?mm/mm.o?fs/fs.o

#
#?由lib/目錄中生成的通用庫(kù)文件
#
LIBS?=lib/lib.a

#
#?make隱式后綴規(guī)則
#?指示make利用下面的命令將所有的.c文件編譯生成.s匯編程序
#?':'表示下面是該規(guī)則的命令
#?規(guī)則:指使gcc采用前面CFLAGS所指定的選項(xiàng)以及僅使用include/目錄中的頭文件,
#?在適當(dāng)?shù)木幾g后不進(jìn)行匯編就停止(-S),從而產(chǎn)生與輸入的各個(gè)C文件對(duì)應(yīng)的匯編語(yǔ)言形式的代碼文件。
#?默認(rèn)情況下所產(chǎn)生的匯編程序文件是原C文件名去掉.c而加上.s后綴。
#?-o表示其后是輸出文件的形式。
#?其中$*.s(或$@)是自動(dòng)目標(biāo)變量,$<代表第一個(gè)先決條件,這里即是符合條件*.c的文件。
#
.c.s:
$(CC)?$(CFLAGS)?
-nostdinc?-Iinclude?-S?-o?$*.s?$<

#
#?將所有.s匯編程序文件編譯成.o目標(biāo)文件。下一條是實(shí)現(xiàn)該操作的具體命令
#?使用gas編譯器將匯編程序編譯成.o目標(biāo)文件。-c表示只編譯或匯編,但不進(jìn)行連接操作
#
.s.o:
$(AS)?-c?-o?$*.o?$<

#
#?使用gcc將c語(yǔ)言編譯成目標(biāo)文件但不連接
#
.c.o:
$(CC)?$(CFLAGS)?
-nostdinc?-Iinclude?-c?-o?$*.o?$<

#
#?all表示創(chuàng)建Makefile所知的最頂層目標(biāo)。這里即是image文件
#
all:?Image

#
#?第一行說(shuō)明:目標(biāo)文件(Image文件)是由分號(hào)后面的3個(gè)元素產(chǎn)生
#?下面兩行是執(zhí)行的命令
#?第一行表示使用tools目錄下的build工具程序?qū)oot,system文件組裝成內(nèi)核映象文件Image
#?第二行的sysn同步命令是迫使緩沖塊數(shù)據(jù)立即寫(xiě)盤(pán)并更新超級(jí)塊
#
Image:?boot/boot?tools/system?tools/build
tools/build?boot/boot?tools/system?>?Image
sync

#chmem?--?修改系統(tǒng)內(nèi)存數(shù)據(jù)
tools/build:?tools/build.c
$(CC)?$(CFLAGS)?
-o?tools/build?tools/build.c
chmem?+65000?tools/build

#
#?利用上面的.s.o規(guī)則生成head.o文件
#
boot/head.o:?boot/head.s

#
#?最后的>System.map表示gld需要將連接映象重定向存放在System.map文件中
#
tools/system:?boot/head.o?init/main.o?
$(ARCHIVES)?$(LIBS)
$(LD)?$(LDFLAGS)?boot/head.o?init/main.o?
$(ARCHIVES)?
$(LIBS)?
-o?tools/system?>?System.map

#
#?內(nèi)核目標(biāo)模塊kernel.o
#
kernel/kernel.o:
(cd?kernel;?make)

#
#?內(nèi)核管理模塊mm.o
#
mm/mm.o:
(cd?mm;?make)

#
#?文件系統(tǒng)目標(biāo)模塊fs.o
#
fs/fs.o:
(cd?fs;?make)

#
#?庫(kù)函數(shù)lib.a
#
lib/lib.a:
(cd?lib;?make)

#
#?在boot.s程序開(kāi)口添加一行有關(guān)system文件長(zhǎng)度信息
#?首先生成含有?"SYSSIZE?=?文件實(shí)際長(zhǎng)度"一行信息的tmp.s文件,然后將boot.s文件添加在其后。
#?取得system長(zhǎng)度的方法是:
#?利用ls命令對(duì)system文件進(jìn)行長(zhǎng)列表顯示
#?用grep命令取得列表上文件字節(jié)數(shù)字段信息,并定向保存在tmp.s臨時(shí)文件中
#?cut命令用于剪切字符串
#?tr用于去除行尾的回車(chē)符
#?(實(shí)際長(zhǎng)度?+?15)/16用于獲得'節(jié)'表示的長(zhǎng)度信息,1節(jié)=16字節(jié)
#?用8086匯編和連接器對(duì)setup.s文件進(jìn)行編譯生成setup文件
#?-s表示要取出目標(biāo)文件中的符號(hào)信息
#
boot/boot:?boot/boot.s?tools/system
(echo?-n?"SYSSIZE?=?(";ls?-l?tools/system?|?grep?system?
|?cut?-c25-31?|?tr?'