news 2026/8/22 2:59:51

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/8/21 22:51:35

IT圈的大实话!做运维不如卷网络安全,这可能是你转行的最后的机会

前言&#xff1a;金九银十里的运维转行潮​ 2025已经到了 “金九银十”的招聘季&#xff0c;我约了三个做运维的老伙计吃饭&#xff0c;饭桌上一半的话题都绕着 “辞职转行” 转。最让我感慨的是小张 —— 他在某集成商做运维 5 年&#xff0c;去年还跟我吐槽 “出差累但稳定”…

作者头像 李华
网站建设 2026/8/21 23:54:45

灵遁者诗歌集大象万镜——豆包版诗歌集

大象万镜——豆包版诗歌集第一辑&#xff1a;生活褶皱里的星子 1. 早餐的量子煎蛋的油星跳在瓷砖上像未被捕捉的量子——母亲的手悬在锅沿&#xff0c;腕上银镯碰响搪瓷碗&#xff0c;声音折进蛋黄半凝的纹路里我捏着吐司的指尖粘了粒芝麻&#xff0c;它反光时我看见去年暴雨里…

作者头像 李华
网站建设 2026/8/21 7:14:19

拓扑量子信息基元理论5点预言

第二十七章&#xff1a;拓扑量子信息基元理论5点预言拓扑量子信息基元理论&#xff08;简称TQIT&#xff09;虽然尚未完全成型&#xff0c;但基于其核心原则&#xff0c;我们可以推导出几个革命性的、可被未来实验验证的预言。这些预言主要分为两类&#xff1a;1) 对现有理论框…

作者头像 李华
网站建设 2026/8/21 22:26:44

灵遁者:我试图描述这场语言的雪崩,却成为雪崩的一部分

1. 【元诗之镜 自我指涉的漩涡】 这首诗关于它自身如何被写下。 词语在诞生前就已磨损&#xff0c;意象 在浮现时便走向消解。 我试图描述这场语言的雪崩&#xff0c; 却成为雪崩的一部分。 2. 【语法之镜 结构的崩塌】 主谓宾的秩序在燃烧&#xff0c;标点符号 叛逃…

作者头像 李华
网站建设 2026/8/21 22:52:22

基于PLC除尘设备控制系统的设计10.12

第二章 除尘设备控制系统的硬件构成 2.1 可编程控制器的特点 现代工业以快速智能自动化发展为主&#xff0c;PLC作为一种专用于工业控制的计算机&#xff0c;应用方面广泛&#xff0c;功能强大&#xff0c;操作方便&#xff0c;因此PLC控制系统相比于继电器控制系统和单片机控制…

作者头像 李华
网站建设 2026/8/21 14:51:08

基于PLC的新型工业码垛机器人控制系统设计

摘 要 码垛机器人是现代工业自动化领域中经常遇到的一种控制对象。随着近些年工业的迅速发展&#xff0c;以及人工费的增长&#xff0c;码垛机器人的应用更为广泛&#xff0c;逐渐形成了一门新型学科&#xff0c;被广泛应用于食品&#xff0c;饮料&#xff0c;油类加工以及钢铁…

作者头像 李华