2012-10-07 45 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