我有几年的 C 语言编程经验。现在我决定致力于 Linux 内核模块开发。但是,我什至无法开始。我在 ubuntu 中编译了这段代码。
#include <linux/module.h>
int init_module(void){ printk("<1> hellp"); return 0;}
void cleanup_module(void){ printk("<1> bye");}
但是,insmod 不工作,错误消息是“无效的模块格式”。谷歌搜索后,我认为版本兼容性可能存在一些问题。而且也没有很好的办法解决。那么一些真正的内核模块开发人员可以给我一些建议吗?开始学习前应该准备什么样的环境?
谢谢!
最佳答案
您缺少 module_init()
和 module_exit()
宏以及一些关键的 #defines
。我们还需要更多信息,例如您的 make/gcc 选项。它可能会报告“无效的模块格式”,因为当您的内核是 64 位时,您正在以 32 位编译,因此请确保您使用的是 -64 编译和链接标志。
有关内核模块的精彩 hello world 教程位于此处: http://archive.is/KNkEE (文章的 original link 已损坏)。
欢迎编写内核模块。与编写 Windows 驱动程序相比,它们非常有趣(我都做过)。 Linux 内核模块接口(interface)使用起来要简单得多,并且有很多基础驱动程序,您可以委派给它们并更快地完成工作。
关于linux - 如何编写 Linux 内核模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12766203/