知识的价值不在于占有,而在于使用。这篇文章主要讲述[RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED相关的知识,希望能为你提供帮助。
本文转载自:http://m.blog.csdn.net/kris_fei/article/details/69553422
【[RK3288][Android6.0] 调试笔记 --- 通用GPIO驱动控制LED】Platform: ROCKCHIP
OS: android 6.0
Kernel: 3.10.92
由于板子没有lcd无法得知sd卡升级是否完成,因此使用LED显示.
Recovery中升级完成后控制GPIO输出高电平点亮LED.
系统自带GPIO控制驱动:
内核已经自带了通用GPIO驱动,可以直接在用户空间操作.
路径: /sys/class/gpio
[email
protected]:/sys/class/gpio # ls
export
gpiochip0
gpiochip120
gpiochip152
gpiochip184
gpiochip216
gpiochip24
gpiochip248
gpiochip280
gpiochip56
gpiochip88
unexport
比如我要操作GPIO8_A6作为高电平输出有效, 那么有以下问题:
1. 对应的gpio number是多少呢?
2. 如何设置成输出
3. 如何输出高电平
问题1:
可以通过/sys/kernel/debug/gpio查询信息:
[email
protected]:/sys/kernel/debug # cat gpio
//snip
GPios 184-215, platform/ff770000.pinctrl, gpio6:
gpio-193 (?
) in
hi
gpio-194 (?
) in
hi
GPIOs 216-247, platform/ff770000.pinctrl, gpio7:
gpio-218 (enable
) out hi
gpio-219 (lcd_en
) in
hi
gpio-220 (lcd_cs
) in
hi
gpio-221 (gslX680 wake pin
) out hi
gpio-222 (gslX680 irq pin
) out lo
gpio-223 (headset_gpio
) in
hi
gpio-233 (?
) in
hi
gpio-234 (?
) in
hi
GPIOs 248-279, platform/ff770000.pinctrl, gpio8:
GPIOs 280-311, platform/ff770000.pinctrl, gpio15:
可以看到gpio8是以nubmer为248开始, 那么GPIO8_A6就是 248 + 6 = 254
接下来就可以导出gpio了
[email
protected]:/sys/class/gpio # echo 254 >
export
[email
protected]:/sys/class/gpio # ls
export
gpio254
......
问题2
[email
protected]:/sys/class/gpio/gpio254 # echo out >
direction
[email
protected]:/sys/class/gpio/gpio254 # cat direction
out
问题3:
[email
protected]:/sys/class/gpio/gpio254 # echo 1 >
value
[email
protected]:/sys/class/gpio/gpio254 # cat value
1
解决方法:
init.rc
[[email
protected]:~/rk3288/device/rockchip/common/recovery/etc]$ g df
diff --git a/recovery/etc/init.rc b/recovery/etc/init.rc
index efe2a5d..75d7554 100755
--- a/recovery/etc/init.rc
+++ b/recovery/etc/init.rc
@@ -85,6 +85,12 @@ on late-init
on property:sys.powerctl=*
powerctl ${sys.powerctl}
+#Kris, 170407, GPIO8_A6 ->
gpio254, used to inform sd upgrade complete.
+on property:sdupgrade.complete=true
+
write /sys/class/gpio/export 254
+
write /sys/class/gpio/gpio254/direction out
+
write /sys/class/gpio/gpio254/value 1
+
service ueventd /sbin/ueventd
critical
seclabel u:r:ueventd:s0
recovery.cpp
[[email
protected]:~/rk3288/bootable/recovery]$ g df
diff --git a/recovery.cpp b/recovery.cpp
index 8299672..a0edc15 100755
--- a/recovery.cpp
+++ b/recovery.cpp
@@ -2285,6 +2285,10 @@ HANDLE_STATUS :
strcat(kernellogPath, "/kernel.txt");
save_kernel_log(kernellogPath);
#endif
+
+
//Kris, 170407, light led on after sd upgrade complete.
+
property_set("sdupgrade.complete", "true");
+
if (bSDMounted)
checkSDRemoved();
参考:
http://blog.csdn.net/cjsycyl/article/details/46310939
推荐阅读
- Android驱动学习-app调用内核驱动过程(驱动框架回顾)
- App架构设计:接口的设计
- Error:Error converting bytecode to dex: Cause: com.android.dex.DexException: Multiple dex files defi
- JAVA_JNI字段描述符“([Ljava/lang/String;)V”(Android)
- [RK3288][Android6.0] 调试笔记 --- 系统识别不同硬件版本方法
- 解决 Cordova 打包 vue项目为 APP 后,在安卓平台下 touchMove 事件不生效的问题
- 2 Interrupting Appropriately
- linux 安装沙盒virtualenv virtualenvwrapper
- android 超简单的拖动按钮 悬浮按钮 吸附按钮 浮动按钮