关机充电属性使用

xiaoxiao2021-02-28  71

手机关机充电时,会通过lk加载bootimage 挂载根文件系统,最终运行到kernel init 进程。这时init 会挂载systemimage ,但并没有切换到是主文件系统,所以主文件系统中的东西是不能用的。

bootimage 是由kernel img 与 ramdisk 打包成的,这里ramdisk 是根文件系统,是打包的root 目录下内容。systemimage是主文件系统,打包的是/system下内容。

 

init 进程加载/default.prop 文件,挂载systemimage

android属性文件值读取顺序通常为 /default.prop/system/build.prop/system/default.prop/data/local.prop,文件也会生成在不同的位置。default.prop生成在root目录下,其他在对应的/system/data目录下。default.propbuild.prop都是由通过编译目录下的build/core/Makefile文件生成的。

# default.prop   INSTALLED_DEFAULT_PROP_TARGET := $(TARGET_ROOT_OUT)/default.prop   ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_DEFAULT_PROP_TARGET)   ADDITIONAL_DEFAULT_PROPERTIES := \       $(call collapse-pairs, $(ADDITIONAL_DEFAULT_PROPERTIES))   ADDITIONAL_DEFAULT_PROPERTIES += \       $(call collapse-pairs, $(PRODUCT_DEFAULT_PROPERTY_OVERRIDES))   ADDITIONAL_DEFAULT_PROPERTIES := $(call uniq-pairs-by-first-component, \       $(ADDITIONAL_DEFAULT_PROPERTIES),=)      $(INSTALLED_DEFAULT_PROP_TARGET):           @echo Target buildinfo: $@           @mkdir -p $(dir $@)           $(hide) echo "#" > $@; \                   echo "# ADDITIONAL_DEFAULT_PROPERTIES" >> $@; \                   echo "#" >> $@;           $(hide) $(foreach line,$(ADDITIONAL_DEFAULT_PROPERTIES), \                   echo "$(line)" >> $@;)           build/tools/post_process_props.py $@  

所以 ADDITIONAL_DEFAULT_PROPERTIES  PRODUCT_DEFAULT_PROPERTY_OVERRIDES  定义的属性都可以使用到root目录,即ramdisk中。

PRODUCT_PROPERTY_OVERRIDES 定义的属性生成在/system/build.prop下,只能用于根文件系统。

 

init.rc 

on charger    

mount ext4 /dev/block/platform/mtk-msdc.0/11230000.msdc0/by-name/system /system ro wait                                

chmod 0666 /dev/kmsg 

Write /sys/devices/platform/battery_meter/FG_daemon_log_level 7    

start  fuelgauged   

start kpoc_charger    start servicemanager

service kpoc_charger  /vendor/bin/kpoc_charger    class charger

 

init 进程中会启动kpoc_charger 服务,关机充电这个时候由于运行的是ramdisk 

 在根文件系统中

 vendor -> /system/vendor

所以根文件系统 /vendor/bin/kpoc_charger  充电服务就对应着主文件/system/vendor/bin/kpoc_charge

 

系统的服务必须生成在root目录下或者以上边的形式链接到主文件系统下才能使用。

vendor\mediatek\proprietary\external\charger\charging_control.cpp

static int on_uevent(const char *buf, int len_buf) { #ifdef VERBOSE_OUTPUT KPOC_LOGI("on_uevent, %s\n", buf); #endif if (!strcasestr(buf, UEVENT_BATTERY_CHANGE)) return 1; //if ac or usb online if (is_charging_source_available()) { int ret = -1; char value[PROP_VALUE_MAX]; int is_support_breath_plus = 0; bc = get_capacity(); ret = __system_property_get("ro.dyf.breathe.plus", value); if (ret > 0){ is_support_breath_plus = strcmp(value, "1") ? 0 : 1; }else if (ret == 0){ //is_support_breath_plus = 1; KPOC_LOGI("is_support_breath_plus =0, %s\n", value); } if ((is_support_breath_plus == 1) || (bc >= 90)) { lights_full(); } else { if (nCurrentState != LIGHTS_STATE_CHGON) set_light_state(LIGHTS_CHGON); #ifdef BREATH_PLUS_SUPPORT lights_full(); #else lights_on(); #endif } } else exit_charger(EXIT_CHARGING_MODE); return 1; }

如果kpoc_charger 使用属性,这个时候必须在root目录下有对应的属性。

ADDITIONAL_DEFAULT_PROPERTIES += ro.dyf.breathe.plus=1

或者在Android.mk 中用宏控制。

ifneq ($(filter S12 S32 S21 S32LTE,$(TARGET_PRODUCT)),)     #LOCAL_CFLAGS += -DBREATH_PLUS_SUPPORT endif

转载请注明原文地址: https://www.6miu.com/read-72813.html

最新回复(0)