在bluez启动过程中,各种插件的初始化尤为重要,没有这些插件,很多功能将无法实现。
2.3.5 plugin的初始化
插件的初始化,是什么的干活,其实还是很重要的,我们来看看吧。
gboolean plugin_init(GKeyFile *config, const char *enable, const char *disable)
{
GSList *list;
GDir *dir;
const gchar *file;
char **conf_disabled, **cli_disabled, **cli_enabled;
unsigned int i;
/* Make a call to BtIO API so its symbols got resolved before the
* plugins are loaded. */
//不知道这里调了干嘛
bt_io_error_quark();
//有config文件,会去解析General中的DisablePlugins,我们其实可以看到它是没有的
if (config)
conf_disabled = g_key_file_get_string_list(config, "General",
"DisablePlugins",
NULL, NULL);
else
conf_disabled = NULL;
//这个enable是null,所以忽略
if (enable)
cli_enabled = g_strsplit_set(enable, ", ", -1);
else
cli_enabled = NULL;
//disable也是null,忽略
if (disable)
cli_disabled = g_strsplit_set(disable, ", ", -1);
else
cli_disabled = NULL;
DBG("Loading builtin plugins");
//这里是遍历__bluetooth_builtin数组了,__bluetooth_builtin数组这里有必要详细解释一下,见2.3.5.1
for (i = 0; __bluetooth_builtin[i]; i++) {
//enable_plugin因为conf_disabled,cli_enabled,cli_disabled均为null,所以什么都没有做,直接return true了
if (!enable_plugin(__bluetooth_builtin[i]->name, conf_disabled,
cli_enabled, cli_disabled))
continue;
//下面就是加入plugin了,这里又会发生些什么好玩的东西呢,我们看2.3.5.2
add_plugin(NULL, __bluetooth_builtin[i]);
}
//看是否有PLUGINDIR,从Android.mk中可以发现:
/*-DPLUGINDIR=\"/system/lib/bluez-plugin\*/
//PLUGINDI就是/system/lib/bluez-plugin这个目录,所以,我们这里要继续往下看了
if (strlen(PLUGINDIR) == 0)