在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 的上半部就是中斷處理程式,下半部採用三種機制來實現,這樣分兩部執行的策略有利於縮短響應硬體的時限。對於乙個中斷,如何劃分出上下兩部分呢?哪些處理放在上半步,哪些放在下半部?這裡有一些經驗可供借鑑 如果乙個任...