Makefile之編譯可裝載模塊 及 多源文件編譯方法



編譯可裝載模塊 - obj-m

 

    $(obj-m) 列舉出了哪些文件要編譯成可裝載模塊。

一個模塊可以由一個文件或多個文件編譯而成。如果是一個源文件,Kbuild Makefile只需簡單的將其加到$(obj-m)中去就可以了。

 

   例子:

     #drivers/isdn/i4l/Makefile

     obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o

注意:此例中 $(CONFIG_ISDN_PPP_BSDCOMP) 的值爲'm'

 

    如果內核模塊是由多個源文件編譯而成,那你就要採用上面那個例子一樣的方法去聲明你所要編譯的模塊。Kbuild需要知道你所編譯的模塊是基於哪些文件,所以你需要通過變量$(<module_name>-objs)來告訴它。看下的面子:

例子:

   #drivers/isdn/i4l/Makefile

   obj-$(CONFIG_ISDN) += isdn.o

   isdn-objs := isdn_net_lib.o  isdn_v110.o  isdn_common.o

在這個例子中,模塊名將是isdn.o,  Kbuild將編譯在$(isdn-objs)中列出的所有文件,然後使用"$(LD) -r"生成isdn.o

 

Kbuild能夠識別用於組成目標文件的後綴-objs和後綴-y。這就讓Kbuild Makefile可以通過使用 CONFIG_ 符號來判斷該對象是否是用來組合對象的。

例子:

   #fs/ext2/  Makefile

   obj-$(CONFIG_EXT2_FS)    += ext2.o

   ext2-y    := balloc.o bitmap.o

   ext2-$(CONFIG_EXT2_FS_XATTR)    += xattr.o

在這個例子中,如果 $(CONFIG_EXT2_FS_XATTR)  'y', xattr.o將是複合對象 ext2.o的一部分

注意:當然,當你要將其編譯進內核時,上面的語法同樣適用。所以,如果你的 CONFIG_EXT2_FS=y,那Kbuild會按你所期望的那樣,生成 ext2.o文件,然後將其聯接到 built-in.o中。










發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章