关机充电属性使用

手机关机充电时,会通过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_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


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值