linux 内核 中断,工作队列 - Linux内核学习之中断_Linux教程_Linux公社-Linux系统门户网站...

news/2024/5/10 4:00:52/文章来源:https://blog.csdn.net/weixin_32894769/article/details/116633002

[概述]

工作队列是一种将工作推后执行的的形式,工作队列可以把工作推后,交由一个内核线程去执行,占有进程上下文的所有优势,允许重新调度和睡眠。

[工作队列的实现]

工作队列子系统是一个用于创建内核线程的接口,通过它创建的进程负责执行由内核其他部分排到队列里的任务。它创建的这些内核线程称作工作者线程(worker thread)。工作队列子系统提供了一个缺省的工作者线程来处理推后的工作,所以我们大多数情况下,没必要自己去创建工作者线程,使用默认的就OK。

Linux kernel development 3 上对工作队列的实现原理讲的很清楚了,这里就不再详述。具体来看一个实例

[实例]

staticstructinput_dev *button_dev;

staticstructwork_struct button_wq;

在做实际的驱动开发的时候,不推荐使用全局变量,因为全局变量是造成竞争条件的主要原因。

[中断处理程序]

staticirqreturn_t button_interrupt(intirq,void*p)

{

schedule_work(&button_wq);

returnIRQ_RETVAL(IRQ_HANDLED);

}

schedule_work(&work)函数用来调度work,把work提交给缺省的events工作者线程(插入工作任务链表中)。work马上会被调度,一旦其所在的处理器上的工作者线程被唤醒,唤醒的工作者队列会遍历整个工作任务链表,如果有工作,它就会被执行,否则继续睡眠。

Schedule_work_delay(&work, delay) 和schedule_work函数的作用相同,唯一区别就是延迟delay时间后才会执行。

[工作队列处理函数]

voidwork_handler(void*data)

{

/*get pin value  */

intval = s3c2410_gpio_getpin(S3C2410_GPG(0));

input_report_key(button_dev,KEY_1, val);

input_sync(button_dev);

}

完成按键信息的获取和上报工作。

[模块初始化函数]

staticint__init button_init(void)

{

interr;

if(request_irq(BUTTON_IRQ, button_interrupt,

IRQ_TYPE_EDGE_BOTH,DEV_NAME, NULL)) {

printk(KERN_ERR"cannotallocate irq");

return- EBUSY;

}

……

INIT_WORK(&button_wq,work_handler);

printk("initialized\n");

return0;

}

初始化函数主要完成了两个工作:

1、  申请中断

2、  创建一个推后的工作button_wq,有两种方法:

动态创建:

INIT_WORK(struct work_struct work, void (*func)(void *)), 在新内核里,INIT_WORK已经发生了变化,少了第三个参数。可以参考http://www.linuxidc.com/Linux/2011-11/47658.htm

静态创建:

DECLARE_WORK(name,func) 创建一个名为name,处理函数为func的work_struct结构体。

不管是动态还是静态,都是填充work struct 结构体。

有兴趣可以去看内核里gpio_keys.c的实现代码,一个典型的work queue的实现例子。0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_841253.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习Python你不去8个网站?逗我呢!

作为一个现时代的程序员初学者,除了看书之外,互联网的学习手段也是断不能少的! 以下这些网站,虽说不上全方位的满足你的需求,但是大部分也都能! 0.国外的大神GitHub : https://github.com/pyp…

c++安装 ttf字体_良心网站!45款免费可商用字体大合集下载,再也不怕版权侵扰了!...

100font 是一个免费可商用字体收集网站,上面列出了 目前45 款可以商用的免费字体,看名字,相信未来要收集到 100 款免费字体为止。网站传送门https://www.100font.com/字体打包下载地址【 完 整 版 】百度网盘:https://pan.baidu.c…

如何创建一个模块_如何用手机创建一个网站

如何用手机创建网站?其实正确的说法是如何创建一个手机网站才对,因为很难用手机去制作网站,很不方便。一般是用电脑模拟手机去建网站。我们知道现在很多人上网都是通过手机上网,所以我们自己建网站时,也要学会创建手机…

Python快速刷题网站——牛客网 数据分析篇(一)

👦👦一个帅气的boy,你可以叫我Love And Program 🖱 ⌨个人主页:Love And Program的个人主页 💖💖如果对你有帮助的话希望三连💨💨支持一下博主 python是目前非常火爆的…

Python快速刷题网站——牛客网 数据分析篇(二)

👦👦一个帅气的boy,你可以叫我Love And Program 🖱 ⌨个人主页:Love And Program的个人主页 💖💖如果对你有帮助的话希望三连💨💨支持一下博主 python是目前非常火爆的…

