Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android(Java)控制GPIO的方法及耗時分析,androidgpio

Android(Java)控制GPIO的方法及耗時分析,androidgpio

編輯:關於android開發

Android(Java)控制GPIO的方法及耗時分析,androidgpio


  前面兩篇分別介紹了通過腳本和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,更為方便。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved