androidboot.xxx如何转换成ro.boot.xxx

在kermel cmdline中我们经常会设置androidboot.xxx比如androidboot.selinux=disabled,

但是代码中并不能搜到对应的内容,其实是init做了统一转换。


init进程中有:

main -> process_kernel_cmdline -> import_kernel_cmdline -> import_kernel_nv:

[cpp]  view plain  copy
  1. void import_kernel_cmdline(int in_qemu,  
  2.                            void (*import_kernel_nv)(char *name, int in_qemu))  
  3. {  
  4. ......  
  5.     /*读取cmdline中的内容*/  
  6.     fd = open("/proc/cmdline", O_RDONLY);  
  7.     if (fd >= 0) {  
  8.         int n = read(fd, cmdline, sizeof(cmdline) - 1);  
  9.         if (n < 0) n = 0;  
  10. ......  
  11.      import_kernel_nv(ptr, in_qemu);  
  12. ......  
  13. }  
[cpp]  view plain  copy
  1. static void import_kernel_nv(char *name, int for_emulator)  
  2. {  
  3. ......  
  4.     /*读取所有androidboot.开头的内容*/  
  5.     } else if (!strncmp(name, "androidboot.", 12) && name_len > 12) {  
  6.         const char *boot_prop_name = name + 12;  
  7.         char prop[PROP_NAME_MAX];  
  8.         int cnt;  
  9.         /*将androidboot.替换成ro.boot.*/  
  10.         cnt = snprintf(prop, sizeof(prop), "ro.boot.%s", boot_prop_name);  
  11.         if (cnt < PROP_NAME_MAX)  
  12.             property_set(prop, value);  
  13.     }  
  14. }  
事实上接下来还会再替换一次:
[cpp]  view plain  copy
  1. static void export_kernel_boot_props(void)  
  2. {  
  3. ......  
  4.     struct {  
  5.         const char *src_prop;  
  6.         const char *dest_prop;  
  7.         const char *def_val;  
  8.     } prop_map[] = {  
  9.         { "ro.boot.serialno""ro.serialno""", },  
  10.         { "ro.boot.mode""ro.bootmode""unknown", },  
  11.         { "ro.boot.baseband""ro.baseband""unknown", },  
  12.         { "ro.boot.bootloader""ro.bootloader""unknown", },  
  13.     };  
  14.   
  15.     for (i = 0; i < ARRAY_SIZE(prop_map); i++) {  
  16.         ret = property_get(prop_map[i].src_prop, tmp);  
  17.         if (ret > 0)  
  18.             property_set(prop_map[i].dest_prop, tmp);  
  19.         else  
  20.             property_set(prop_map[i].dest_prop, prop_map[i].def_val);  
  21.     }  
  22. ......  
  23. }  

版权声明:本文为Z_HUALIN原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。