自制文件系统对于wifi的wpa_supplicant移植

本文详细介绍了如何在自制的Linux QT文件系统中移植并支持WiFi功能,包括编译WiFi驱动、加载驱动模块、配置网络接口,以及移植wpa_supplicant工具以支持wpa2加密,特别强调了驱动对nl80211标准的需求,以及解决移植openssl库和libnl库过程中遇到的问题。
摘要由CSDN通过智能技术生成

最近一些项目原因需要让自制的linux qt文件系统支持wifi功能,本文将具体进行分析。


首先想要支持wifi功能,wifi驱动是必不可少的,一般的嵌入式设备都集成wifi模块了,如果没有,请选配一款usbwifi模块。

1,然后是编译wifi驱动,具体型号具体分析,可以百度,本文不做阐述,假设编译出的wifi驱动模块文件叫wlan.ko,并且假设内核版本是3.4.39。

2,wifi驱动编译成模块之后,一般放入”/lib/modules/3.4.39/“目录下,再在/etc/init.d/rcS脚本的首行添加一句insmod /lib/modules/3.4.39/wlan.ko

这样在开机时就会加载wlan.ko驱动,然后在ifconfig -a命令中可以看到例如wlan0这样的设备,设备名不一而足,不多阐述(有的叫ra0等)。

3,然后需要在/etc/network/interfaces中追加:

auto wlan0
iface wlan0 inet dhcp

语句,目的是让操作喜用自己打开wlan设备。

那么以上步骤都做完之后,开机后执行ifconfig,直接就能看到wlan0了,这样我们的第一步就做好了。


4,一般wlan设备的驱动需要对应的命令去进行wifi连接,由于现在很多嵌入式设备使用wpa2方式进行加密,所以,我们需要移植wpa_supplicant工具,

对wpa2加密进行支持。

首先,移植wpa_supplicant需要两个库进行支持,一个是openssl库,正常来说有这个库就可以了,网上的很多移植教程也是这么说的,然而在实际使用中,

我发现,我的wifi设备驱动是比较新的,它的wifi连接标准使用nl80211,而网上教程普遍描述的是wext标准(再一次印证了网上的东西都是很早的)。

贴上一个前辈写的过程:

http://www.cnblogs.com/wanhl/p/3374443.html

按照他的方式,我确实移植成功了,但是在我的自制文件系统中不能连接,到这一步,调用

wpa_supplicant -iwlan1 -Dwext1 -c /etc/wpa_supplicant.conf

指令直接报以下错误信息:

ioctl[SIOCSIWPMKSA]: Invalid argument
ioctl[SIOCSIWMODE]: Invalid argument
ioctl[SIOCGIWRANGE]: Invalid argument
ioctl[SIOCGIWMODE]: Invalid argument
ioctl[SIOCSIWAP]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWPMKSA]: Invalid argument
unlink[ctrl_iface]: Not a directory
Could not unlink existing ctrl_iface socket '/sbin/wpa_supplicant/wlan0'
Failed to initialize control interface '/sbin/wpa_supplicant'.
You may have another wpa_supplicant process already running or the file was
left by an unclean termination of wpa_supplicant in which case you will need
to manually remove this file before starting wpa_supplicant again.


ioctl[SIOCGIWMODE]: Invalid argument
ioctl[SIOCSIWAP]: Invalid argument
l2_packet_receive - recvfrom: Network is down

这让我很是费解,显然是ioctl函数报错,那么也就是驱动提出了问题了,但我用同样的驱动在ubuntu下是可以运行的,但并不是用命令去运行。

因此我尝试用同样的命令进行操作,在ubuntu下也报了相同的错误,也就是说这个命令确实是有问题的,而问题的原因就是wext标准已经不被我的

驱动支持了,那么当我查看wpa_supplicant工具的帮助信息时,我发现它有两套标准,一个是wext,另一个是nl80211,于是我尝试修改命令,

修改成wpa_supplicant -iwlan1 -Dnl80211 -c /etc/wpa_supplicant.conf

执行之后成功了,也就是说我的驱动只支持nl80211标准,于是我回到qt文件系统下,执行此命令,报错,表示不支持80211标准。

因此,我在wpa_supplicant工程的.config文件中找到与80211相关的配置宏,也就是打开CONFIG_DRIVER_NL80211=y,

可以选择性得关闭CONFIG_DRIVER_WEXT=y

再次编译,失败,表示有多个头文件没有找到:

../src/drivers/driver_nl80211.c:22:31: warning: netlink/genl/genl.h: No such file or directory
../src/drivers/driver_nl80211.c:23:33: warning: netlink/genl/family.h: No such file or directory
../src/drivers/driver_nl80211.c:2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值