我们大家都知道,Android其实是基于linux之上进行运行的。在Android系统的运行之初,首先是kernel层的一系列的初始化。今天晓东就先和大家来简单分析一下在开机之后,kernel中和bluetooth的初始化相关的内容有哪些。
我们仍然还是才kernel/net/bluetooth下面的代码开始查看,搜索一下initcall相关的内容也就只有在af_bluetooth.c中看到了这样一句话:
subsys_initcall(bt_init);
毫无疑问,我们肯定要从这里开始看了,若是有同学要问晓东为什么会是这里,我就不给您详细解释了,若是您有打破砂锅问到底的精神,晓东推荐你去google或者百度一下这个函数,就会看到一堆讲解linux启动的文章,我想您一定会有所收获的。
废话不多说了,直接看代码了:
1、bt_init的实现。
static int __init bt_init(void)
{
int err;
/*
*这会是在kernel中打印的第一个和蓝牙相关的内容,这里的版本是2.16
*/
BT_INFO("Core ver %s", VERSION);
/*
*新建两个目录,不深入去看了
*新建一个sys/kernel/debug/bluetooth
*新建一个sys/class/bluetooth
*这连个目录可以再adb shell的时间进去看到了
*/
err = bt_sysfs_init();
/*
*向协议族数组中加入PF_BLUETOOTH=31
*/
err = sock_register(&bt_sock_family_ops);
BT_INFO("HCI device and c