由於在這個專案中,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...