android_wifi读书笔记之6-wpa_supplicant 与kernel交互

本文详细介绍了Android中wpa_supplicant如何与kernel进行交互,涉及用户态和kernel态的初始化、ioctl命令以及netlink机制。内容包括驱动接口的选择、初始化过程、用户态通过ioctl向kernel发送请求以及kernel通过netlink向用户态发送事件通知的实现细节。
摘要由CSDN通过智能技术生成

本文为读书笔记,整理自网络文献和源码

6 wpa_supplicant 与kernel交互

源码位置:external/wpa_supplicant_8/

wpa_supplicant与kernel交互的操作,一般需要先明确驱动接口,以及用户态和kernel态的接口方法,以此来进行调用操作。这里分为4个步骤。

1.首先需要明确指定的驱动接口。因为有较多的驱动接口可以使用,如wext、nl80211等。指定了之后,才能调用相应接口的方法。

2.保存驱动接口

3.接口方法的实现(分为用户态和kernel态)。系统已经定义了,我们只需找到定义的地方,了解有哪些方法。

4.交互

(a)用户态向kernel态发送请求(通过ioctl)

(b)kernel态向用户态发送事件通知(通过netlink)

 

前3步都已经在5.2中描述过。

ps:driver_cmd用于处理DRIVER的命令,调用流程如下:

wpa_supplicant_ctrl_iface_process-> (根据命令字符串调用对应的方法)

wpa_supplicant_driver_cmd->

wpa_drv_driver_cmd->

wpa_s->driver->driver_cmd->

wpa_driver_nl80211_driver_cmd -> (User)

……

6.1 kernel态实现

Kernel态实现的操作方法,实现代码见drivers/net/wireless/bcmdhd/wl_w.c

static const iw_handlerwl_iw_handler[] =

{

         (iw_handler)wl_iw_config_commit,      

         (iw_handler)wl_iw_get_name,               

         (iw_handler)NULL,                   

         (iw_handler)NULL,                   

         (iw_handler)wl_iw_set_freq,         

         (iw_handler)wl_iw_get_freq,                  

         (iw_handler)wl_iw_set_mode,               

         (iw_handler)wl_iw_get_mode,               

         (iw_handler)NULL,                   

         (iw_handler)NULL,                   

         (iw_handler)NULL,                   

         (iw_handler)wl_iw_get_range,               

         (iw_handler)wl_iw_set_priv,          

         (iw_handler)NULL,                   

         (iw_handler)NULL,                   

         (iw_handler)NULL,                   

         (iw_handler)wl_iw_set_spy,           

         (iw_handler)wl_iw_get_spy,          

         (iw_handler)NULL,                   

         (iw_handler)NULL,                   

         (iw_handler)wl_iw_set_wap,                  

         (iw_handler)wl_iw_get_wap,                  

#if WIRELESS_EXT > 17

         (iw_handler)wl_iw_mlme,              

#else

         (iw_handler)NULL,                   

#endif

#if defined(WL_IW_USE_ISCAN)

         (iw_handler)wl_iw_iscan_get_aplist,   

#else

         (iw_handler)wl_iw_get_aplist,               

#endif

#if WIRELESS_EXT > 13

#if defined(WL_IW_USE_ISCAN)

         (iw_handler)wl_iw_iscan_set_scan,     

         (iw_handler)wl_iw_iscan_get_scan,     

#else

         (iw_handler)wl_iw_set_scan,                 

         (iw_handler)wl_iw_get_scan,                 

#endif

#else        

         (iw_handler)NULL,                   

         (iw_handler)NULL,                   

#endif      

         (iw_handler)wl_iw_set_essid,                

         (iw_handler)wl_iw_get_essid,                

         (iw_handler)wl_iw_set_nick,         

         (iw_handler)wl_iw_get_nick,         

         (iw_handler)NULL,                   

         (iw_handler)NULL,                   

         (iw_handler)wl_iw_set_rate,                  

         (iw_handler)wl_iw_get_rate,                  

         (iw_handler)wl_iw_set_rts,           

         (iw_handler)wl_iw_get_rts,           

         (iw_handler)wl_iw_set_frag,         

         (iw_handler)wl_iw_get_frag,                  

         (iw_handler)wl_iw_set_txpow,               

         (iw_handler)wl_iw_get_txpow,              

#if WIRELESS_EXT > 10

         (iw_handler)wl_iw_set_retry,                 

         (iw_handler)wl_iw_get_retry,                 

#endif

         (iw_handler)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值