当前位置: 首页 > news >正文

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

编译及实验

http://www.jsqmd.com/news/78492/

相关文章:

  • 标准IO函数(一)
  • CPU-Z TV版:轻量级硬件检测工具,完美支持电视遥控操作
  • 大蜂智能科技携手拯救HMI:重新定义气调包装设备的智能交互体验
  • 3、Kali Linux入门指南:基础操作与命令详解
  • 当查重报告成为学术通关的“终极审判”,Paperzz 的论文查重功能是如何把“红字警报”变成“优化指南”的——一位被AI率反复狙击的科研新手的认知升级实录
  • BG3模组管理器终极指南:5分钟快速上手博德之门3模组管理
  • 青少年编程考级有必要吗?从价值与误区看真实意义
  • 4、Linux 文件与目录操作及文本处理指南
  • CrystalFetch:Mac用户的Windows 11镜像制作终极指南
  • JetBrains Maple Mono编程字体终极指南
  • 2025实践指南:5天掌握大模型应用开发全流程
  • 专精前端平台 vs. 全能应用平
  • 2026最新!华为认证超全解析,HCIA、HCIP、HCIE一篇说全!
  • 50、Linux 技术全解析:从基础到实战
  • SDXL VAE FP16修复版完全指南:从数值稳定性到高效推理
  • 计算机毕业设计springboot药店管理系统 基于SpringBoot的药品零售信息管理平台 SpringBoot驱动的智慧药房综合运营系统
  • 12、Linux设备管理与日志系统全解析
  • 拯救HMI | 又放大招!分切机源程序免费领!
  • 13、Linux 系统日志处理与服务使用技巧
  • 突然发布!GPT-5.2深夜来袭,3个版本碾压人类专家,打工人该怎么选?
  • 模态框与DOM,及React和Vue中的优化
  • 面向 Agent 的高并发分析:Doris vs. Snowflake vs. ClickHouse
  • 移动端真机测试与模拟器对比分析报告
  • 屏幕共享卡顿?OpenScreen工具3步配置,远程协作效率提升60%
  • 脑科学解锁高效单词记忆法
  • 51、Linux知识与CompTIA考试指南
  • 青春成长题材电影《鱼刺》定档12月24日全国上映 心落柔刺,暖亦相逢
  • 别再让尾货吃掉你的利润!超快消平台,正是数十万商家的共同答案
  • 编程考级与能力提升:避免为证而学的方法
  • Megatron-LM终极指南:从零开始掌握大规模模型分布式训练