linux wifi WEXT和NL80211访问接口简介 及imx6ul+realtek rtl8189es 驱动调试

Linux无线驱动接口有两种标准接口,wext(Wireless Extensions无线扩展接口)和nl80211接口。

wext的接口实现上,应用层采用ioctl方式访问驱动,设置无线参数或者获取无线参数,配置无线驱动进行联网操作。无线驱动事件到应用层的传递采用的netlink socket技术,一种netlink route消息技术。这也是很多其他类型的驱动标准的实现方法。但在linux-2.6.25(记得不是很清楚了,懒得确定了)之后,wext API接口版本停止在V22就不再进行更新了。而替代其的是nl80211接口。

    nl80211接口其实在linux-2.6.18并入wext和mac80211协议栈的时候已经提供,但当时的功能还不完整,而且应用层的软件还是都使用WEXT接口,驱动基本不使用nl80211接口实现(除了基于mac80211协议栈的驱动)。 nl80211接口是由开发者Johannes Berg实现的,他也是cfg80211(无线协议栈配置接口,在无线驱动接口和mac80211之间的接口)和mac80211的维护者。无论是用户层访问驱动还是驱动事件通知应用层,nl80211接口都采用的netlink技术。

   nl80211接口逐渐替代wext接口的原因主要是使用netlink技术在应用层和内核层数据交换上相比ioctl方式具有优势,具体的比较见点击打开链接(转载的一篇文章,写得非常清楚),而且很多其他之前使用ioctl的驱动也逐渐采用了netlink方式。再一个原因就是802.11协议的发展,随着802.11n协议以及P2P,WPS无线规范的加入,协议的很多功能可以在应用层实现,增加了很多应用层与驱动层间的API接口和事件。WEXT接口不方便功能扩展的缺点,nl80211可以完全支持wext的所有功能,又可以在不修改内核的情况下增加命令字和事件。无线驱动接口从wext发展到nl80211也就顺理成章。

1. linux kernel4.1 wext vs nl80211:

 

 

下面以realtek rtl8189es模块在imx6ul上为例 :

2. realtek wifi driver 配置:

 

 

ifeq ($(CONFIG_PLATFORM_IMX6UL), y)

EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN

#EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT

EXTRA_CFLAGS += -DRTW_ENABLE_WIFI_CONTROL_FUNC

EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE

EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211

EXTRA_CFLAGS += -DRTW_USE_CFG80211_STA_EVENT

#ARCH := arm

#CROSS_COMPILE := /home/share/CusEnv/FreeScale/arm-eabi-4.4.3/bin/arm-eabi-

#KSRC ?= /home/share/CusEnv/FreeScale/FS_kernel_env

MODULE_NAME := rtl8189ES

endif

 

3. make modules

4. insmod rtl8189es.ko

5.iw dev wlan0 scan | grep SSID

6. station mode:

station mode:

=======connect.sh===========

#/bin/sh

killall hostapd udhcpd wpa_supplicant udhcpc 2> /dev/null

 

wpa_supplicant -Dnl80211 -iwlan0 -cwpa_supplicant.conf -B

udhcpc -i wlan0

=======connect.sh end========

 

 

=======wpa_supplicant.conf====

ctrl_interface=/var/run/wpa_supplicant

ap_scan=1

 

network={

        ssid="liuxd"

        psk="12345678"

}

=======wpa_supplicant.conf end====

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值