2011-09-20 51 views
7

從樹中構建內核驅動程序時, 我在驅動程序目錄中運行make,其中KERNELDIR或者是內核源的路徑,或者是頭文件。正確導出Linux頭文件,模塊

make -C $(KERNELDIR) M=$(PWD) modules 

試圖自己使用來構建頭時:

make headers_install ARCH=i386 INSTALL_HDR_PATH=$(HEADERSDIR) 

我找到出口不適合建立針對模塊(不完整的內核源代碼樹) 幾個文件和文件夾似乎缺少像生成文件,腳本,或include/generated/autoconf.hinclude/config/auto.conf

的Debian做的事情在可用方式,如在rules.real所描述的,儘管它的確超過在Documentation/make/headers_install.txt描述,這看毫秒不是「標準」的方式。

總之:我如何正確導出linux標題,所以我可以建立外部模塊對它?

+0

我自己有'autoconf.h'問題。如果我沒有記錯的話,我只是從附近的文件夾複製它,我已經建立了我的內核 – Shahbaz

回答

2

我認爲headers_install的內核make文件目標是用於生成用於生成C庫和工具鏈的Linux頭的目的,而不是爲了能夠構建出樹內核模塊sans全配置的內核源代碼。

事實上,我猜測沒有完整的內核源代碼構建出樹內核模塊並不受支持,實際上是由發行版創建的「破解」。

5

headers_install旨在從用戶空間角度導出適合使用的一組頭文件。它是內核的用戶空間暴露的API。假設您創建了一個美妙的新ioctl,擁有一個custome數據結構。這是您不想讓用戶空間知道的那種信息,以便用戶空間程序可以使用您美妙的新ioctl。

但是,用戶空間中不可見的所有內容,即對內核「私有」或換句話說內部API,都不會暴露給用戶空間。

因此,要構建出樹模塊,您需要完整配置的源代碼樹或由發行版打包的內核頭文件。例如,在Ubuntu/Debian上查找linux-headers或linux-kernel-headers 軟件包。