cmdline值

[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");

                                   }

               }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章