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

2021-06-15 09:43:47 字數 2048 閱讀 9977

在linux中斷加入自已的軟中斷

軟硬體環境:linux-2.6.36/s3c2440

步驟如下:

1>在軟中斷定義的列舉型別列表中加入自已的軟中斷號my_softirq

具體到linux-2.6.36/include/linux/interrupt.h的第376行的列舉列表。其中已經有10項,在nr_softirqs之前加入my_softirq就可以了。make編譯後使用新核心

2>註冊軟中斷

如:open_softirq(my_softirq, my_softirq_action)

對2.6.36核心,在使用前需用export_symbol_gpl(open_softirq)匯出此函式。

3>在中斷處理程式中觸發軟中斷

如:raise_softirq(my_softirq)

同樣,使用前要用export_symbol_gpl(raise_softirq)匯出此函式。

下面是在s3c2440上實現的乙個例子。其中gpf0設為中斷eint0, 在eint0的中斷處理函式中觸發軟中斷。

test.c

#

include

#include

#include

#include

module_license(

"gpl");

module_author(

"zhanglong");

void my_softirq_action(

struct softirq_action *data)

static irqreturn_t irq_handle(

int irq,

void

*dev_id,

struct pt_regs *regs)

int test_init(

void

)return ret;

}void test_exit(

void

)module_init(test_init)

;module_exit(test_exit)

;

makefile

#kernel    = /home/zl/my2440-2.6.13

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-zl2440

obj-m    +

=test

.o

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

my softirq atcion ok!

irq 123 ok.

my softirq atcion ok!

irq 123 ok.

my softirq atcion ok!

irq 123 ok.

my softirq atcion ok!

irq 123 ok.

my softirq atcion ok!

irq 123 ok.

my softirq atcion ok!

irq 123 ok.

my softirq atcion ok!

irq 123 ok.

my softirq atcion ok!

...

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

在linux中使用工作佇列work queue 軟硬體環境 linux 2.6.36 s3c2440 工作佇列在程序上下文中執行,允許重新排程甚至睡眠 test.c include include include include include include include include inc...

中斷管理之下半部軟中斷

linux中斷管理中有個非常重要的設計理念就是上下半部機制 上半部就是硬體中斷管理 中斷設計為上下半部的原因如下 1.硬體中斷處理程式以非同步方式進行 它會打斷其他重要的 執行 因此為了避免被打斷的程式停止時間太長 硬體中斷處理程式必須盡快完成 2.硬體中斷處理程式通常在關閉中斷的情況下執行 關閉中...

下半部機制之軟中斷

軟中斷 softirq 是用軟體方式模擬硬體中斷的概念,實現巨集觀上的非同步執行效果。softirq是基本的下半部機制,需要互斥使用。一般很少直接使用。通常只用在少數效能比較關鍵的子系統中。它是可重入的,允許乙個softirq的不同例項可同時執行在不同的處理器上。軟中斷的 位於kernel soft...