- 论坛徽章:
- 3
|
Makefile:
- ifneq ($(KERNELRELEASE),)
- obj-m += demo.o
- else
- PWD := $(shell pwd)
- KVER := $(shell uname -r)
- KDIR := /lib/modules/$(KVER)/build
- all:
- $(MAKE) -C $(KDIR) M=$(PWD) modules
- clean:
- $(MAKE) -C $(KDIR) M=$(PWD) modules clean
- endif
复制代码
demo.c:
- #include <linux/module.h>
- #include <linux/init.h>
- #include <linux/interrupt.h>
- #include <linux/irq.h>
- #define my_debug(fmt, args...) printk("[%s]"fmt, __FUNCTION__, ##args)
- MODULE_LICENSE("GPL");
- static irqreturn_t irq_handler(int irq, void *dev_id)
- {
- my_debug("the interrupt handler function.\n");
- my_debug("the irq is: %d\n", irq);
- return IRQ_HANDLED;
- }
- static int irq = 10;
- static int __init test_init(void)
- {
- unsigned int ret = 0;
- my_debug("enter module init...\n");
- ret = request_irq(irq, irq_handler, IRQF_DISABLED, "demo_dev", NULL);
- if (ret < 0) {
- my_debug("request_irq failed, ret = %d\n", ret);
- goto err0;
- }
- my_debug("request_irq ret = %d\n", ret);
- my_debug("exit module init.\n");
- err0:
- return ret;
- }
- static void __exit test_exit(void)
- {
- free_irq(irq, NULL);
- my_debug("module exit...\n");
- }
- module_init(test_init);
- module_exit(test_exit);
复制代码
这个简单模块是写在 PC 平台的。
请教用什么(软件)手段,可以让 irq_handler 被调用到呢?
|
|