Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android(Linux)控制GPIO方法二,androidgpio

Android(Linux)控制GPIO方法二,androidgpio

編輯:關於android開發

Android(Linux)控制GPIO方法二,androidgpio


  前文《Android(Linux)控制GPIO的方法及實時性分析》主要使用Linux shell命令控制GPIO,該方法可在調試過程中快速確定GPIO硬件是否有問題,即對應的GPIO是否受控。實際項目中,一般需要對GPIO做特殊控制,如車載導航系統開機就給GPS模塊上電,或在daemon程序中控制GPIO給一個脈沖以Reset藍牙模塊等,就不便用shell 命令來控制,而需要另想辦法。

  http://elinux.org/RPi_GPIO_Code_Samples#sysfs介紹了如何在C代碼中導出GPIO、設置方向以及控制GPIO,這是完全可以工作的。如果只是需要在系統開機時給GPS模塊上電,那單獨寫一個應用或者把相關代碼放在daemon裡,雖然也行,但稍顯麻煩,可采用如下方法簡便實現。

  以msm8996的Android6.0為例,修改device/qcom/msm8996/init.target.rc文件,在on post-fs部分添加如下代碼,

write /sys/class/gpio/export 62
write /sys/class/gpio/gpio62/direction out
chown system system /sys/class/gpio/gpio62/value
chmod 0666 /sys/class/gpio/gpio62/value
write /sys/class/gpio/gpio62/value 1

  執行make bootimage命令生成boot.img,使用fastboot燒錄boot.img,系統重新啟動即可實現開機自動給GPS模塊上電。類似導出一個GPIO,用於控制藍牙模塊的RESET引腳,就可以在Bluetooth的daemon程序裡直接打開/sys/class/gpio/gpio63/value,並對其進行控制,可省去代碼中對export和direction的配置。

  特別說明,如果可通過shell腳本導出GPIO並進行控制,而修改init.target.rc卻無反映,則很可能是內核中GPIO的配置有沖突!我在實際調試過程中,就掉到這個坑裡了,折騰好久才最終發現問題的根本原因,GPIO62和GPIO63在內核中被用作了CAM_RST和CAM_STANDBY,線索在dmesg的log裡,如下,

  [ 18.590187] msm_camera_request_gpio_table:751 gpio 63:CAM_RESET1 request fails

  [ 18.590193] msm_camera_request_gpio_table:751 gpio 62:CAM_STANDBY1 request fails

  後來通過make kernelconfig,去除camera相關的驅動,重新編譯內核就可以了。

  另外,使用chown和chmod命令主要是為了後面Android的APP可訪問/sys/class/gpio/gpio62/value,如果只在Linux的daemon裡訪問,chown和chmod應該可省,一如export和direction可直接write。

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