2012-05-07 222 views
38

我正在編寫簡單的Linux模塊mod.c. 當我編譯mod.c文件時,它會創建兩個輸出文件mod.omod.ko。 所以我只想知道, mod.o和mod.ko文件有什麼區別?.o和.ko文件之間的區別

+1

我認爲.ko是2.6內核對象文件,而.o是2.4。在這裏閱讀更多關於它的信息:http://tldp.org/HOWTO/Module-HOWTO/linuxversions.html – smichak

回答

34

簡短的回答是,.ko文件是你的目標文件鏈接到一些內核自動生成的內核所需要的數據結構。

.o file是你的模塊的目標文件 - 編譯你的C文件的結果。然後,內核構建系統會自動創建另一個包含描述內核模塊(名爲your_module_kmod.c)的數據結構的C文件,將該C文件編譯爲另一個對象文件,並將您的對象文件與其構建的對象文件鏈接在一起以創建。 ko文件。

在負責裝載內核模塊內核中的動態鏈接程序,希望能夠找到數據結構中的核心放在KMOD對象在.ko文件,將無法加載內核模塊,而不他們。

12

的Linux 2.6之前,用戶空間程序會解釋ELF對象 (的.o)文件,然後執行它鏈接到正在運行的內核, 產生成品的二值圖像的所有工作。該程序會將該圖像 傳遞給內核,內核只會將其粘貼在內存中。在Linux 2.6中,內核執行鏈接。用戶空間 程序將ELF對象文件的內容直接傳遞給內核 。爲此,ELF對象圖像必須包含其他 信息。爲了識別這種特定種類的ELF目標文件,我們 命名帶有後綴「.ko」(「內核對象」)而不是「.o」的文件。例如,對於 例如,Linux 2.4中的串行設備驅動程序位於文件 Linux 2.6中的serial.o存在於serial.ko文件中。

http://tldp.org/HOWTO/Module-HOWTO/linuxversions.html