#打卡不停更# 嵌入式Linux下WIFI驱动与管理工具交叉编译安装 原创 精华
开发环境说明
内核版本:3.5.0
交叉编译器:arm-linux-gcc-4.5.1
PC 宿主机:红帽 REDHAT
前面写了一篇WIFI驱动的移植,着重于WIFI测试,驱动安装,网络连接等操作。这篇文章主要是详细介绍驱动源码从下载到编译安装,WIFI工具交叉编译安装,从0开始给嵌入式开发板开发一个可以正常使用的WIFI驱动。能够完成网络管理,网络连接。
一、移植 WIFI 驱动
当前采用的WIFI是360随身WIFI,这款随身WIFI所用的网卡芯片是 Ralink(雷凌科技) 的解决方案(在上篇文章里也有详细介绍),芯片型号为 MT7601。 如果在PC计算机上使用这款随身WIFI那自然是简单,官网下载个驱动安装插上就能使用。 如果是在嵌入式平台,自动的平台上使用,官网就没有现成的驱动下载了,这种情况下就需要针对WIFI编写驱动。当然,从0开始写确实困难,不过这款芯片官方提供了linux下的驱动源码,这就好办了。只需要下载下来,编译就能使用了。
接下来这篇文章会详细介绍WIFI驱动从哪里下载,下载下来如何修改进行编译安装测试,并交叉编译对应的WIFI工具,最终完成WIFI的基本使用,完成IP地址动态分配,热点连接,热点扫描、热点信息查看等等。
1.1 下载 WIFI 驱动
下载链接:http://mediatek.com/zh-CN/downloads1/downloads/
直接下载链接
http://s3.amazonaws.com/mtk.cfs/Downloads/linux/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2
1.2配置编译驱动
将下载的驱动压缩包拷贝到虚拟机,解压。(为了好分类,最好单独创建一个文件夹存放)
1.2.1 解压
1.2.2 修改运行环境
进入到解压的目录下,修改顶层 Makefile,驱动默认的运行环境为 X86,需要注释掉。
1.2.3 修改编译环境
1.2.4 查看 USB 的 ID
USB 芯片的 ID,需要用作匹配作用!相当于平台设备的驱动端与设备端一样,插入了 USB 之后,USB 控制器需要对插入的 USB 进行访问,确认是否是 WIFI 芯片。确定的凭证就是 ID 号
查看 USB ID 的方法:
在虚拟机环境下,输入 lsusb 先查看已经存在的 USB 设备:
查看之后,再插入 360WIFI,再次输入 lsusb 查看存在的 USB 设备。
注意: 默认 360WIFI 会被 windows 挂载,需要手动点击虚拟机右下脚的 USB 图标将 360WIFI 挂载进来。
挂载进来之后,查看的结果:
由上面可以看出,360WIFI 的设备 ID 分别是:148f 和 760b。
1.2.5 添加 USB ID
添加 USB 的 ID 需要修改 common 目录下的 rtusb_dev_id.c 文件,该文件里有一个存放 ID 的结构体,我们需要将上一步得到的 360WIFI 的 ID 添加到结构体中。
添加的格式:
1.2.6 去除调试信息
为什么去除调试信息呢?因为在终端调试代码的时候,驱动会不断的向终端打印信息,导致没法敲打命令,所以需要将其注释掉。去除调试信息需要进入到 include/os/目录下,修改 rt_linux.h 文件的 1558 行。
1.2.7 编译源码
修改完之后,编译源码,生成驱动文件。 (需要在解压的顶层目录下输入 make) 编译成功后,会在 os/linux/目录下生成 mt7601Usta.ko 文件。
1.2.8 修改 U-BOOT 启动代码
启动 u-bootd 的时候先进入 U-BOOT 命令行,设置 UBOOT 环境变量,在之前的环境变量后加一句 coherent_pool=2M。
coherent_pool=2M 表示设置 DMA 的缓冲区大小。如果不设置 DMA 缓冲区大小,装载 360WIFI 驱动的时候会报错。
设置UBOOT环境变量代码如下:(注意:下边代码是一行,不能有换行符出现)
1.2.9 测试 WIFI 驱动
将生成的 mt7601Usta.ko 驱动文件拷贝到开发板目录下,安装。安装成功之后,将 360WIFI 插入到开发板的 USB 口中,观察弹出的测试信息。
如果识别成功,会出现以下的提示信息:
1.3.0 拷贝 WIFI 启动配置文件
将 RT2870STA.dat 拷贝至开发板 /etc/Wireless/RT2870STA/目录下。
(没有目录就创建一个); mkdir /etc/Wireless/RT2870STA
二、移植 WIFI 配置工具
2.1 移植wireless_tools
Wireless tools for Linux是一个Linux命令行工具包,用来设置支持Linux Wireless Extension的无线设备。Wireless tools for Linux 和 Linux Wireless Extension 由 Jean Tourrilhes在维护,由Hewlett-Packard(HP惠普)赞助。
大多数基于Linux内核的操作系统都包含Wireless tools。在许多GNU/Linux 发行版中,都缺省安装这个工具包,即使是没有自动安装,也能很容易地找到其二进制代码安装包。
Wireless Extension (WE)是一组通用的API,能在用户空间对通用Wireless LANs进行配置和统计。它的好处在于仅通过一组单一的工具就能对各种各样的Wireless LANs进行管理,不过它们是什么类型,只要其驱动支持Wireless Extension就行;另一个好处就是不用重启驱动或Linux就能改变这些参数。
Wireless Tools (WT)就是用来操作Wireless Extensions的工具集,它们使用字符界面,虽然粗糙,但支持所有Wireless Extension。虽然还有很多其他管理Wireless Extensions的工具,但Wireless Tools是参考实现,它包括以下工具:
iwconfig:设置基本无线参数
iwlist:扫描、列出频率,比特率,密钥等
iwspy:获取每个节点链接的质量(只能查阅与之相连的节点)
iwpriv:操作Wireless Extensions 特定驱动
ifrename: 基于各种静态标准命名接口
大多数 Linux 发行版本都在其网络初始化脚本中集成Wireless Extension,以便启动时配置无线接口。他们还将Wireless Tools作为其标准封装包。
2.1.1 下载地址
下载地址:
http://www.labs.hpe.com/personal/Jean_Tourrilhes/Linux/wireless_tools.29.tar.gz
2.1.2 解压配置
(1)解压
(2)修改 Makefile
(3) 编译
(4) 拷贝文件
2.1.3 工具使用方法
3.1 移植 wap_supplicant 工具
目前可以使用wireless-tools 或wpa_supplicant工具来配置无线网络。请记住重要的一点是,对无线网络的配置是全局性的,而非针对具体的接口。
wpa_supplicant是一个较好的选择,但缺点是它不支持所有的驱动。请浏览wpa_supplicant网站获得它所支持的驱动列表。另外,wpa_supplicant目前只能连接到那些你已经配置好ESSID的无线网络,它可以让您连接到那些使用WPA的AP。wireless-tools支持几乎所有的无线网卡和驱动,但它不能连接到那些只支持WPA的AP。
关于WPA:
WPA是WiFi Protected Access的缩写,中文含义为“WiFi网络安全存取”。WPA是一种基于标准的可互操作的WLAN安全性增强解决方案,可大大增强现有以及未来无线局域网络的数据保护和访问控制水平。
wpa_supplicant是一个开源项目,已经被移植到Linux,Windows以及很多嵌入式系统上。它是WPA的应用层认证客户端,负责完成认证相关的登录、加密等工作。
wpa_supplicant是一个 独立运行的 守护进程,其核心是一个消息循环,在消息循环中处理WPA状态机、控制命令、驱动事件、配置信息等。
经过编译后的 wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicant 和 wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关:
后台运行wpa_supplicant,使用 wpa_cli来搜索、设置、和连接网络。
3.1.1 wap_supplicant 简介
在 Linux 移植 iw 工具的时候,我们讲过 iw 支持两种“认证/加密”的方式,这两种方式分别为:open 与 wep。但是现在很多的无线加密方法都是以 wpa 与 wpa2(AES)方式加密的。那么这里就出现了 iw 工具不能再 wpa 与 wpa2 的无线加密上使用。因此接下来移植一个 wpa_supplicant 的工具:这个工具支持上面介绍到的四种方式:
3.1.2 移植 libopenssl 库
OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
OpenSSL被曝出现严重安全漏洞后,发现多数通过SSL协议加密的网站使用名为OpenSSL的开源软件包。OpenSSL漏洞不仅影响以https开头的网站,黑客还可利用此漏洞直接对个人电脑发起“心脏出血”(Heartbleed)攻击。据分析,Windows上有大量软件使用了存在漏洞的OpenSSL代码库,可能被黑客攻击抓取用户电脑上的内存数据。
下载链接:http://distfiles.macports.org/openssl/
3.1.3 拷贝生成的文件
(1)将安装目录下(tmp/include)的头文件拷贝到交叉编译器的 include 目录下
(2) 将编译生成 lib 库拷贝一份到开发板根文件系统 lib 目录下
(3) 将编译生成的 lib 库拷贝到交叉编译器的 lib 目录下
3.1.4 移植 wpa_supplicant : 可用于上述 4 种"认证/加密"的库
下载链接:http://w1.fi/wpa_supplicant/
(1)将下载好的压缩包拷贝至虚拟机解压
(2) 加载配置文件
(3)修改配置文件
(4)编译
(5)安装
(6)拷贝生成的可执行文件到开发板的 sbin 目录下–路径 /tmp/usr/local/sbin
(7) 拷贝生成的可执行文件到开发板的 bin 目录下
4.1 测试使用 WIFI 步骤
4.1.1 创建密码配置文件
4.1.2 创建网卡控制接口
在开发板终端输入:
4.1.3 插入 360wifi 测试
4.1.4 启动网卡
4.1.5 查看连接成功的 WIFI 信息
4.1.6 配置网卡地址信息
4.1.7 配置网关信息
查看路由表信息:
如果没有无线网卡的网关信息,需要自己添加一个:
4.1.8 ping 外网 IP 测试
前提是当前连接的 WIFI 可以连接互联网。
202.108.22.5 是百度的 IP 地址。
4.1.9 实现 ping 域名
在/etc/目录下创建一个 resolv.conf 文件,输入 DNS 地址,如下:
说明:一般写本地网关就可以了,也就是保留 nameserver 192.168.1.1
也可以直接在串口终端使用命令创建并且写入内容。如下:
开发板中要想 ping 通外网 IP,需要设置默认网关,这个网关必须要和所连接的路由器设置的网关相同(resolv.conf 文件内容一般可以自动获取,不用手动填)。
ping 百度示例:
4.2.0 自动获取 IP 地址
使用 busybox 的 udhcpc 工具。一般默认的配置都是选中的,为了确保成功,还是需要去确认一下。
自动获取 IP 也可以使用第三方其他工具(一般使用 busybox 自带的即可):
下载 DHCP 源码,编译后得到 dhclient 工具,实现 DHCP client.
(1) 下载源码:http://gd.tuwien.ac.at/infosys/servers/isc/dhcp/ ,选中 dhcp-3.1.3.tar.gz;
(2) 解压 tar -zxvf dhcp-3.1.3.tar.gz,然后进入./dhcp-3.1.3/,运行配置./configure,之后生成 work.linux-2.2 文件夹, 进入 work.linux-2.2/client/,输入 make “CC=arm-linux-gcc -static”,将编译生成 dhclient。
(3) 拷贝生成的 dhclient 到 mini2440 开发板上,为方便使用,可以放在/usr/bin/下;拷贝另外两个配置文件到开发板,分别是 /dhcp-3.1.3/client/dhclient.conf 和/dhcp-3.1.3/client/scripts/linux 到开发板的/sbin/目录下。并改名后一个文件为 dhclient-script ,并修改该文件的第一行 #! /bin/bash 为 #! /bin/sh ,保存后,修改权限 chmod +x /sbin/dhclient-script。
(4) 为 eth0 或者 wlan0 配置 dhcp 服务,输入 dhclient eth0 或者 dhclient wlan0 即可.
4.2.1 开机自动加载连接路由器
可以将以下代码加载到 etc/profile 文件里或者是/etc/rcS 文件里,开机自动执行。
5.1 其他工具移植方法
5.1.1 安装flex工具库
系统自带的flex库版本太低,需要升级!
Flex 是一个高效、免费的开源框架,可用于构建具有表现力的 Web应用程序,这些应用程序利用Adobe Flash Player和Adobe AIR, 可以实现跨浏览器、桌面和操作系统。虽然只能使用 Flex 框架构建 Flex应用程序,但Adobe Flash Builder(之前称为 Adobe Flex Builder?)软件可以通过智能编码、交互式遍历调试以及可视设计用户界面布局等功能加快开发。
下载链接:http://sourceforge.net/projects/flex/files/
将下载的压缩文件拷贝至虚拟机,解压,配置,编译安装。
5.1.2 安装 bison
下载链接:http://ftp.gnu.org/gnu/bison/
GNU bison 是属于 GNU 项目的一个语法分析器生成器。
GNU Bison是一种通用目的的分析器生成器。它将LALR(1)上下文无关文法的描述转化成分析该文法的C程序。 一旦你精通Bison,你可以用它生成从简单的桌面计算器到复杂的程序设计语言等等许多语言的分析器。
将下载好的bison-3.0 .tar.gz压缩包拷贝到虚拟机解压,解压后,进入到解压后的目录,配置,编译,安装。
5.1.3 安装libnl库
libnl套件是netlink库提供api的集合协议基于Linux内核的接口。
Netlink IPC机制主要是在内核和用户空间之间提供接口。 它被设计为一个更灵活的ioctl的继任者,主要提供网络相关的内核配置和监控接口。
下载链接:http://www.infradead.org/~tgr/libnl/
将下载后的libnl-3.2.25.tar.gz压缩包拷贝到虚拟机,解压,配置,编译,安装。
5.1.4 拷贝依赖库
Libnl库安装成功之后,在tmp目录下会生成lib目录。
高产 写得清晰 适合小白 另外这个目录导航是真好用
每个点讲的很清楚