自己移植nimble_0.nimble藍牙協議棧架構


 

再閱讀之前,你需要:

 

 

1. nimble 協議棧官方源碼

 

 

首先分析nimble源碼目錄架構:

 

 

整個nimble協議棧共包含6個目錄:

  1. /apps 文件夾包含了使用nimble協議棧實現的藍牙應用程序。
  2. /docs 文件夾包含了nimble協議棧的一些說明文檔,后綴為.rst
  3. /ext   文件夾包含了nimble 協議棧使用的加密庫
  4. /nimble 文件夾包含了整個 nimble 協議棧代碼實現
  5. /porting 文件夾包含了nimble 協議棧移植到不同os上所需的適配的API
  6. /targets  不關心的文件夾(我也不曉得是撒子,單元測試?)

我們最需要關心的是 /nimble 目錄和 /porting 目錄

整個nimble藍牙協議棧的拓撲結構如下:

 

 

/nimble 目錄:主機與控制器協議棧實現

 

 

協議棧的實現包含了5個目錄:

  1. /controller,該目錄包含控制器側的協議棧實現
  2. /drivers,該目錄包含控制器協議棧對藍牙射頻芯片硬件的驅動API原型和實現,因為控制器協議棧與硬件是直接耦合的,所以對不同的芯片,驅動接口的實現不同
  3. /host,該目錄包含主機側的協議棧,以及各種服務的實現
  4. /include,該目錄包含了一些外部提供的API原型,比如:主機協議棧和控制器協議棧都會調用的HCI通信API原型(在ble_hci_trans.h中),以及主機協議棧與OS相關的API原型(nimble_npl.h文件中)
  5. /transport,該目錄包含了不同HCI類型對應的HCI的通信API實現

/porting目錄:移植目錄

 

 

該目錄包含4個文件夾:

  1. /examples,移植到不同OS平台完成后的協議棧啟動示例,dummylinux
  2. /nimblenimble協議棧移植的剩余部分(這些接口可能都不需要更改,根據實際使用環境而定)
  3. /npl,不同os平台的移植目錄,該目錄主要實現了主機協議棧在不同OS平台的操作api實現,這些 api 原型在 nimble_npl.h 文件中
  4. /targets,不關心,我也不曉得是撒子

 

/porting/nimble目錄:移植剩余目錄?研究一下

 

 

 

該目錄總共包含兩個頭文件,includesrc

 

我們主要研究/src目錄吧

 

 

 

/endian.c : 查看源代碼,該庫主要提供數組與整型按大/小端轉換,數組顛倒,數組倒序交換

 

/hal_timer.c : 該文件主要提供一個基於nrf52 硬件平台的定時器服務庫,這些定時服務API主要供 /os_cputIme.c 調用

 

/mem.c : 提供了分配內存池並初始化的操作,還提供了從內存池中分段的操作

 

/nimble_port.c : 提供了移植通用操作庫,比如 nimble_port_init() 啟動nimble 協議棧,nimble_port_run() 主機協議棧處理函數,nimble_port_get_dflt_eventq() 獲得nimble主機協議棧的默認事件隊列, nimble_port_ll_task_func() 控制器協議棧處理函數。

 

/os_cputime.c : CPU時間服務模塊,該模塊為控制器提供時間(定時與延時)服務(控制器協議棧與硬件直接耦合),該模塊使用 /hal_timer.c 提供的接口  

 

/os_cputime_pwr.c : 類似CPU時間服務模塊的補充api   

 

/os_mbuf.c : 該文件是 mbuf 操作庫,mbuf 是用來存儲數據的結構體,這個庫提供了協議棧對mbuf的所有操作API                         

 

/os_mempool.c : 該文件提供了操作內存池的API

 

/os_msys_init.c : 該文件提供了一個靜態內存區,如下:

 

這個靜態內存區作為 mbuf 池,並將這個mbuf池以 msys 的類型注冊進nimble協議棧。所以 /os_msys_init.c 文件主要提供一個 msys 類型的 mbuf 池的初始化與注冊

 

共同學習

一起進步

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM