- 論壇徽章:
- 0
|
求教wake_up_interruptible相關(guān)的問(wèn)題。!急
我在用戶空間read一個(gè)設(shè)備,在這個(gè)設(shè)備的read函數(shù)中interruptible_sleep_on(&myirq_waitq);
當(dāng)我按下按鍵,來(lái)外部中斷IRQ15時(shí),在中斷服務(wù)程序中執(zhí)行wake_up_interruptible(&myirq_waitq);
現(xiàn)在當(dāng)產(chǎn)生外部中斷時(shí),程序一執(zhí)行到wake_up_interruptible(&myirq_waitq)時(shí)就死機(jī)!
我的 內(nèi)核是 2.4.18,用模塊調(diào)試設(shè)備驅(qū)動(dòng)程序.在模塊中,已經(jīng)在全局中DECLARE_WAIT_QUEUE_HEAD(myirq_waitq);
后來(lái) 我再中斷服務(wù)程序中加了
if (waitqueue_active(&myirq_waitq)) wake_up_interruptible(&myirq_waitq)
不死機(jī)了
但是每次按下按鍵,都不執(zhí)行wake_up_interruptible,用戶程序一直睡眠,不能喚醒! 應(yīng)該是進(jìn)程未添加到等待隊(duì)列中。后來(lái)用在驅(qū)動(dòng)中的read函數(shù)里加了
DECLARE_WAITQUEUE(wait,current);
if(flags==0){
add_wait_queue(&myirq_waitq,&wait);
current->state = TASK_INTERRUPTIBLE;
}代替interruptible_sleep_on(&myirq_waitq)
結(jié)果read調(diào)用沒(méi)有阻塞,每次調(diào)用都不等待中斷,直接返回-1,郁悶啊,困擾好長(zhǎng)時(shí)間了!是不是真的和內(nèi)核版本有關(guān)系呢,2.4.18不能用wake_up_interruptible嗎? |
|