ARCH Makefile位於ARCH/$(ARCH)/Makefile,是系統對應平台的Makefile。Kernel Top Makefile會包含這個文件來指定平台相關信息。只有平台開發人員會關心這個文件。重點是Board-dependent options and extra files => #include $(srctree)/arch/mips/Kbuild.platforms
Kbuild.platforms(file following description)
platforms += icplus
# include the platform specific files
include $(patsubst %, $(srctree)/arch/mips/%/Platform, $(platforms))
(the above statments will include /arch/mips/icplus/Platform
Kbuild Makefile的文件名不一定是Makefile,儘管推薦使用Makefile這個名字。大多的Kbuild文件的名字都是Makefile。為了與其他Makefile文件相區別,你也可以指定Kbuild Makefile的名字為Kbuild。而且如果「Makefile」和「Kbuild」文件同時存在,則Kbuild系統會使用「Kbuild」文件。
Kbuild Makefile的一個最主要功能就是指定編譯什麼,這個功能是通過下面兩個對象指定的obj-?和xxx-objs:
obj-?
obj-?指定編譯什麼,怎麼編譯?其中的「?」可能是「y」或「m」,「y」指定把對象編譯進內核中,「m」指定把對象編譯為模塊。語法如;obj-? = $(target).o
target為編譯對象的名字。如果沒有指定xxx-objs,這編譯這個對象需要的源文件就是$(target).c或$(target).s。如果指定了$(target)-objs,則編譯這個對象需要的源文件由$(target)-objs指定,並且不能有$(target).c或$(target).s文件。
xxx-objs
xxx-objs指定了編譯對象需要的文件,一般只有在源文件是多個時才需要它。
ARCH=mips
在Kbuild.platforms中使用新增你的Board,$(patsubst,,)說明如下
$(patsubst <pattern>,<replacement>,<text>)
名稱:模式字符串替換函數——patsubst。
功能:查找<text>中的單詞(單詞以「空格」、「Tab」或「回車」「換行」分隔)是否符合模式<pattern>,如果匹配的話,則以<replacement>替換。這裡,<pattern>可以包括通配符「%」,表示任意長度的字串。如果<replacement>中也包含「%」,那麼,<replacement>中的這個「%」將是<pattern>中的那個「%」所代表的字串。(可以用「\」來轉義,以「\%」來表示真實含義的「%」字符)
返回:函數返回被替換過後的字符串。
示例:$(patsubst %.c,%.o,x.c.c bar.c)
把字串「x.c.c bar.c」符合模式[%.c]的單詞替換成[%.o],返回結果是「x.c.o bar.o」
備註:這和我們前面「變量章節」說過的相關知識有點相似。
如:「$(var:<pattern>=<replacement>)」
相當於「$(patsubst <pattern>,<replacement>,$(var))」,
而「$(var: <suffix>=<replacement>)」則相當於
「$(patsubst %<suffix>,%<replacement>,$(var))」。
例如有:objects = foo.o bar.o baz.o,
那麼,「$(objects:.o=.c)」和「$(patsubst %.o,%.c,$(objects))」是一樣的。
KBuild MakeFile介紹 https://read01.com/zh-tw/mo0MM.html
Makefile的一些用法 http://deanjai.blogspot.tw/2008/02/objs-foo.html
Linux內核Makefile文檔 https://hk.saowen.com/a/dff62a337e13ca6351a7f8a84602231aa7952b6185f028ecfe68af983c04fcab
留言列表