在内核中添加中断服务例程

Adding Interrupt service routine in kernel

我正在尝试添加一个 switch/GPIO 中断。我想把它写成内核源代码树的一部分。构建内核映像并部署到我的自定义板后,它必须出现在 proc/interrupts 中。我已经编写了模块,如果执行 insmod,它就可以工作。我不想单独编译,而是希望它成为我的内核树的一部分。 将 irq 添加到内核源代码的步骤是什么。

其实如果你把模块写在内核树里面,就很简单了:

假设您将源代码放在 drivers 目录中,那么层次结构如下所示: drivers/hello 配置文件 生成文件 hello.c

在 drivers/Makefile 中您应该添加以下内容:

obj-$(CONFIG-HELLO) += hello/

在 drivers/Kconfig 中您应该添加以下内容:

source "drivers/hello/Kconfig"

drivers/hello/Kconfig 的示例代码:

config HELLO
tristate "Hello world module"
default n
help
   Enable Hello world module support

drivers/hello/Makefile 的示例代码:

obj-$(CONFIG_HELLO) += hello.o

drivers/hello.c 的示例代码:

#include <linux/module.h>
#include <linux/moduleparam.h>

...
...

static int __init hello_init(void)
{
   ...
}

static void __exit hello_exit(void)
{
   ...
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_AUTHOR("Obi One Kenoby");
MODULE_DESCRIPTION("Hello Driver");
MODULE_LICENSE("GPL");
MODULE_VERSION("1.0");

现在您应该能够在 make menuconfig 中看到 hello 模块 - select 'm' 用于模块,'*' 用于内置。module_init/module_exit 宏适用于这两个选项.