2011-06-17 84 views
0

我正在研究一個由多個內核模塊組成的項目。不同模塊之間有一些共享功能,但我不想在每個模塊中包含相同的代碼。 Linux內核有一個「共享對象庫」還是通用代碼進入一個單獨的模塊?分區內核模塊

+0

@amrzar 25%是他暗示你更好。 StackOverflow不是因爲它充滿了人們要求學習的問題,而是因爲很多人花時間爲他們寫出了很好的答案。如果你得到了一個好的答案,你應該將其標記爲這樣,否則人們不會認爲值得努力回答並幫助你學習。當你得到一個好的建議時,說「拉你的屁股」這樣的事情可能不是獲得更多幫助的一種非常聰明的方式。 – Fredrik

+0

@Fredrik我認爲,我對單詞「接受」有不同的理解,人們總是問別人的意見,應該尊重他人,但尊重別人的意見_DOES NOT_表示你應該「接受」它!如果我們接受每個人的意見只是爲了「尊重」,那就不會有教派暴力,政黨和這些手的東西!文學表現出對別人工作的尊重,感謝他們寫下甜美的評論並祝願他們成功! – amrzar

+0

@Fredrik看起來你是對的,它的規則和法規的類型爲這個論壇!我現在就這樣做,謝謝你的時間! – amrzar

回答

2

通常,您可以將模塊的通用功能置於單獨的模塊中。其中一個很好的例子是其他SAS(串行連接SCSI)設備驅動程序使用的drivers/scsi/libsas模塊。如果走這條路線,請參閱Documentation/kbuild/modules.txt的第6.3節中的內核文檔,以獲取有關從其他外部模塊引用符號的建議。

1

如果您正在尋找一種在模塊之間共享功能的方法,您應該查看一下EXPORT_SYMBOL宏。一個簡單的例子:

文件super.c

void call_me(){ 
    printk("Hello from super.\n"); 
} 
EXPORT_SYMBOL(call_me); 

文件super.h

extern void call_me(); 

文件base.c

#include "super.h" 

void call_super(){ 
    call_me(); 
} 

這裏super.c和base.c是不同的模塊。

如果這是你想要的,請告訴我。我可以向你發送一個更復雜的makefile和東西的例子。希望能幫助到你。

注意:我在很多發行版中都使用過它...但是每次我都需要將Modules.symvers文件複製到其他模塊目錄。

因爲你有一個模塊A和一個模塊B,它使用A中的函數。編譯A時,創建一個名爲Modules.symvers的文件。我需要在編譯之前將該文件複製到B的文件夾中。複製Modules.symvers後,不要在B的文件夾中輸入make clean,否則它會被刪除。

+0

我已經明白了你的觀點,非常感謝 – amrzar