news 2026/5/26 7:34:29

51.自定义工作队列

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
51.自定义工作队列

相比于传统工作队列可控性强。

驱动编写

#include <linux/module.h> #include <linux/init.h> #include <linux/interrupt.h> #include <linux/gpio.h> #include <linux/delay.h> #include <linux/workqueue.h> int irq; struct workqueue_struct *test_workqueue; struct work_struct test_workqueue_work; // 工作项处理函数 void test_work(struct work_struct *work) { msleep(1000); printk("This is test_work\n"); } // 中断处理函数 irqreturn_t test_interrupt(int irq, void *args) { printk("This is test_interrupt\n"); queue_work(test_workqueue, &test_workqueue_work); // 提交工作项到工作队列 return IRQ_RETVAL(IRQ_HANDLED); } static int interrupt_irq_init(void) { int ret; irq = gpio_to_irq(101); // 将GPIO映射为中断号 printk("irq is %d\n", irq); // 请求中断 ret = request_irq(irq, test_interrupt, IRQF_TRIGGER_RISING, "test", NULL); if (ret < 0) { printk("request_irq is error\n"); return -1; } test_workqueue = create_workqueue("test_workqueue"); // 创建工作队列 INIT_WORK(&test_workqueue_work, test_work); // 初始化工作项 return 0; } static void interrupt_irq_exit(void) { free_irq(irq, NULL); // 释放中断 cancel_work_sync(&test_workqueue_work); // 取消工作项 flush_workqueue(test_workqueue); // 刷新工作队列 destroy_workqueue(test_workqueue); // 销毁工作队列 printk("bye bye\n"); } module_init(interrupt_irq_init); module_exit(interrupt_irq_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("quan");

Makefile

obj-m += custom_workqueue.o KDIR:=/home/linux/samba-mount/linux-kernel/linux-6.17.5 PWD?=$(shell pwd) all: make -C $(KDIR) M=$(PWD) modules echo $(PWD) clean: rm -rf *.ko *.o *.mod *.mod.o *.mod.c *.symvers *.order install: cp *.ko ../../linux-kernel/linux-6.17.5/kmodules

编译及实验

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 23:32:00

计算机毕业设计springboot药店管理系统 基于SpringBoot的药品零售信息管理平台 SpringBoot驱动的智慧药房综合运营系统

计算机毕业设计springboot药店管理系统04t639km &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。传统药店每天需要处理大量药品的流转、库存、销售与顾客服务&#xff0c;人工台账…

作者头像 李华
网站建设 2026/5/26 0:30:54

17、Linux 网络与内核管理及任务自动化全解析

Linux 网络与内核管理及任务自动化全解析 1. 无线设备与黑客技术 无线设备是未来连接和黑客攻击的重要领域。Linux 系统开发了专门的命令用于扫描和连接 Wi-Fi 接入点(AP),这是对这些系统进行黑客攻击的第一步。 无线黑客工具套件 aircrack - ng 套件 :包含 airmon -…

作者头像 李华
网站建设 2026/5/26 2:27:15

编程考级避坑指南:三大误区需警惕

编程考级避坑指南:三大误区需警惕 很多家长关心孩子学习编程后是否需要参加考级,以及如何选择适合的考试。编程考级并非学习的最终目标,但如果选择得当,可以有效帮助孩子梳理知识体系,提升综合能力。 一、考级的真正意义:避开三个常见误区 考级的核心在于“以考促学”…

作者头像 李华
网站建设 2026/5/26 0:35:19

专攻C++编程考级:适合什么样的孩子

专攻C++编程考级:适合什么样的孩子 一、C++编程考级的核心价值 青少年编程学习与考级通常分为几个阶段:兴趣启蒙、系统进阶以及竞赛升学导向。C++编程考级处于后两个阶段的交汇处,它不仅能通过标准化测试验证学生在算法、数据结构等领域的进阶能力,还能为参与信息学竞赛打…

作者头像 李华
网站建设 2026/5/26 3:59:23

任务中心我的待办、已办功能 与流程中心我的任务里的待办、已办没区别,为什么流程中心无需单独配置端口号,而任务中心却需要?

问题描述: 任务中心我的待办、已办功能 与流程中心我的任务里的待办、已办没区别&#xff0c;为什么流程中心无需单独配置端口号&#xff0c;而任务中心却需要&#xff1f; 解决方案: 任务中心和流程中心有区别的&#xff0c; 任务中心是一个单独的组件&#xff0c;是消息集…

作者头像 李华
网站建设 2026/5/26 3:16:45

Tinker终极指南:如何让大模型学会高效使用搜索工具

Tinker终极指南&#xff1a;如何让大模型学会高效使用搜索工具 【免费下载链接】tinker-cookbook Post-training with Tinker 项目地址: https://gitcode.com/GitHub_Trending/ti/tinker-cookbook 在当今AI快速发展的时代&#xff0c;大型语言模型如何有效利用外部工具已…

作者头像 李华