Android內核sysfs中switch類使用實例

原文地址;http://blog.csdn.net/kangear/article/details/37961151

Android內核sysfsswitch類使用實例

 

  終於在這個週末,可以乾點自己想要乾的事了。由我這個二流的內核驅動開發者來解析一下sysfs中的switch類。先推測一下來歷,在普通的嵌入式Linux平臺上,一般是各自爲戰,完全不需要遵循什麼規則。在AndroidGoogle定義了一些潛移默化的規範,你可以完全不遵守。但是按照規則總歸是好的。

         先從直觀的來看一下/sys/class/switch類中都有些什麼吧。

 

        首先可以看到實質是鏈接到了/sys/device/virtual/switch/目錄,來看真面目:

 

        這裏包含了4個bl是背光;h2w是耳機;hdmihdmi;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是要是編譯過的。什麼都不需要更改就可以順利編譯了。


附 完整簡單例子代碼:

  1. /* 
  2.  * $Id: hello.c,v 1.5 2004/10/26 03:32:21 corbet Exp $ 
  3.  */  
  4. #include <linux/init.h>  
  5. #include <linux/module.h>  
  6. #include <linux/switch.h>  
  7. MODULE_LICENSE("Dual BSD/GPL");  
  8.   
  9. struct switch_dev sdev;  
  10.   
  11. static int hello_switch()  
  12. {  
  13.     int state, ret;  
  14.     sdev.name = "hello";  
  15.     ret = switch_dev_register(&sdev);  
  16.     if (ret < 0)  
  17.         return ret;  
  18.     state = 0;  
  19.     switch_set_state(&sdev,state);  
  20.     return 0;  
  21. }  
  22.   
  23. static int hello_init(void)  
  24. {  
  25.     printk(KERN_ALERT "Hello, world\n");  
  26.     if(hello_switch())  
  27.     {  
  28.         printk(KERN_ERR "failed to create hello switch\n");  
  29.         return -ENODEV;  
  30.     }  
  31.     return 0;  
  32. }  
  33.   
  34. static void hello_exit(void)  
  35. {  
  36.     printk(KERN_ALERT "Goodbye, cruel world\n");  
  37. }  
  38.   
  39. module_init(hello_init);  
  40. module_exit(hello_exit);  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章