The kernel module programming primer(4)-Writing interrupt module with parameters

2024-04-13 06:08

本文主要是介绍The kernel module programming primer(4)-Writing interrupt module with parameters,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在此,我们将编写一个模块,其中有一个中断函数,当内核接收到某个 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内核中该宏的用法
module_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)
{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, IRQF_SHARED, 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; //返回类型为void的函数。此时return语句不是必须的,隐式的return发生在函数的最后一个语句。
}module_init(myirqtest_init);
module_exit(myirqtest_exit);
MODULE_LICENSE(“GPL”);

这里要说明的是,在插入模块时,可以带两个参数,例如

insmod myirq.ko interface=eth0 irq=9

其中 具体网卡 irq的值可以查看

cat /proc/interrupts

动手吧!以此为例,可以设计出各种各样有价值的内核模块,贴出来体验分享的快乐吧。

这篇关于The kernel module programming primer(4)-Writing interrupt module with parameters的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/899328

相关文章

Python中ModuleNotFoundError: No module named ‘timm’的错误解决

《Python中ModuleNotFoundError:Nomodulenamed‘timm’的错误解决》本文主要介绍了Python中ModuleNotFoundError:Nomodulen... 目录一、引言二、错误原因分析三、解决办法1.安装timm模块2. 检查python环境3. 解决安装路径问题

C++ Primer 标准库vector示例详解

《C++Primer标准库vector示例详解》该文章主要介绍了C++标准库中的vector类型,包括其定义、初始化、成员函数以及常见操作,文章详细解释了如何使用vector来存储和操作对象集合,... 目录3.3标准库Vector定义和初始化vector对象通列表初始化vector对象创建指定数量的元素值

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

nginx-rtmp-module模块实现视频点播的示例代码

《nginx-rtmp-module模块实现视频点播的示例代码》本文主要介绍了nginx-rtmp-module模块实现视频点播,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录预置条件Nginx点播基本配置点播远程文件指定多个播放位置参考预置条件配置点播服务器 192.

nginx-rtmp-module构建流媒体直播服务器实战指南

《nginx-rtmp-module构建流媒体直播服务器实战指南》本文主要介绍了nginx-rtmp-module构建流媒体直播服务器实战指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. RTMP协议介绍与应用RTMP协议的原理RTMP协议的应用RTMP与现代流媒体技术的关系2

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

Linux_kernel驱动开发11

一、改回nfs方式挂载根文件系统         在产品将要上线之前,需要制作不同类型格式的根文件系统         在产品研发阶段,我们还是需要使用nfs的方式挂载根文件系统         优点:可以直接在上位机中修改文件系统内容,延长EMMC的寿命         【1】重启上位机nfs服务         sudo service nfs-kernel-server resta

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

【C++ Primer Plus习题】12.2

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "String.h"using namespace std;int main(){String s1(" and I am a

欧拉系统 kernel 升级、降级

系统版本  cat  /etc/os-release  NAME="openEuler"VERSION="22.03 (LTS-SP1)"ID="openEuler"VERSION_ID="22.03"PRETTY_NAME="openEuler 22.03 (LTS-SP1)"ANSI_COLOR="0;31" 系统初始 kernel 版本 5.10.0-136.12.0.