[1380] cmdline: console=ttyHSL0,115200,n8androidboot.console=ttyHSL0 androidboot.hardware=qcom msm_rtb.filter=0x237ehci-hcd.park=3 androidboot.bootdevice=7824900.sdhcilpm_levels.sleep_disabled=1 loglevel=8earlyprintk=msm_hsl_uart,0x78b0000 androidboot.emmc=trueandroidboot.serialno=36a72c45 androidboot.mode=charger androidboot.baseband=msmpoweron_reason=0x20 company.boot_reason=5 company.boot_event=poweroff_chargingcompany.reboot_event= androidboot.sbc_flag=0 console=ttyHSL0,115200,n8 loglevel=8mdss_mdp.panel=1:dsi:0:qcom,mdss_dsi_sh1387_hehui_amoled_hd_500:1:none:cfg:single_dsi
由代码可知,cmdline的值会循环检测,如果与已知.init.setup区域内的值匹配成功就会操作相应的函数,如下是打印的cmdline值:
Line 17: [ 0.000000]@0 zll----param=boot_cpus
Line 19: [ 0.000000]@0zll----param=sched_enable_hmp
Line 21: [ 0.000000]@0 zll----param=console
Line 22: [ 0.000000]@0zll----param=androidboot.console
Line 23: [ 0.000000]@0zll----param=androidboot.hardware
Line 24: [ 0.000000]@0 zll----param=msm_rtb.filter
Line 25: [ 0.000000]@0 zll----param=ehci-hcd.park
Line 26: [ 0.000000]@0zll----param=androidboot.bootdevice
Line 27: [ 0.000000]@0zll----param=lpm_levels.sleep_disabled
Line 28:[ 0.000000]@0 zll----param=loglevel//--------------------------------------------循环执行到这里会设置console_loglevel=8
Line 42: [ 0.000000]@0 zll----param=earlyprintk
Line 58: [ 0.000000]@0zll----param=androidboot.emmc
Line 59: [ 0.000000]@0zll----param=androidboot.serialno
Line 60:[ 0.000000]@0 zll----param=androidboot.mode//-------------------------------循环执行到这里会根据下面函数的判断,重新设置console_loglevel=0
Line 61: [ 0.000000]@0zll----param=androidboot.baseband
Line 62: [ 0.000000]@0 zll----param=poweron_reason
Line 63: [ 0.000000]@0zll----param=yulong.boot_reason
Line 64: [ 0.000000]@0zll----param=yulong.boot_event
Line 65: [ 0.000000]@0zll----param=yulong.reboot_event
Line 66: [ 0.000000]@0zll----param=androidboot.sbc_flag
Line 67: [ 0.000000]@0 zll----param=mdss_mdp.panel
由于人为写入logleve = 8会追加到cmdline后面,也就是在判断 androidboot.mode这个模式之后在判断loglevel的值,所以又会重新设置console_loglevel=8
这就是为什么会出现我们认为写入分区会生效的原因
//-------------------kernel/init/main.c
staticint __init do_early_param(char*param, char *val, const char *unused)
{
const struct obs_kernel_param *p;
pr_err("zll----param=%s\n",param);
for (p = __setup_start; p < __setup_end; p++) {
…
if ((strncmp(param, "androidboot.mode", 17) == 0)){
if(strncmp(val, "charger", 8) == 0){
poweroff_charging = 1;
console_loglevel= 0;//----------------------------------------------------此处
}else if (strncmp(val, "recovery", 9) == 0){
recovery_mode = 1;
printk("in recovery!\n");
}
}