Python快速刷题网站——牛客网 数据分析篇(三)

👦👦一个帅气的boy,你可以叫我Love And Program 🖱 ⌨个人主页:Love And Program的个人主页 💖💖如果对你有帮助的话希望三连💨💨支持一下博主 python是目前非常火爆的…

Python快速刷题网站——牛客网 数据分析篇(四)

👦👦一个帅气的boy,你可以叫我Love And Program 🖱 ⌨个人主页:Love And Program的个人主页 💖💖如果对你有帮助的话希望三连💨💨支持一下博主 python是目前非常火爆的…

Python快速刷题网站——牛客网 数据分析篇(五)

👦👦一个帅气的boy,你可以叫我Love And Program 🖱 ⌨个人主页:Love And Program的个人主页 💖💖如果对你有帮助的话希望三连💨💨支持一下博主 python是目前非常火爆的…

Python快速刷题网站——牛客网 数据分析篇(六)

👦👦一个帅气的boy,你可以叫我Love And Program 🖱 ⌨个人主页:Love And Program的个人主页 💖💖如果对你有帮助的话希望三连💨💨支持一下博主 python是目前非常火爆的…

Python快速刷题网站——牛客网 数据分析篇(七)

👦👦一个帅气的boy,你可以叫我Love And Program 🖱 ⌨个人主页:Love And Program的个人主页 💖💖如果对你有帮助的话希望三连💨💨支持一下博主 python是目前非常火爆的…

Python快速刷题网站——牛客网 数据分析篇(八)

👦👦一个帅气的boy,你可以叫我Love And Program 🖱 ⌨个人主页:Love And Program的个人主页 💖💖如果对你有帮助的话希望三连💨💨支持一下博主 python是目前非常火爆的…

Python快速刷题网站——牛客网 数据分析篇(九)

👦👦一个帅气的boy,你可以叫我Love And Program 🖱 ⌨个人主页:Love And Program的个人主页 💖💖如果对你有帮助的话希望三连💨💨支持一下博主 python是目前非常火爆的…

Python快速刷题网站——牛客网 数据分析篇(十)

👦👦一个帅气的boy,你可以叫我Love And Program 🖱 ⌨个人主页:Love And Program的个人主页 💖💖如果对你有帮助的话希望三连💨💨支持一下博主 python是目前非常火爆的…

Python快速刷题网站——牛客网 数据分析篇(十一)

👦👦一个帅气的boy,你可以叫我Love And Program 🖱 ⌨个人主页:Love And Program的个人主页 💖💖如果对你有帮助的话希望三连💨💨支持一下博主 python是目前非常火爆的…

猿创征文|Python快速刷题网站——牛客网 数据分析篇(十二)

👦👦一个帅气的boy,你可以叫我Love And Program 🖱 ⌨个人主页:Love And Program的个人主页 💖💖如果对你有帮助的话希望三连💨💨支持一下博主 python是目前非常火爆的…

怎么让网站在浏览器网址前面显示小图标?

大家在浏览很多网站的时候都会发现在浏览器的地址栏前面会有一个小图标,在浏览器的标签位置也有一个小图标,例如 Baidu 、腾讯等网站都有这样的图标。你的网站上想不想也增加一个这样的小图标呢?有了这个小图标你的网站就会比别人的网站更加醒…

网站首页滚动图片的后台管理

在网上找了好久的资源都没有找到,怎么实现在后台可以更换网站图片的,因为是在做项目,最后项目要交给,不 太懂计算机的管理员来管理, 这样就涉及到了,怎么让网站的管理员可以定期更换滚动的图片&#xff0c…

Java实现视频网站的视频上传、视频转码、视频关键帧抽图, 及视频播放功能

视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpeg有非常强大的功能包括视频采集功能、视频格式转换、视频抓图、给视频加水印等。 ffmpeg视频…

LAMP架构(LAMP网站应用模式)搭建,包含Apache,Mysql,PHP的安装

文章目录LAMP架构概述各组件的主要作用如下:注意事项Apache安装关闭防火墙,传输apache所需软件包安装环境依赖包配置软件模块编译安装优化配置文件路径添加httpd系统服务修改httpd 服务配置文件查看状态浏览器访问验证Mysql安装将安装mysql 所需软件包传到/opt目录下…

Nginx网站服务(Nginx虚拟主机的搭建)

Nginx网站服务以及LNMP搭建 文章目录Nginx网站服务以及LNMP搭建Nginx服务基础关于NginxNginx相对于Apache的优点:Apache相对于Nginx的优点:Nginx访问控制安装关闭防火墙安装依赖包创建运行用户、组编译安装Nginx启动前先关掉之前装的apache服务检查、启动、重启、停止 nginx服务…