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

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

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)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中调试WiFi,通常会使用wpa_supplicant和wpa_cli。下面是一些总结和步骤: 1. 在设备上运行wpa_supplicant 在设备上运行wpa_supplicant,它是一个用于处理WiFi连接的后台进程。可以在终端中使用以下命令启动它: ``` wpa_supplicant -iwlan0 -Dwext -c /data/misc/wifi/wpa_supplicant.conf ``` 其中,`wlan0` 是设备的WiFi接口名称,`wext` 是驱动程序的类型,`/data/misc/wifi/wpa_supplicant.conf` 是包含WiFi配置信息的文件路径。 2. 使用wpa_cli进行WiFi连接 wpa_cli是一个命令行工具,用于与wpa_supplicant进行交互并管理WiFi连接。可以在终端中使用以下命令启动它: ``` wpa_cli -iwlan0 ``` 此时会进入wpa_cli交互模式。可以使用以下命令执行一些操作: - `scan` 扫描可用的WiFi网络 - `scan_results` 查看扫描结果 - `add_network` 添加一个新的WiFi网络配置 - `set_network` 设置WiFi网络配置 - `enable_network` 启用WiFi网络 - `disable_network` 禁用WiFi网络 - `status` 查看当前连接状态 例如,如果要连接到名为“mywifi”的WiFi网络,可以执行以下步骤: 1. 扫描可用的WiFi网络 ``` > scan ``` 2. 查看扫描结果 ``` > scan_results ``` 会显示可用的WiFi网络列表,找到名为“mywifi”的网络并记下其network id。 3. 添加一个新的WiFi网络配置 ``` > add_network ``` 会返回一个新的network id。 4. 设置WiFi网络配置 ``` > set_network <network_id> ssid "mywifi" > set_network <network_id> psk "mypassword" ``` 其中,`<network_id>` 是上一步中返回的新的network id,`mywifi` 是WiFi网络的SSID,`mypassword` 是WiFi网络的密码。 5. 启用WiFi网络 ``` > enable_network <network_id> ``` 6. 查看连接状态 ``` > status ``` 如果连接成功,会显示类似于以下内容的信息: ``` wpa_state=COMPLETED ip_address=192.168.1.100 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值