編輯:關於Android編程
Android內核sysfs中switch類使用實例
終於在這個周末,可以干點自己想要干的事了。由我這個二流的內核驅動開發者來解析一下sysfs中的switch類。先推測一下來歷,在普通的嵌入式Linux平台上,一般是各自為戰,完全不需要遵循什麼規則。在Android中Google定義了一些潛移默化的規范,你可以完全不遵守。但是按照規則總歸是好的。
先從直觀的來看一下/sys/class/switch類中都有些什麼吧。
vcq11srKx8G0vdO1vcHLL3N5cy9kZXZpY2UvdmlydHVhbC9zd2l0Y2gvxL/CvKOswLS/tNXmw+bEv6O6PC9wPgo8cD4gPGltZyBzcmM9"/uploadfile/Collfiles/20140720/20140720085527140.png" alt="\">
這裡包含了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是要是編譯過的。什麼都不需要更改就可以順利編譯了。
附 完整簡單例子代碼:
/* * $Id: hello.c,v 1.5 2004/10/26 03:32:21 corbet Exp $ */ #include#include #include MODULE_LICENSE("Dual BSD/GPL"); struct switch_dev sdev; static int hello_switch() { int state, ret; sdev.name = "hello"; ret = switch_dev_register(&sdev); if (ret < 0) return ret; state = 0; switch_set_state(&sdev,state); return 0; } static int hello_init(void) { printk(KERN_ALERT "Hello, world\n"); if(hello_switch()) { printk(KERN_ERR "failed to create hello switch\n"); return -ENODEV; } return 0; } static void hello_exit(void) { printk(KERN_ALERT "Goodbye, cruel world\n"); } module_init(hello_init); module_exit(hello_exit);
這是我在使用Android Studio過程中接觸到的一些快捷鍵,和大家分享,後面會繼續完善此文,也歡迎大家踴躍補充,一起完善。快捷鍵刪除並剪貼行:Ctrl+X復制一行:
一.Service簡介service可以說是一個在後台運行的Activity,它不是一個單獨的進程,它只需要應用告訴它要在後台做什麼就可以了,它要實現和用戶的交互的話需要
最近在做通訊錄看到360通訊錄和索尼系統內置通訊錄有這個效果,就是點擊聯系人列表的A-Z側邊欄時,A-Z欄的被觸摸處會扭曲成半圓,半圓可以隨著手指在A-Z
掃描本地文件加載到item不限於應用到音樂播放器,其他Android工程,也可以使用SdcardSearchToList其他Android工程也可以使用,我現在做了很小的