話說我的 blog 好像整整空了一個多月?
因為準備推甄與專題比賽,整個十一月份是空白的
可不能讓它變成雙月誌阿…
今天為 FreeBSD-box 買了 黑色的 USB 鍵盤,在 Lab 裡試用
下意識的第一個動作就是把食指伸到”G” & “H” 的中間找小紅點…
廢話不多說,來看看如何在 FreeBSD 底下達到 USB 鍵盤熱插拔吧!!
*原理解說
FreeBSD 在 3.1 之後就支援 USB
通常鍵盤偵測的順位是 AT(or PS/2) 的 atkbd
接下來才是 USB 的 ukbd
因此,分別被 assign 到 /dev/kbd0 與 /dev/kbd1 這兩個 character file
但若是系統僅存在一支 USB keyboard,則將 ukbd assign 到 /dev/kbd0
倘若只是如此,一旦鍵盤沒有在開機前就接上
system boot 的過程中沒有偵測到,便不會載入 keyboard driver
因此我們要在還要告訴 kernel 的 system console,也就是 sc0
儘管開機時沒有偵測到 keyboard,也要載入 keyboard driver
並定期掃描鍵盤是否被接上。
如此一來,就達到 hot-pulgged 的目的!!
*系統配置
確認 kernel 以下配置是 enabled,否則要 recompile kernel:
device uhci
device ohci
device usb
device ukbddevice sc0 at isa? 0x0100
前四項是 USB 鍵盤的相關設定
最後一項就是 syscons 加上 0x0100 旗標,表示定期掃描鍵盤是否存在
並在 /etc/rc.conf 中加入
usbd_enable=”YES”
之後 reboot
藉由以上的 kernel configuration
就再也不怕鍵盤拔下重複插上後無法動作的窘境 😛
*參考資料
*附記
那麼 PS/2 能不能達到一樣的目的呢?
基本上,PS/2 的規格並不支援熱插拔
所以這就要看系統的 implementation 了…
然而,FreeBSD 底下可以藉由改變 kernel options 的方式來達成:
原本的 kernel configuration 當中有一行
device atkbd0 at atkbdc? irq 1 flags 0x1
將其更改為
device atkbd0 at atkbdc? irq 1
原因是因為 atkbd 的旗標定義:
bit 0 (FAIL_IF_NO_KBD)
預設是載入鍵盤 driver 的,但在核心設定檔中卻將旗標改成 Bit 1。