kernel中bluetooth的初始化

2021-06-20 00:10:16 字數 2355 閱讀 1943

我們大家都知道,android其實是基於linux之上進行執行的。在android系統的執行之初,首先是kernel層的一系列的初始化。今天曉東就先和大家來簡單分析一下在開機之後,kernel中和bluetooth的初始化相關的內容有哪些。

我們仍然還是才kernel/net/bluetooth下面的**開始檢視,搜尋一下initcall相關的內容也就只有在af_bluetooth.c中看到了這樣一句話:

subsys_initcall(bt_init);

廢話不多說了,直接看**了:

1、bt_init的實現。

[cpp]view plain

copy

static

int__init bt_init(

void

)    

1.1 hci_sock_init的實現

下面,我們來看一下hci_sock_init函式的實現:

[cpp]view plain

copy

int__init hci_sock_init(

void

)    

這裡的關鍵是呼叫了bt_sock_register和hci_register_notifier函式。下面,我們來著重分析一下這兩個函式

1.1.1 bt_sock_register函式的實現

[cpp]view plain

copy

intbt_sock_register(

intproto, 

const

struct

net_proto_family *ops)    

1.1.2 hci_register_notifier的分析

**很簡答,就是註冊了hci_notifier的callback為hci_sock_nblock

[cpp]view plain

copy

inthci_register_notifier(

struct

notifier_block *nb)    

1.2 l2cap_init的分析

l2cap相關的初始化,位於l2cap_sock.c中

[cpp]view plain

copy

int__init l2cap_init(

void

)    

//就是建sys/kernel/debug/bluetooth/l2cap

if(bt_debugfs)   

……  

}  

1.2.1 l2cap_init_sockets

這個函式和hci_sock_init的內容就差不多了

[cpp]view plain

copy

int__init l2cap_init_sockets(

void

)    

1.2.2 hci_register_proto

我們知道l2cap和sco其實並不是和hci層平齊的,他們都是位於hci之上的,所以,這裡會繼續在hci之上初始化l2cap和sco相關的內容。

[cpp]view plain

copy

inthci_register_proto(

struct

hci_proto *hp)    

至此bt_init函式的分析就結束了,我們來總結一下,他主要做了以下幾個工作:

1)  新建了幾個debug的資料夾/檔案:

sys/kernel/debug/bluetooth

sys/class/bluetooth

sys/kernel/debug/bluetooth/l2cap

sys/kernel/debug/bluetooth/sco

2)  向協議族陣列中加入了pf_bluetooth=31的協議

3)  向proto_list

中加入了

hci,l2cap,sco

4)  向bt_proto陣列中加入了btproto_l2cap,btproto_hci, btproto_sco

5)  向hci_proto陣列中加入了l2cap和sco

6)  向hci_notifier註冊了乙個callback:hci_sock_nblock

kernel中的per cpu變數

per cpu 變數的引入有效的解決了smp系統中處理器對鎖得競爭,每個cpu只需訪問自己的本地變數。本文闡述了per cpu變數在2.6核心上的實現和相關操作。在系統編譯階段我們就手工的定義了乙份所有的per cpu變數,這些變數的定義是通過巨集define per cpu實現的 11 defin...

kernel中的函式 request

下圖為示意圖,讀者可以參考該圖來閱讀 個人認為對linux下i o資源的管理如掌握 request region函式就能掌握其精髓。linux下對i o資源主要用結構體resource來管理,管理的方法就是用resource來描述使用的i o資源的狀態,並將這些resource用如下兩個resour...

OpenCL中kernel的迴圈呼叫

kernel的迴圈呼叫主要是涉及緩衝區的建立和主機端命令同步 很多例子中會在建立快取物件時對快取物件做初始化,例如 cl mem memobject1 clcreatebuffer context,cl mem read only cl mem copy host ptr sizeof float ...