在内核中,除了可以通过request_irq()、devm_request_irq()申请中断以外,还可以通过request_threaded_irq()和devm_request_threaded_irq()申请。这两个函数的原型为: 由此可见,它们比request_irq()、devm_request_irq()多了一个参数thread_fn。用这两个API申请中断的时候,
irq_thread机制的主要步骤如下:1. 当中断发生时,内核首先将中断处理程序标记为可运行状态。2. 然后,内核启动一个新的线程来执行这个中断处理程序。这个线程通常被称为irq_thread。3. irq_thread线程在执行过程中会调用do_IRQ()函数来处理实际的中断事件。4. do_IRQ()函数会根据中断类型调用相应的硬件抽象层(...
irq_thread机制的核心思想是将中断处理程序从内核上下文中移出,转而在用户态创建一个专门的线程来处理中断请求。这个线程被称为irq_thread。irq_thread在内核注册的中断向量表中占据一个特殊的槽位,当对应的硬件设备发生中断时,硬件会触发相应的中断请求,并将中断处理程序的控制权交给irq_thread。 在irq_thread的实现...
* IRQF_ONESHOT Run thread_fn with interrupt line masked*/intrequest_threaded_irq(unsignedintirq, irq_handler_t handler, irq_handler_t thread_fn, unsignedlongirqflags,constchar*devname,void*dev_id);/** * devm_request_threaded_irq - allocate an interrupt line for a managed device * @dev: ...
irq:表示哪个中断,后面本喵再详细讲解。 handler:中断上半部处理函数,可以为空。 thread_fn:中断下半部内核线程处理函数。 其他参数在用到时候再进行说明。 Linux中断系统中的重要数据结构 如上图所示便是Linux系统中最重要的数据结构,弄明白这个图也就了解了Linux的中断系统。
threaded_irq: 定义:threaded_irq是内核提供的一种中断处理方式,通过request_threaded_irq或devm_request_threaded_irq函数申请中断,并为中断号分配内核线程。 处理机制:中断上下文执行handler函数,内核线程执行thread_fn。如果handler结束时返回IRQ_WAKE_THREAD,内核调度thread_fn执行。 特点:支持IRQF_...
request_threaded_irq 是在将上半部的硬件中断处理缩短为只确定硬体中断来 自我们要处理的装置,唤醒kernel thread 执行后续中断任务。 缺点: 对于非irq 中断的kernel threads ,需要在原本task_struct 新增struct irqaction 多占 4/8 bytes 记忆体空间 linux kernel 2.6.29 之后(2.6.30)加入request_threaded_irq ...
threaded_irq 内核提供request_threaded_irq()和devm_request_threaded_irq()用于申请中断。这两个函数多了thread_fn参数,为中断号分配内核线程。中断上下文执行handler函数,内核线程执行thread_fn。如果handler结束时返回IRQ_WAKE_THREAD,内核调度thread_fn执行。支持IRQF_ONESHOT标记,自动屏蔽中断,避免...
workqueue机制是内核启动时会为每个CPU创建几个不同优先级的kworker(worker_thread)内核线程,用以集中处理各种中断的下半部的work。 新技术threaded irq,为每一个中断都创建一个内核线程;多个中断的内核线程可以分配到多个CPU上执行。 所以多个不同设备中断的work都会由同一个kworker线程来处理,在多CPU系统中并发效率不...
request_threaded_irq 是在将上半部的硬件中断处理缩短为只确定硬体中断来 自我们要处理的装置,唤醒kernel thread 执行后续中断任务。 缺点: 对于非irq 中断的kernel threads ,需要在原本task_struct 新增struct irqaction 多占 4/8 bytes 记忆体空间 linux kernel 2.6.29 之后(2.6.30)加入request_threaded_irq ...