2012-10-07 166 views
5

我有幾年c編程經驗。現在我決定努力開發Linux內核模塊。但是,我甚至無法開始。我在ubuntu中編譯了這段代碼。如何編寫Linux內核模塊?

#include <linux/module.h> 
int init_module(void){ printk("<1> hellp"); return 0;} 
void cleanup_module(void){ printk("<1> bye");} 

但是,insmod不起作用錯誤消息是「模塊格式無效」。谷歌搜索後,我認爲這可能是版本兼容性的一些問題。並沒有好的方法來解決它。那麼一些真正的內核模塊開發人員能給我一些建議嗎?在我開始學習之前,我應該準備什麼環境?

謝謝!

回答

10

您錯過了module_init()module_exit()宏和一些關鍵的#defines。我們還需要更多信息,例如make/gcc選項。它可能會報告「無效的模塊格式」,因爲當你的內核是64位時,你在32位編譯,因此確保你使用-64編譯和鏈接標誌。

一個偉大的hello world內核模塊教程位於這裏: http://archive.is/KNkEE(該文章的original link被打破)。

歡迎編寫內核模塊。與編寫Windows驅動程序相比,它們非常有趣(我已經完成了這兩個)。 Linux內核模塊接口使用起來非常簡單,並且可以委派許多基礎驅動程序並使工作更快完成。

+0

* 「你缺少__init和__exit宏...」 * - 使用__init'的'和'不需要__exit';他們只指定在引導完成後可以釋放的文本部分。驅動程序模塊需要使用'module_init()'和'module_exit()'來聲明兩個入口點。 – sawdust