linux - 如何编写 Linux 内核模块?

标签 linux linux-kernel linux-device-driver

我有几年的 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/

相关文章:

linux - 父级和预 fork 子级之间的文件描述符共享

c - 如何在 Linux 内核中加入多个线程

linux - 注册中断处理程序时,标志 IRQF_SAMPLE_RANDOM 指定了什么?

c - 内核模块编程

Linux内核模块编程: makefile

linux-kernel - 如何用C语言访问Linux上的物理地址?

c - 添加用户空间头文件以生成文件

linux - 禁用内核跟踪器

linux - 为什么 System.map 没有任何用于小对象(全局)的初始化数据部分的条目

c++ - 套接字和文件推荐的缓冲区大小