2014-05-01 62 views
0

我是內核開發的新手。我試圖瞭解下面的Hello World的makefile!程序。但我無法完全弄清楚。需要幫助理解Makefile的內核模塊

obj-m += hello.o 


all: 

    sudo make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 

clean: 

    sudo make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 

我無法理解'obj-m + = hello.o'是什麼意思。我知道在這裏意味着模塊,多數民衆贊成在它。

而且,我們爲什麼不定義hello.o的依賴

最後一點,我不能完全弄清楚下的所有定義的規則編譯:清潔:

任何幫助將高度讚賞。!

回答

2

obj-m是一個Makefile變量。它實際上由兩部分組成:'obj'表示被引用的目標是一個內核對象,而'm'部分意味着該對象將被構建爲一個模塊。

變量被內核構建規則考慮。由於內核模塊遵循一定的慣例,運行你的Makefile將導致從源文件hello.c(如果一切正常)創建模塊hello.ko

'obj'變量也可能採用不同的後綴。例如'obj-y'將嘗試將引用的對象鏈接到主內核映像中,而不是創建模塊。後綴也可以指一個內核.config文件變量,像這樣:

obj-$(CONFIG_HOTPLUG) += hotplug.o 

在這種情況下,如果CONFIG_HOTPLUG被設置爲「ý」的hoplug對象會被編譯成主內核;如果設置爲'm',則將創建一個單獨的hotplug.ko可加載模塊。如果沒有設置任何東西(導致'obj-'),則熱插拔將被徹底省略。