[問題] 虛擬機keyboard driver更換

作者: b98901056 (岳岳)   2018-02-04 01:19:59
大家好
小弟目前用虛擬機在練習寫一些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 哪個吧?)
請大家指點 謝謝
作者: galic (嘎利)   2018-02-04 12:57:00
這篇範例阿..他kernel還在2.4 所以他的dev_id才可以傳NULL你可以用irq_to_desc(irq)把irq轉struct irq_desc裡面有個 struct irqaction *action; 就是irq action liststruct irqaction裡面就有dev_id你可以檢查name欄位是不是你要free的action (i8042)不是的話可以一路next到NULL為止
作者: b98901056 (岳岳)   2018-02-05 03:30:00
謝謝g大 我研究一下

Links booklink

Contact Us: admin [ a t ] ucptt.com