void start_property_service(void)
{
    int fd;

    // load_properties_from_file就是从文件中读取key和value,并把他们property_set(key, value);
    load_properties_from_file(PROP_PATH_SYSTEM_BUILD);      // 获取之前的几个属性值
    load_properties_from_file(PROP_PATH_SYSTEM_DEFAULT);
    load_override_properties();
    /* Read persistent properties after all default values have been loaded. */
    load_persistent_properties();                 // 读取/data/property目录路中的属性值

    // 创建套接字,以便init进程在收到子进程终止的SIGCHLD信号时调用相应的handler
    // PROP_SERVICE_NAME很熟悉的名字,在Bionic中的send_prop_msg时会连接这个属性并发送命令,
    // server端就是在这里实现的
    fd = create_socket(PROP_SERVICE_NAME, SOCK_STREAM, 0666, 0, 0);
    if(fd < 0) return;
    fcntl(fd, F_SETFD, FD_CLOEXEC);
    fcntl(fd, F_SETFL, O_NONBLOCK);

    listen(fd, 8);
    property_set_fd = fd;
#ifdef AW_BOOSTUP_ENABLE
    aw_init_boostup();
#endif

}
Beispiel #2
0
void load_all_props(void)
{
    load_properties_from_file(PROP_PATH_SYSTEM_BUILD, NULL);
    load_properties_from_file(PROP_PATH_SYSTEM_DEFAULT, NULL);
    load_properties_from_file(PROP_PATH_FACTORY, "ro.*");

    load_override_properties();

#ifdef LENOVO_EASYIMAGE_SUPPORT

//Lenovo [EasyImage] Start
#define EASYIMAGE_OVERLAY_PROP "/system/easyimage/preload/prop.overlay"
	if( access(EASYIMAGE_OVERLAY_PROP,R_OK) !=-1 )
	{
		load_properties_from_file_overwrite(EASYIMAGE_OVERLAY_PROP,NULL,1); //use 1 to overwrite ro prop
	}

#define EASYIMAGE_OVERLAY_2_PROP "/system/easyimage/preload/prop.overlay.1"

    if( access(EASYIMAGE_OVERLAY_2_PROP,R_OK) !=-1 )
    {
        load_properties_from_file_overwrite(EASYIMAGE_OVERLAY_2_PROP,NULL,1); //use 1 to overwrite ro prop
    }

#endif
//Lenovo [EasyImage] End

    /* Read persistent properties after all default values have been loaded. */
    load_persistent_properties();
}
void load_all_props() {
    load_properties_from_file(PROP_PATH_SYSTEM_BUILD, NULL);
    load_properties_from_file(PROP_PATH_VENDOR_BUILD, NULL);
    load_properties_from_file(PROP_PATH_BOOTIMAGE_BUILD, NULL);
    load_properties_from_file(PROP_PATH_FACTORY, "ro.*");

    load_override_properties();

    /* Read persistent properties after all default values have been loaded. */
    load_persistent_properties();
}
void load_all_props() {
    load_properties_from_file(PROP_PATH_SYSTEM_BUILD, NULL);
    load_properties_from_file(PROP_PATH_VENDOR_BUILD, NULL);
    load_properties_from_file(PROP_PATH_FACTORY, "ro.*");

    load_override_properties();

    /* Read persistent properties after all default values have been loaded. */
    load_persistent_properties();

    /* update with vendor-specific property runtime
     * overrides
     */
    vendor_load_properties();

    load_recovery_id_prop();
}
Beispiel #5
0
void start_property_service(void)
{
    int fd;

    load_properties_from_file(PROP_PATH_SYSTEM_BUILD);
    load_properties_from_file(PROP_PATH_SYSTEM_DEFAULT);
    load_override_properties();
    /* Read persistent properties after all default values have been loaded. */
    load_persistent_properties();

    fd = create_socket(PROP_SERVICE_NAME, SOCK_STREAM, 0666, 0, 0, NULL);
    if(fd < 0) return;
    fcntl(fd, F_SETFD, FD_CLOEXEC);
    fcntl(fd, F_SETFL, O_NONBLOCK);

    listen(fd, 8);
    property_set_fd = fd;
}
/* When booting an encrypted system, /data is not mounted when the
 * property service is started, so any properties stored there are
 * not loaded.  Vold triggers init to load these properties once it
 * has mounted /data.
 */
void load_persist_props(void)
{
    load_override_properties();
    /* Read persistent properties after all default values have been loaded. */
    load_persistent_properties();
}