原文地址;http://blog.csdn.net/kangear/article/details/37961151
Android內核sysfs中switch類使用實例
終於在這個週末,可以乾點自己想要乾的事了。由我這個二流的內核驅動開發者來解析一下sysfs中的switch類。先推測一下來歷,在普通的嵌入式Linux平臺上,一般是各自爲戰,完全不需要遵循什麼規則。在Android中Google定義了一些潛移默化的規範,你可以完全不遵守。但是按照規則總歸是好的。
先從直觀的來看一下/sys/class/switch類中都有些什麼吧。
首先可以看到實質是鏈接到了/sys/device/virtual/switch/目錄,來看真面目:
這裏包含了4個bl是背光;h2w是耳機;hdmi是hdmi;mic是麥克風 基本都屬於外接式的設備,當然也可以不是比如bl。每個都包含了name/power/state/subsystem/uevent。都可以顧名思義,其中state一般是驅動中提供給用戶空間的狀態值。
那就以LDD3中的最簡單的Hello World例子來做一個switch例子:
添加不足20行代碼就已經實現了最簡的switch了,效果如下所示:
驅動中可以直接調用switch_set_state來設置不同的狀態值。對應地,應用層讀取這個就可以實現狀態獲取。
本文沒有詳細去說明switch實現細節,以實用的角度給出了一個完整的例子。當然如果對實現細節需要有了解的,可以看《switch_class》《android switch模塊》。對於“驅動”想要告知用戶空間狀態的實現就可以採用這個了。
順便提一個編譯LDD3中驅動例子的小技巧: make KERNELDIR=~/4.2.2_r1/kernel/後邊這個是Android內核源碼路徑。當然路徑中的kernel是要是編譯過的。什麼都不需要更改就可以順利編譯了。
附 完整簡單例子代碼: