- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在函数声明中
int request_irq(unsigned int irq,
irqreturn_t (*handler)(int, void *, struct pt_regs *),
unsigned long irqflags,
const char *devname,
void *dev_id);
dev_id
是“输入”参数还是“输出”参数?我们从哪里得到这个数字?
最佳答案
Dev_id
是一个输入参数,必须是全局唯一的。通常设备数据结构的地址用作Dev_id
。
如果中断线路未共享,则它的值为 NULL
。它仅在共享中断线时才有意义。共享时,此参数唯一标识共享 IRQ 上的中断处理程序
。
但最近为了更快地处理中断,linux 内核已移动到request_threaded_irq
。
例如,在 linux 内核中,wm8903 音频编解码器的 i2c 驱动程序以下列方式使用此 API - 使用 request_threaded_irq()
但 dev_id 的使用是相同的。
设备结构是:
117 struct wm8903_priv {
118 struct wm8903_platform_data *pdata;
119 struct device *dev;
120 struct snd_soc_codec *codec;
121 struct regmap *regmap;
122
123 int sysclk;
124 int irq;
125
126 int fs;
127 int deemph;
128
129 int dcs_pending;
130 int dcs_cache[4];
131
132 /* Reference count */
133 int class_w_users;
134
135 struct snd_soc_jack *mic_jack;
136 int mic_det;
137 int mic_short;
138 int mic_last_report;
139 int mic_delay;
140
141 #ifdef CONFIG_GPIOLIB
142 struct gpio_chip gpio_chip;
143 #endif
144 };
处理程序定义了指向该结构的指针:
2029 struct wm8903_priv *wm8903; //this is the dev_id parameter
然后调用request_threaded_irq
(),
ret = request_threaded_irq(i2c->irq, NULL, wm8903_irq,
2156 trigger | IRQF_ONESHOT,
2157 "wm8903", wm8903);
关于c - request_irq中的dev_id参数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22471142/
我在 ARM 处理器上运行嵌入式 linux 3.2.6。我正在使用修改版的 atmel 串行驱动程序来控制我设备上的 4 个 USART 端口。当我使用内核编译的驱动程序时,一切正常。但我想改为将驱
据我所知,它“分配一条中断线”,但是 > what is happening after request_irq()? > How a particular handler is getting ca
我知道通过 request_irq 我们可以安排一个 work_queue,而通过 request_threaded_irq 我们可以产生一个 kthread 作为中断的下半部分。但是 workque
这是我的问题。我目前正在更新 arm 嵌入式 Linux 机器的内核,从 4.1 到 4.14.73。 我遇到了驱动程序方面的问题。对于内核 4.1,在使用 request_irq 注册 irq 之前
request_irq 和 setup_irq 有什么区别? 何时使用 request_irq()什么时候使用 setup_irq() 最佳答案 从内核源代码 kernel/irq/manage.c
据我所知,两者都用于注册中断处理程序。我在内核代码中看到了很多 request_irq 调用,但甚至没有看到一个 __interrupt 调用。 __interrupt 是从用户空间注册处理程序的某种
我正在尝试在由 gpio 中断触发的内核模块中设置中断处理程序,但我似乎没有使用 request_irq() 函数正确的...我正在通过 gpio_to_irq() 获取我的 irq-number,这
我正在学习 Linux 中的设备驱动程序编程。我想知道在哪里可以找到用作 request_irq 函数中“irq”参数的 IRQ 号? int request_irq (unsigned int ir
在浏览 2.6.35 时,在某些驱动程序中,观察到 request_irq 被传递给 irq 标志的值 0。当在 interrupt.h 中看到时 - 0 对应于 IRQ_TRIGGER_NONE;
我正在编写一个简单的内核模块,它可以注册一个中断并处理它。但是,当我尝试通过调用 request_irq 函数来注册中断时,它返回错误代码 -22 : ERROR: Cannot request IR
我正在为 IRQ 号 8 开发一个驱动程序,它对应于 RTC 时钟。我有以下问题。当我用 request_irq 请求那个 IRQ 时,我得到一个 EBUSY 错误。我认为首先使用 free_irq(
我是一名优秀的程序员,十分优秀!