[問題] 虛擬機keyboard driver更換

看板LinuxDev作者 (岳岳)時間7年前 (2018/02/04 01:20), 編輯推噓0(007)
留言7則, 2人參與, 7年前最新討論串1/1
大家好 小弟目前用虛擬機在練習寫一些kernel module 目前在簡單的keyboard driver 想法是用interrupt handler(自己寫的,而不是i8042這個)去處理 IRQ1 不過目前遇到個問題: 因為i8042就有一個interrupt handler去處理鍵盤的中斷 所以變成每次都會有兩個handler去處理(?) 雖然是成功request_irq了 ( cat /proc/interrupts 有看到我寫的和i8042) 遇到的問題: 是否有辦法先把i8042 在我insmod時用類似free_irq()方式拔掉, 等我rmmod我自己的module時 再把它裝回來呢? (查了一些資料但是好像都沒有解) 而我自己嘗試free_irq 裡面需要的dev_id 我沒辦法拿i8042的dev_id來用 因為在 i8042.c 這裡面他是宣告成static的 另外在這邊 http://www.tldp.org/LDP/lkmpg/2.4/html/x1210.html 看他範例給的 free_irq(1, NULL) 好像會把irq1 的handler全部清掉 不過我試了以後 只有得到 trying to free already-free IRQ1 (這樣感覺比較合理 因為需dev_id才能知道要free 哪個吧?) 請大家指點 謝謝 -- 阿.阿..>///< YOOOOO~ 我們... ˊ 嗚~ ˊ ˊ □ □ 真的只是... □□ □□ □□ □□ □□ □□ □□ □□ □ □ 俄羅斯方塊... ξhsiao335. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 155.41.126.177 ※ 文章網址: https://www.ptt.cc/bbs/LinuxDev/M.1517678404.A.73C.html

02/04 12:57, 7年前 , 1F
這篇範例阿..他kernel還在2.4 所以他的dev_id才可以傳NULL
02/04 12:57, 1F

02/04 12:58, 7年前 , 2F
你可以用irq_to_desc(irq)把irq轉struct irq_desc
02/04 12:58, 2F

02/04 12:59, 7年前 , 3F
裡面有個 struct irqaction *action; 就是irq action list
02/04 12:59, 3F

02/04 12:59, 7年前 , 4F
struct irqaction裡面就有dev_id
02/04 12:59, 4F

02/04 13:02, 7年前 , 5F
你可以檢查name欄位是不是你要free的action (i8042)
02/04 13:02, 5F

02/04 13:06, 7年前 , 6F
不是的話可以一路next到NULL為止
02/04 13:06, 6F

02/05 03:30, 7年前 , 7F
謝謝g大 我研究一下
02/05 03:30, 7F
文章代碼(AID): #1QTUz4Sy (LinuxDev)
文章代碼(AID): #1QTUz4Sy (LinuxDev)