android wifi驅動開發日記(二)

2021-08-26 01:36:51 字數 1379 閱讀 2119

由於在這個專案中,wifi模組是採用sdio匯流排來控制的,所以先記錄下client driver的sdio部分的結構,這部分的sdio分為三層:sdiodrv、sdioadapter、sdiobusdrv。其中sdiobusdrv是client driver中sdio與wifi模組的介面,sdioadapter是sdiodrv和sdiobusdrv之間的適配層,sdiodrv是client driver中sdio與linux kernel中的mmc sdio的介面。這三部分只需要關注一下sdiodrv就可以了,另外兩層都只是對它的封裝罷了。

在sdiodrv中提供了這幾個功能:

(1)static struct sdio_driver tiwlan_sdio_drv = ;

(2)int sdiodrv_enablefunction(unsigned int ufunc)

(3)int sdiodrv_enableinterrupt(unsigned int ufunc)

(4)sdio的讀寫,實際是呼叫了mmc\core中的 static int mmc_io_rw_direct_host()功能。

sdio功能部分簡單了解下就可以,一般host部分晶元廠商都會做好。我的主要任務還是wifi模組。

首先從wifi模組的入口函式wlandrvif_moduleinit()看起,這裡呼叫了wlandrvif_create()。

**主體部分:

static intwlandrvif_create(void)

在呼叫完wlandrvif_create()這個函式後,實際上wifi模組的初始化就結束了,下面分析如何初始化的。先看wlandrvif_setupnetif(drv)

這個函式的主體,

static int wlandrvif_setupnetif (twlandrvifobj *drv)

注意,在這裡初始化了wlandrvwext_inti(dev),這就說明wpa_supplicant與driver直接的聯絡是走的wext這條路。也就是說event的接收,處理也應該是在wext部分來做的,確定這個,剩下的工作量頓減三分之一,哈哈哈。後面還註冊了網路裝置dev。而在wlan_netdev_ops中定義的功能如下:

static const struct net_device_ops wlan_netdev_ops = ;

功能一看名字就知道了,不說了,這幾個對應的都是linux網路裝置驅動都有的命令字,詳見《linux裝置驅動開發詳解》第十六章。

在這之後,又呼叫了rc =drvmain_createi。

在這個函式裡完成了相關模組的初始化工作。具體不說了。接下來就是等待android上層傳送來的事件了。

Android WIFI狀態監控

android 的wifi狀態可以分為兩大類,兩者均可通過廣播監聽,相應的action在wifimanager類中 第一類 有無wifi源及各個狀態間轉變 可監聽 wifi state changed action。如下圖所示,雙擊可放大 有五種情況 1 1 disabled 1 2 disabli...

Android wifi簡要分析

這裡列了很多,但是大致可以分為四個主要的類scanresult wificonfiguration wifiinfo wifimanager 1 scanresult,主要是通過wifi 硬體的掃瞄來獲取一些周邊的wifi 熱點的資訊。在我們進行wifi 搜尋的時候,一般會搜到這些資訊,首先是接入點...

Android Wifi 移植配置

最近移植wifi到eclair,froyo平台。由於沒有記錄下移植步驟和心得,以至於每次都浪費了大量的精力。在此記錄下移植步驟和心得,並和大家分享,如果有錯誤歡迎指正。1 在你的boardconfig.mk檔案中增加一行 根據你的無線網絡卡型別來設定 2 在你的board配置目錄下建立乙個wpa s...