6

我有几年的 c 编程经验。现在我决定致力于 Linux 内核模块开发。但是,我什至无法开始。我已经在 ubuntu 中编译了这段代码。

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

但是,insmod 不起作用,错误消息是“无效的模块格式”。谷歌搜索后,我认为版本兼容性可能存在问题。并且没有什么好的方法可以解决。那么一些真正的内核模块开发人员可以给我一些建议吗?在开始学习之前我应该​​准备什么环境?

谢谢!

4

3 回答 3

10

您缺少module_init()andmodule_exit()宏和一些关键的#defines. 我们还需要更多信息,例如您的 make/gcc 选项。它可能会报告“无效的模块格式”,因为当您的内核是 64 位时您正在编译 32 位,因此请确保您使用 -64 编译和链接标志。

内核模块的一个很棒的 hello world 教程位于:http: //archive.is/KNkEE(文章的原始链接已损坏)。

欢迎编写内核模块。与编写 Windows 驱动程序相比,它们很有趣(我都做过)。linux 内核模块接口使用起来要简单得多,并且您可以委托许多基本驱动程序来更快地完成工作。

于 2012-10-07T05:04:38.240 回答
1

一个关于 Linux 内核、模块编程和为嵌入式设备编写简单设备驱动程序的完整而简化的博客。

xploredevicedrivers.blogspot.in

于 2014-09-29T17:11:45.347 回答
1

我建议开始阅读“ Linux 内核模块编程指南

即使它基于相当老的内核版本 (2.6),即使在今天,它仍然值得您花时间阅读。

于 2019-05-01T19:34:28.313 回答