news 2026/6/15 18:08:27

53.自定义工作队列传参

作者头像

张小明

前端开发工程师

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

这里用到了container_of,可以利用某个成员的地址,顺藤摸瓜拿到拿到整个结构体的地址

驱动

#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 work_data { struct work_struct test_work; int a; int b; }; struct work_data test_workqueue_work; struct workqueue_struct *test_workqueue; // 工作项处理函数 void test_work(struct work_struct *work) { struct work_data *pdata; pdata = container_of(work, struct work_data, test_work); printk("a is %d", pdata->a); printk("b is %d", pdata->b); } // 中断处理函数 irqreturn_t test_interrupt(int irq, void *args) { printk("This is test_interrupt\n"); // 提交工作项到工作队列 queue_work(test_workqueue, &test_workqueue_work.test_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, test_work); test_workqueue_work.a = 1; test_workqueue_work.b = 2; return 0; } static void interrupt_irq_exit(void) { free_irq(irq, NULL); // 释放中断 cancel_work_sync(&test_workqueue_work.test_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 += workqueue_data.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

编译及在开发板上测试

实现了一个由 GPIO 101 上升沿触发的中断程序。每当中断触发,它都会在系统后台异步打印出a is 1b is 2

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

零基础小白网络安全入门指南:2025年保姆级攻略

一、为什么选择网络安全&#xff1f;网络安全行业正处于黄金发展期&#xff0c;2025年人才缺口达200万&#xff0c;平均薪资区间6k-15k&#xff0c;工作2年后可达8k&#xff0c;5年经验突破12k。无论是想转行还是提升技能&#xff0c;网络安全都是值得投入的优质赛道。二、新手…

作者头像 李华
网站建设 2026/6/15 14:04:32

精品数据分享 | 锂电池数据集(八)CALCE电池数据集-圆柱形电池

继前分享的锂电池数据 精品数据分享 | 锂电池数据集&#xff08;一&#xff09;新能源汽车大规模锂离子电池数据集 精品数据分享 | 锂电池数据集&#xff08;二&#xff09;Nature子刊论文公开锂离子电池数据 精品数据分享 | 锂电池数据集&#xff08;三&#xff09;西安交通…

作者头像 李华
网站建设 2026/6/15 2:31:04

资深黑客都在删除的Linux日志,记录了哪些致命信息?黑客技术零基础入门必看教程!

日志文件对于任何 Linux 用户而言都是至关重要的工具。它们记录了操作系统和应用程序运行时发生的事件信息&#xff0c;包括错误、警告和安全警报等。系统会根据一系列规则自动记录这些信息&#xff0c;帮助管理员监控系统状况并排查问题。在本文中&#xff0c;我们将深入探讨日…

作者头像 李华
网站建设 2026/6/15 14:15:12

《无界流痕——182首意诗歌集》序言

豆包版序言&#xff1a;《无界流痕——182首意诗歌集》序言提笔写这篇序言时&#xff0c;窗台上的绿萝又抽了新叶&#xff0c;像我笔底那些没说完的句子——一晃眼&#xff0c;与诗歌相撞的日子&#xff0c;竟已走了二十年。曾在深夜的台灯下把烟蒂摁灭在稿纸旁&#xff0c;让月…

作者头像 李华
网站建设 2026/6/14 15:54:08

大象万镜:“昨天的梦,今天是路标”

《雨巷的邮差》 雨滴在瓦片上写诗 “未寄出的星期三” 邮差扛着空麻袋走过 袋口漏出半片枫叶 “收件人已改名” 他嘀咕&#xff0c;把落叶夹进未拆的信封 我追上去&#xff0c; 他转身时&#xff0c;雨停了 信封里&#xff0c;全是我的名字 在风里翻飞成蝶 7、《图书馆的窃听…

作者头像 李华
网站建设 2026/6/12 3:37:14

基于PLC控制的运料小车系统设计

摘 要 20世纪60年代以来&#xff0c;随着科学技术的进步和微电子行业的快速发展&#xff0c;可编程控制技术也处于快速发展阶段&#xff0c;在工业自动化控制领域中得到了广泛的运用。可编程控制器&#xff08;PLC&#xff09;拥有可靠性高和操作简便等特点&#xff0c;已经成…

作者头像 李华