java层是用Runtime.getRuntime().exec(cmd) 来执行脚本的,注意root权限的使用。
增加GPIO口控制wifi模组电源,需要java层控制GPIO:
有两种方法:
1. 写一个字符设备的驱动,硬件抽象层,JNI层添加封装,Java层调用
2. 写一个脚本,脚本直接写寄存器,在java层用Runtime.getRuntime().exec(cmd)调用
实际上最后的解决方法:
1.kernel\drivers\amlogic\i2c\aml_i2c.c中更改支持脚本控制GPIO的I2C驱动(特定方案的更改)
2.kernel下i2c中设置(特定方案的更改)
请打开宏Device Drivers
->Amlogic Device Drivers
->Amlogic I2C CONFIG
->Amlogic i2c hardware bus support
->Amlogic I2C Driver
保证有/sys/class/i2c/cbus_reg文件
3.那两个脚本正确,各有三行,在开机后vi查看没有多余的字符,且在串口命令下执行这两个脚本打印3行提示寄存器设置正确
4.那两个脚本放在\device\amlogic\c03ref 下的,AndroidBoard.mk 下添加
file := $(TARGET_OUT_EXECUTABLES)/GPIO_B4_on.sh
ALL_PREBUILT += $(file)
$(file) : $(LOCAL_PATH)/GPIO_B4_on.sh | $(ACP)
$(transform-prebuilt-to-target)
file := $(TARGET_OUT_EXECUTABLES)/GPIO_B4_off.sh
ALL_PREBUILT += $(file)
$(file) : $(LOCAL_PATH)/GPIO_B4_off.sh | $(ACP)
$(transform-prebuilt-to-target)
5. init.rc添加:
chmod 0777 /sys/class/i2c/cbus_reg
service wifipwon /system/bin/logwrapper /system/bin/GPIO_B4_on.sh
disabled
oneshot
service wifipwoff /system/bin/logwrapper /system/bin/GPIO_B4_off.sh
disabled
oneshot
大约放在:(没强制要求)
service ueventd /sbin/ueventd
critical
之前
6.
应用层
frameworks\base\services\java\com\android\server\WifiService.java中添加:
import android.os.SystemProperties;
关wifi电源
SystemProperties.set("ctl.start", "wifipwoff");
开wifi电源
SystemProperties.set("ctl.start", "wifipwon");
7. make clean 全编译