http://blog.csdn.net/jin13277480598/article/details/51019762

感谢博主讲的关于为什么需要中断底半部,什么是中断底半部

下半部运行时是允许中断请求的,而上半部运行时是关中断的


头文件:<linux/Workqueue.h>


/**

*工作的数据类型是结构体类型

*/

struct work_struct {

atomic_long_t data;
     struct list_head entry;
     work_func_t func;

#ifdef CONFIG_LOCKDEP
    struct lockdep_map lockdep_map;

#endif
};


/**

*功能:将_func指向的工作处理函数,赋值给_work结构体中的fun函数指针,即创建工作结构,给工作结构填充一个处理函数。

*_work的类型是 struct work_struct

*_func的类型是函数指针,typedef void (*work_func_t)(struct work_struct *work);

*/

INIT_WORK(_work, _func)     这是个宏定义


在大多数情况下, 并不需要自己建立工作队列,而是只定义工作, 将工作结构挂接到内核预定义的事件工作队列中调度, 在kernel/workqueue.c中定义了一个静态全局量的工作队列static struct workqueue_struct *keventd_wq,keventd_wq由内核自己维护,创建,销毁。这样work马上就会被调度,一旦其所在的处理器上的工作者线程被唤醒,它就会被执行。

/**

*功能:调度工作结构, 将工作结构添加到全局的事件工作队列keventd_wq

*/

bool schedule_work(struct work_struct *work);

static void work_handler(struct work_struct *work)
{printk("--%s--%s--&d--\n",__FILE__,__func__,__line__);
}struct work_struct wq;
INIT_WORK(&wq,work_handler);  //这个放到内核模块加载函数中
schedule_work(&wq);           //这个放到中断处理函数中去

Tasklet    头文件:<linux/interrupt.h>


struct tasklet_struct

{
 struct tasklet_struct *next;
 unsigned long state;
 atomic_t count;
 void (*func)(unsigned long);  //处理函数
 unsigned long data;              //给处理函数的参数
};


/**

*功能:定义并初始化一个struct tasklet_struct结构体类型的变量,并绑定中断处理函数(也可以说是底半部函数)

*name:数据类型是struct tasklet_struct

*func函数指针指向一个void (*func)(unsigned long); 的处理函数

*data给处理函数的参数

*/

#define DECLARE_TASKLET(name, func, data)   struct tasklet_struct name = { NULL, 0, ATOMIC_INIT(0), func, data } //这是个宏,完成了定义及初始化


/**

*功能:调用自己的中断处理程序

*/

void tasklet_schedule(struct tasklet_struct *t);

转载于:https://blog.51cto.com/5468775/2087959

Linux内核提供了三种不同形式的中断底半部实现机制:软中断、tasklet和工作队列。...相关推荐

  1. Linux内核学习(三):Bootloader的特种兵-Uboot(一)

    Linux内核学习(三):Bootloader的特种兵-Uboot(一) 内容全部来自–><嵌入式应用开发完全手册> 1.什么是U-Boot U-Boot,全称为Universal ...

  2. linux 内核 死锁 检查,一种linux内核自旋锁死锁检测报告系统和方法与流程

    本发明涉及内核死锁检测领域,具体的说是一种linux内核自旋锁死锁检测报告系统和方法. 背景技术: linux内核死锁是长期困扰内核开发人员的问题之一,但自内核引入lockdep调试模块之后,内核死锁 ...

  3. VMWare虚拟机三种网络形式

    网关的概念 网关: 网关实质上是一个网络通向其他网络的IP地址.比如有网络A和网络B,网络A的IP地址范围为"192.168.1.1~192. 168.1.254",子网掩码为25 ...

  4. 查看linux 文件创建时间,在Linux下查看文件三种时间

    原标题:在Linux下查看文件三种时间 在Linux下,文件包含三种时间属性,分别为: atime(access time):最近访问文件内容时间(Last Access Time). mtime(m ...

  5. Linux下文件的三种时间戳

    Linux下文件的三种时间标记 三种时间对应关系表 column column column 访问时间 Access atime 修改时间 Modify mtime 状态改动时间 Change cti ...

  6. 虚拟机linux和主机网络连接,linux虚拟机中和主机三种网络连接方式的区别

    linux虚拟机中和主机三种网络连接方式的区别 在介绍网络模式之前,关于网络的几个简单命令的使用 ifup eth0 //启动网卡eth0 ifdown eth0 //关闭网卡eth0 /etc/ne ...

  7. linux系统查看FTP用户名密码,Linux的FTP的三种登录方式:

    Linux的FTP的三种登录方式: 我们登录FTP有三种方式,匿名登录.本地用户登录和虚拟用户登录. 匿名登录:在登录FTP时使用默认的用户名,一般是ftp或anonymous. 本地用户登录:使用系 ...

  8. linux内核启动分析 三,Linux内核分析 实验三:跟踪分析Linux内核的启动过程

    贺邦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一. 实验过程 ...

  9. Linux内核分析(三)----初识linux内存管理子系统

    原文:Linux内核分析(三)----初识linux内存管理子系统 Linux内核分析(三) 昨天我们对内核模块进行了简单的分析,今天为了让我们今后的分析没有太多障碍,我们今天先简单的分析一下linu ...

  10. linux监控命令执行,你可能不知道的 即时监控 Linux 使用者执行指令的三种方法...

    原标题:你可能不知道的 即时监控 Linux 使用者执行指令的三种方法 这里介绍如何在 Linux 系统上以管理者权限即时监控一般使用者所执行的任何指令. Linux 的 root 管理者可对系统进行 ...

最新文章

  1. 在浏览器中进行深度学习:TensorFlow.js (四)用基本模型对MNIST数据进行识别
  2. 网页Request Headers请求头和Response Headers响应头
  3. vc++ 提取网页上的文字_用奢悦vc一般多久能反黑
  4. 画手cv什么意思_lt;3招gt;助你搞定工科出国留学申请简历(CV)!
  5. HDU2191——悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
  6. Linux node使用npm成功安装命令后,执行时却报找不到命令的问题
  7. 基于深度学习的自动化行人检测和监控系统
  8. 【水果识别】基于matlab GUI RGB+HSV水果成熟度分级系统【含Matlab源码 825期】
  9. SparkSQL Analyzed实例源码解析
  10. 干货分享:如何把APP软文推广做到好
  11. 高盛:79页区块链报告-《从理论到实践》(附下载)
  12. Window11一键安装APK应用详细教程,及错误解决
  13. x3650服务器引导盘制作,IBM X System ServerGuide 8.41 服务器 系统安装 引导盘图文教程...
  14. 如何在 Mac 中隐藏文件或文件夹?
  15. 全球时区查询 API数据接口
  16. 设计模式--享元模式(Flyweight)
  17. java clob http传送_JAVA CLOB作为参数传给ORACLE后台
  18. 华为路由器hilink怎么用_路由器是华为HiLink协议的连接中心
  19. pbootcms后台编辑器上传mp4视频 默认黑屏不显示如何解决
  20. 在Idea中修改项目名称

热门文章

  1. bag of word C++图像批量读写
  2. [算法练习] 把字符串转换成整数
  3. 利用python自动发邮件
  4. ThinkPHP5.0 实现 app支付宝支付功能
  5. easyui焦点离开事件的解决方案
  6. Cuba studio框架中使用thymeteaf模板时中文乱码
  7. 直播推流之blibli和拉流LFLiveKit
  8. 猪猪的机器学习笔记(十五)主题模型
  9. hdu 1251 字典树的简单应用
  10. flash cs4中3D特性之PerspectiveProjection属性设置