展讯修改recovery OTA更新时红灯闪烁:
有些项目没有屏, OTA更新是需要看到状态
修改
直接上修改diff, init.rc修改权限,
recovery.cpp修改刚进入recovery模式是红灯闪烁。
updater.cpp 修改开始更新是红灯闪烁。
const char* SER_LED_RED_BR = "/sys/class/leds/sc27xx:red/brightness";
+ //chmod(SER_LED_RED_BR,0666);
+ android::base::WriteStringToFile("255", SER_LED_RED_BR);
+
+ const char* SER_LED_RED = "/sys/class/leds/sc27xx:red/trigger";
+ //chmod(SER_LED_RED,0666);
+ android::base::WriteStringToFile("pattern", SER_LED_RED);
+ const char* SER_LED_HW = "/sys/class/leds/sc27xx:red/hw_pattern";
+ //chmod(SER_LED_HW,0666);
+ android::base::WriteStringToFile("50 255 875 255 75 255 1000 255", SER_LED_HW);
这里是修改核心,WriteStringToFile表示写节点, 不同平台的"/sys/class/leds/sc27xx:red/brightness";这个节点可能不一样,“50 255 875 255 75 255 1000 255” 这个表示闪烁频率,闪烁亮度等等,驱动参数的,自己查找相关文档即可
diff --git a/bootable/recovery/etc/init.rc b/bootable/recovery/etc/init.rc
old mode 100644
new mode 100755
index 188228f..9a642e2
--- a/bootable/recovery/etc/init.rc
+++ b/bootable/recovery/etc/init.rc
@@ -43,7 +43,19 @@ on boot
domainname localdomain
class_start default
-
+
+ wait /sys/class/leds/sc27xx:blue/brightness
+ chmod 0666 /sys/class/leds/sc27xx:blue/hw_pattern
+ chmod 0666 /sys/class/leds/sc27xx:blue/trigger
+ chmod 0666 /sys/class/leds/sc27xx:blue/brightness
+
+ wait /sys/class/leds/sc27xx:red/brightness
+ chmod 0666 /sys/class/leds/sc27xx:red/hw_pattern
+ chmod 0666 /sys/class/leds/sc27xx:red/trigger
+ chmod 0666 /sys/class/leds/sc27xx:red/brightness
+
+ //write /sys/class/leds/sc27xx:blue/brightness 200
+
# Load properties from /system/ + /factory after fs mount.
on load_system_props_action
load_system_props
diff --git a/bootable/recovery/recovery.cpp b/bootable/recovery/recovery.cpp
old mode 100644
new mode 100755
diff --git a/bootable/recovery/etc/init.rc b/bootable/recovery/etc/init.rc
old mode 100644
new mode 100755
index 188228f..9a642e2
--- a/bootable/recovery/etc/init.rc
+++ b/bootable/recovery/etc/init.rc
@@ -43,7 +43,19 @@ on boot
domainname localdomain
class_start default
-
+
+ wait /sys/class/leds/sc27xx:blue/brightness
+ chmod 0666 /sys/class/leds/sc27xx:blue/hw_pattern
+ chmod 0666 /sys/class/leds/sc27xx:blue/trigger
+ chmod 0666 /sys/class/leds/sc27xx:blue/brightness
+
+ wait /sys/class/leds/sc27xx:red/brightness
+ chmod 0666 /sys/class/leds/sc27xx:red/hw_pattern
+ chmod 0666 /sys/class/leds/sc27xx:red/trigger
+ chmod 0666 /sys/class/leds/sc27xx:red/brightness
+
+ //write /sys/class/leds/sc27xx:blue/brightness 200
+
# Load properties from /system/ + /factory after fs mount.
on load_system_props_action
load_system_props
diff --git a/bootable/recovery/recovery.cpp b/bootable/recovery/recovery.cpp
old mode 100644
new mode 100755
index 094b5a9..e88812f
--- a/bootable/recovery/recovery.cpp
+++ b/bootable/recovery/recovery.cpp
@@ -779,6 +779,20 @@ Device::BuiltinAction start_recovery(Device* device, const std::vector<std::stri
// Parse everything before the last element (which must be a nullptr). getopt_long(3) expects a
// null-terminated char* array, but without counting null as an arg (i.e. argv[argc] should be
// nullptr).
+ //android::base::WriteStringToFile("255",SER_LED_REDBR);
+
+ const char* SER_LED_RED_BR = "/sys/class/leds/sc27xx:red/brightness";
+ //chmod(SER_LED_RED_BR,0666);
+ android::base::WriteStringToFile("255", SER_LED_RED_BR);
+
+ const char* SER_LED_RED = "/sys/class/leds/sc27xx:red/trigger";
+ //chmod(SER_LED_RED,0666);
+ android::base::WriteStringToFile("pattern", SER_LED_RED);
+ const char* SER_LED_HW = "/sys/class/leds/sc27xx:red/hw_pattern";
+ //chmod(SER_LED_HW,0666);
+ android::base::WriteStringToFile("50 255 875 255 75 255 1000 255", SER_LED_HW);
+
+
while ((arg = getopt_long(args_to_parse.size() - 1, args_to_parse.data(), "", OPTIONS,
&option_index)) != -1) {
switch (arg) {
diff --git a/bootable/recovery/updater/updater.cpp b/bootable/recovery/updater/updater.cpp
old mode 100644
new mode 100755
index 7b5a3f9..15d5122
--- a/bootable/recovery/updater/updater.cpp
+++ b/bootable/recovery/updater/updater.cpp
@@ -23,7 +23,11 @@
#include <string>
+#include <android-base/file.h>
#include <android-base/logging.h>
+#include <android-base/parseint.h>
+#include <android-base/properties.h>
+#include <android-base/stringprintf.h>
#include <android-base/strings.h>
#include <selinux/android.h>
#include <selinux/label.h>
@@ -66,7 +70,18 @@ int main(int argc, char** argv) {
// We don't have logcat yet under recovery. Update logs will always be written to stdout
// (which is redirected to recovery.log).
android::base::InitLogging(argv, &UpdaterLogger);
-
+ LOG(ERROR) << "led red is start: " << argc;
+ const char* SER_LED_RED_BR = "/sys/class/leds/sc27xx:red/brightness";
+ //chmod(SER_LED_RED_BR,0666);
+ android::base::WriteStringToFile("255", SER_LED_RED_BR);
+
+ const char* SER_LED_RED = "/sys/class/leds/sc27xx:red/trigger";
+ //chmod(SER_LED_RED,0666);
+ android::base::WriteStringToFile("pattern", SER_LED_RED);
+ const char* SER_LED_HW = "/sys/class/leds/sc27xx:red/hw_pattern";
+ //chmod(SER_LED_HW,0666);
+ android::base::WriteStringToFile("50 255 875 255 75 255 1000 255", SER_LED_HW);
+ LOG(ERROR) << "led red is light: " << argc;
if (argc != 4 && argc != 5) {
LOG(ERROR) << "unexpected number of arguments: " << argc;
return 1;