編輯:關於android開發
前文《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。
ViewPager與android.support.design.widget.TabLayout雙向交互聯動切換,tablayoutviewpager 通常,andro
Android平台Camera實時濾鏡實現方法探討(十)--代碼地址以及簡介 簡單做了個相機和圖片編輯模塊,時間原因很多功能還沒有做,尚有BUG,見諒,將在以後抽時間修改
現代軟件工程_第一周練習_第14題,軟件工程第一周一:基於Android的HelloWorld程序開發 該程序的開發環境和工具是:AndroidStudio1.5+A
Android項目實戰(二十八):Zxing二維碼實現及優化,androidzxing前言: 多年之前接觸過zxing實現二維碼,沒想到今日項目中再此使用竟然使用的還