2009年9月17日 星期四

CUSE - Userspace Character Device 機制

Standard
因為最近碰上了 KMS(Kernel Mode Setting)的 bug,造成偵測解析度出現問題,於是為了解決這問題,又開始追 Linux Kernel 的 Log,但原先的目標沒有追到,反而有些其它的意外發現。話說,2.6.31 已經在本月 9 日正式釋出,其中有些新的實作和令人興奮的支援,如:USB 3.0、日前提到過的『Fanotify 更全面性的檔案監控機制』,其實另外還有一個重要的機制『CUSE(Character devices in Userspace)』。

如同 FUSE(Filesystem in Userspace),CUSE 目標提供一個機制,讓開發者可在 userspace 實作 character device,而不用撰寫 kernel space 的 module 來達成這項目的。這機制有助於許多驅動程式的開發,甚至是讓 Linux 在未來開發各種支援時,能有更大的彈性以及使核心有更高的安全性。從 patch 來看,由於許多部份已經在過去開發 FUSE 時被實作過,讓開發者可以輕易的延用過去成果實作 CUSE。

這有一個專案『OOSP(Open Sound System Proxy)』,就嘗試著用 CUSE 實作一個假的裝置檔,讓老的音效應用程式可以在不修改的情況下,藉由這個 OOS Proxy 去使用新的音效驅動程式架構(如:Alsa),其做法就是產生 OSS 的 /dev/dsp、/dev/adsp、/dev/mixer 再將這些 character devices 接收到的訊息,處理並轉送到現代的音效驅動程式架構。