編輯:關於android開發
前面兩篇分別介紹了通過腳本和C代碼讀寫/sys/class/gpio以控制GPIO。實際項目調試時經常還需要在Java代碼裡控制GPIO,其實現與C代碼類似,唯一不同是權限。本文重點介紹權限的配置並對在Java層控制GPIO的耗時做簡單分析。
以高通平台為例,權限配置主要修改HLOS/device/qcom/sepolicy/common目錄下的file.te、file_contexts和system_app.te三個文件。
file.te修改如下,
# GPIO accessed by system app type sysfs_gpio, fs_type, sysfs_type;
file_contexts修改如下,
/sys/devices/soc/1010000.pinctrl/gpio/gpio62/value u:object_r:sysfs_gpio:s0 /sys/devices/soc/1010000.pinctrl/gpio/gpio63/value u:object_r:sysfs_gpio:s0
system_app.te修改如下,
allow system_app sysfs_gpio:file rw_file_perms;
修改完成後執行make bootimage命令,生成boot.img並使用fastboot燒錄。
Android應用修改AndroidManifest.xml文件,在manifest節點中添加android:sharedUserId="android.uid.system。修改Android.mk文件,添加LOCAL_CERTIFICATE := platform設置簽名。Java控制GPIO的示例代碼如下,
void IOCtrl(int pin, int level) { String path; path = "/sys/class/gpio/gpio" + pin + "/value"; try { FileOutputStream out = new FileOutputStream(path); out.write(level); out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); return; } } if (trigger == 0x01) { trigger = 0x00; IOCtrl(62, '1'); IOCtrl(63, '1'); } else { trigger = 0x01; IOCtrl(62, '0'); IOCtrl(63, '0'); }
以上代碼執行結果如下圖所示,可以看到,兩個IO被拉高前後相差約2.5ms。
說明:如果只是做測試,可以使用setenforce 0命令設置SELinux為permissive模式,就可以用Android Studio編譯測試應用控制GPIO,更為方便。
關於eclipse android 在manifest改app應用包名注意事項,androidmanifest在我剛學android 時候,然後立即就做項目。那時連ecl
TextView顯示html樣式的文字,項目需求: TextView顯示一段文字,格式為:白雪公主(姓名,字數不確定)向您發來了2(消息個數,不確定)條消息 這段文字中名
React-Native系列Android——Native與Javascript通信原理(二) 前一篇博客分析了Native端向Javascript端通信的全流程,這
新版飛機大戰游戲安卓源碼項目,飛機大戰安卓 作者nuptboyzhb,源碼newplanegame,新版飛機大戰是一款以真實戰機為模板的飛行射擊類游戲