linux内核模块编程之入门(二)-编写带参数的中断模块
2009-06-24 15:55
337 查看
在此,我们将编写一个模块,其中有一个中断函数,当内核接收到某个 IRQ 上的一个中断时会调用它。先给出全部代码,读者自己调试,把对该程序的理解跟到本贴后面。
—————————————-
#include <linux/module.h>
#include <linux/init.h>
#include <linux/interrupt.h>
static int irq;
static char *interface;
//MODULE_PARM_DESC(interface,”A network interface”); 2.4内核中该宏的用法
molule_parm(interface,charp,0644) //2.6内核中的宏
//MODULE_PARM_DESC(irq,”The IRQ of the network interface”);
module_param(irq,int,0644);
static irqreturn_t myinterrupt(int irq, void *dev_id, struct pt_regs *regs)
{
static int mycount = 0;
if (mycount < 10) {
printk(”Interrupt!/n”);
mycount++;
}
return IRQ_NONE;
}
static int __init myirqtest_init(void)
{
printk (”My module worked!11111/n”);
if (request_irq(irq, &myinterrupt, SA_SHIRQ,interface, &irq)) {
printk(KERN_ERR “myirqtest: cannot register IRQ %d/n”, irq);
return -EIO;
}
printk(”%s Request on IRQ %d succeeded/n”,interface,irq);
return 0;
}
static void __exit myirqtest_exit(void)
{
printk (”Unloading my module./n”);
free_irq(irq, &irq);
printk(”Freeing IRQ %d/n”, irq);
return;
}
module_init(myirqtest_init);
module_exit(myirqtest_exit);
MODULE_LICENSE(”GPL”);
—————————————-
这里要说明的是,在插入模块时,可以带两个参数,例如
insmod myirq.ko interface=eth0 irq=9
其中 具体网卡 irq的值可以查看 cat /proc/interrupts
—————————————-
#include <linux/module.h>
#include <linux/init.h>
#include <linux/interrupt.h>
static int irq;
static char *interface;
//MODULE_PARM_DESC(interface,”A network interface”); 2.4内核中该宏的用法
molule_parm(interface,charp,0644) //2.6内核中的宏
//MODULE_PARM_DESC(irq,”The IRQ of the network interface”);
module_param(irq,int,0644);
static irqreturn_t myinterrupt(int irq, void *dev_id, struct pt_regs *regs)
{
static int mycount = 0;
if (mycount < 10) {
printk(”Interrupt!/n”);
mycount++;
}
return IRQ_NONE;
}
static int __init myirqtest_init(void)
{
printk (”My module worked!11111/n”);
if (request_irq(irq, &myinterrupt, SA_SHIRQ,interface, &irq)) {
printk(KERN_ERR “myirqtest: cannot register IRQ %d/n”, irq);
return -EIO;
}
printk(”%s Request on IRQ %d succeeded/n”,interface,irq);
return 0;
}
static void __exit myirqtest_exit(void)
{
printk (”Unloading my module./n”);
free_irq(irq, &irq);
printk(”Freeing IRQ %d/n”, irq);
return;
}
module_init(myirqtest_init);
module_exit(myirqtest_exit);
MODULE_LICENSE(”GPL”);
—————————————-
这里要说明的是,在插入模块时,可以带两个参数,例如
insmod myirq.ko interface=eth0 irq=9
其中 具体网卡 irq的值可以查看 cat /proc/interrupts
相关文章推荐
- 内核模块编程之进阶(四)-编写带参数的中断模块
- 内核模块编程之进阶(三)-编写带参数的中断模块
- 内核模块编程之进阶(四)-编写带参数的中断模块
- Linux内核模块编程入门-5(传递命令行参数到模块)
- linux内核模块编程之入门(一) 模块编程
- 基础入门_Python-模块和包.为wsgiref实现的WSGI服务器编写处理函数?
- [转载]编程入门:浅谈C语言的可变参数
- apache模块编程学习:编写图片加载模块
- 内核模块编程之入门(一)---话说模块
- 编写使用中断的模块
- 内核模块编程之入门(三)—模块儿实用程序简介
- Xposed框架编写模块入门
- 【Linux2.6内核模块编程实例指导】内核模块编程之入门(一)话说模块
- 'VB编程 编写一个竞赛评分的函数过程。评委打分为参数(数组参数),选手得分为函数值。记分规则为:去掉一个最高分,去掉一个最低分,然后求平均。调用该函数,由键盘输入5个评委的打分(存放在数组中),输出
- Linux内核模块编程入门-3(__init和__exit宏)
- ASP.NET 3.5核心编程学习笔记(46):HTTP模块的编写
- 【七月Python入门】 第七课并发编程以及系统常用模块
- Linux内核模块:初始化、加载/卸载、模块参数、导出符号、错误处理、模块装载竞争
- 内核模块编程之入门(二)—必备知识
- 内核模块编程之入门(三)-模块实用程序简介