我有几年的c编程经验。现在我决定致力于Linux内核模块开发。但是,我甚至无法开始。我已经在ubuntu中编译了这段代码。
#include <linux/module.h>
int init_module(void){ printk("<1> hellp"); return 0;}
void cleanup_module(void){ printk("<1> bye");}
但是,insmod无法正常工作,错误消息是“模块格式无效”。谷歌搜索后,我认为它可能是版本兼容性的一些问题。而且没有好办法解决它。那么一些真正的内核模块开发人员能给我一些建议吗?在我开始学习之前,我应该准备什么环境?
谢谢!
答案 0 :(得分:10)
您错过了module_init()
和module_exit()
宏以及一些重要的#defines
。我们还需要更多信息,例如make / gcc选项。它可能是报告“无效模块格式”,因为当您的内核为64位时,您正在编译32位,因此请确保使用-64编译和链接标记。
内核模块的一个很棒的hello world教程位于: http://archive.is/KNkEE(文章original link已损坏)。
欢迎编写内核模块。与编写Windows驱动程序相比,它们很有趣(我已经完成了两者)。 Linux内核模块接口使用起来更简单,您可以委派许多基本驱动程序并更快地完成工作。
答案 1 :(得分:1)
关于Linux内核,模块编程以及为嵌入式设备编写简单设备驱动程序的完整而简化的博客。
答案 2 :(得分:0)
我建议您先阅读“ The Linux Kernel Module Programming Guide”
即使它基于相当老的内核版本(2.6),它仍然值得您花时间阅读,直到今天。