2016-07-25 105 views
0

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

+0

为什么它是一个我不知道的话题。我已经提到过我有一个工作代码,但我需要将它作为源代码的一部分。 –

回答

1

其实,如果你写内核树里面的模块,它是非常简单的:

比方说,你把驱动程序目录中的源代码,所以层次如下所示: 驱动器/你好 的Kconfig Makefile文件 的hello.c

在驱动程序/ Makefile中应该增加以下内容:

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

在驱动器/ Kconfi g您应该添加以下内容:

source "drivers/hello/Kconfig" 

示例代码驱动程序/你好/的Kconfig:

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

示例代码驱动程序/你好/ Makefile文件:司机

obj-$(CONFIG_HELLO) += hello.o 

示例代码/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模块 - 为模块选择'm',为内置选择'*'。module_init/module_exit宏可以同时使用这两个选项。

+0

嗨,我做了同样的事情,我可以在menuconfig中看到,并且能够在没有任何问题的情况下编译它。现在问题是.ko入口不在modue.order和module.builtin中。如果主module.builtin文件中没有条目,那么.ko文件不是我最终内核映像的一部分吧? –

+0

你不会看到一个.ko文件,因为它现在被内置到内核中,如果你看到hello.o它编译得很好 - 只需在你的probe函数中添加一个pr_err()来查看它是否被调用。 – tomereli

+0

我无法看到/ proc/interrupts中的条目 –