关机充电属性使用

来源:互联网 发布:电子数据交换分类 编辑:程序博客网 时间:2024/04/28 02:15

手机关机充电时,会通过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文件生成的。


  1. # default.prop  
  2. INSTALLED_DEFAULT_PROP_TARGET := $(TARGET_ROOT_OUT)/default.prop  
  3. ALL_DEFAULT_INSTALLED_MODULES += $(INSTALLED_DEFAULT_PROP_TARGET)  
  4. ADDITIONAL_DEFAULT_PROPERTIES := \  
  5.     $(call collapse-pairs, $(ADDITIONAL_DEFAULT_PROPERTIES))  
  6. ADDITIONAL_DEFAULT_PROPERTIES += \  
  7.     $(call collapse-pairs, $(PRODUCT_DEFAULT_PROPERTY_OVERRIDES))  
  8. ADDITIONAL_DEFAULT_PROPERTIES := $(call uniq-pairs-by-first-component, \  
  9.     $(ADDITIONAL_DEFAULT_PROPERTIES),=)  
  10.   
  11. $(INSTALLED_DEFAULT_PROP_TARGET):  
  12.         @echo Target buildinfo: $@  
  13.         @mkdir -p $(dir $@)  
  14.         $(hide) echo "#" > $@; \  
  15.                 echo "# ADDITIONAL_DEFAULT_PROPERTIES" >> $@; \  
  16.                 echo "#" >> $@;  
  17.         $(hide) $(foreach line,$(ADDITIONAL_DEFAULT_PROPERTIES), \  
  18.                 echo "$(line)" >> $@;)  
  19.         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_OUTPUTKPOC_LOGI("on_uevent, %s\n", buf);#endifif (!strcasestr(buf, UEVENT_BATTERY_CHANGE))return 1;//if ac or usb onlineif (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();        #elselights_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


原创粉丝点击