例項 中斷的下半部分之三work queue

2021-06-15 09:43:47 字數 1866 閱讀 1892

在linux中使用工作佇列work_queue

軟硬體環境:linux-2.6.36/s3c2440

工作佇列在程序上下文中執行,允許重新排程甚至睡眠

test.c

#

include

#include

#include

#include

#include

#include

#include

#include

#include

#include

<

asm/current.h>

module_license(

"gpl");

module_author(

"zhanglong");

struct work_struct my_work;

void work_handle(

struct work_struct*

arg)

irqreturn_t irq_handle(

int irq,

void

*dev_id)

int test_init(

void

)return 0;

}void test_exit(

void

)module_init(test_init)

;module_exit(test_exit)

;

makefile

kernel    = /media/study/linux/kernel/my2440-2.6.36

#kernel    = /lib/modules/$(shell uname -r)

/build

default:

make -c $(kernel) m=

$(shell pwd) modules

clean:

make -c $(kernel) m=

$(shell pwd) modules clean

modules_install:

make -c $(kernel) m=

$(shell pwd) modules_install install_mod_path=

/home/zl/s3c2440_nfs

depmod -a -b /home/zl/s3c2440_nfs 2.6.13-my2440

obj-m    +

=test

.o

make後插入生成的test.ko模組。按下gpf0所在的按鍵,終端會有輸出:

[root@zhanglong mywork]# ----irq handle. dev_id = 123

current: kworker/0:1, pid: 267

----irq handle. dev_id = 123

----irq handle. dev_id = 123

----irq handle. dev_id = 123

----irq handle. dev_id = 123

----irq handle. dev_id = 123

----irq handle. dev_id = 123

----irq handle. dev_id = 123

----irq handle. dev_id = 123

----irq handle. dev_id = 123

after sleep, data = 0

current: kworker/0:1, pid: 267

after sleep, data = 0

[root@zhanglong mywork]# 

例項 中斷的下半部分之 軟中斷

在linux中斷加入自已的軟中斷 軟硬體環境 linux 2.6.36 s3c2440 步驟如下 在軟中斷定義的列舉型別列表中加入自已的軟中斷號my softirq 具體到linux 2.6.36 include linux interrupt.h的第376行的列舉列表。其中已經有10項,在nr s...

中斷的上半部分與下半部分

為了讓核心能夠快速響應硬體裝置的訊息,引入了中斷機制。當硬體裝置需要被處理 比如網絡卡收到了包 會傳送乙個非同步的中斷請求給處理器,然後處理器陷入中斷上下文中,停止當前執行的程式,轉而執行預先設定好的中斷處理程式。完成中斷處理程式之後給硬體裝置乙個訊號再返回原先的工作繼續。在這套機制中,中斷處理程式...

中斷下半部的三種機制

tasklet 工作佇列 各種機制的比較 之前提到過,之所以中斷會分成上下兩部分,linux 的上半部就是中斷處理程式,下半部採用三種機制來實現,這樣分兩部執行的策略有利於縮短響應硬體的時限。對於乙個中斷,如何劃分出上下兩部分呢?哪些處理放在上半步,哪些放在下半部?這裡有一些經驗可供借鑑 如果乙個任...