嵌入式系统添加无线wifi模块

时间:2022-09-07 19:04:42

开发环境:fl2440开发板,linux3.0内核,交叉编译器路径/opt/buildroot-2011.11/arm920t/usr/bin/arm-linux-,无线网卡RT3070

平时开发板联网都需要接一根网线,十分不方便,于是想到可以添加wifi功能。下面详细说明整个开发流程。

一.配置linux内核支持wireless无线上网

[*] Networking support  --->

-*-   Wireless  --->

<*>   cfg80211 - wireless configuration API

[ ]     nl80211 testmode command

[ ]     enable developer warnings

[ ]     cfg80211 regulatory debugging

[*]     enable powersave by default

[ ]     use statically compiled regulatory rules database

[ ]     cfg80211 wireless extensions compatibility

<*>   Common routines for IEEE802.11 drivers

[ ]   lib80211 debugging messages

<*>   Generic IEEE 802.11 Networking Stack (mac80211)

[ ]   PID controller based rate control algorithm

[*]   Minstrel

[*]     Minstrel 802.11n support

Default rate control algorithm (Minstrel)  --->

[ ]   Enable mac80211 mesh networking (pre-802.11s) support

[ ]   Select mac80211 debugging features  --->

Device Drivers  --->

Generic Driver Options  --->

(/sbin/hotplug) path to uevent helper

[ ] Maintain a devtmpfs filesystem to mount at /dev

[ ] Select only drivers that don't need compile-time external firmware

[ ] Prevent firmware from being built

-*- Userspace firmware loading support

[*]   Include in-kernel firmware blobs in kernel binary

()    External firmware blobs to build into the kernel binary

[*] Network device support  --->

[*]   Wireless LAN  --->

<*>   Ralink driver support  --->

--- Ralink driver support

< >   Ralink rt2500 (USB) support

< >   Ralink rt2501/rt73 (USB) support

<*>   Ralink rt27xx/rt28xx/rt30xx (USB) support //因为我们用的是RT3070,所以选择这个选项,以后你们用其他芯片的话,就选择其他选项

[ ]    rt2800usb - Include support for rt33xx devices

[ ]    rt2800usb - Include support for rt35xx devices (EXPERIMENTAL)

[ ]    rt2800usb - Include support for rt53xx devices (EXPERIMENTAL)

[ ]    rt2800usb - Include support for unknown (USB) devices

[*]   Ralink debug output

二.RT3070无线模块驱动移植到开发板

1.下载wireless_tools固件

下载地址:http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/

如果链接失效了,可以自己百度下载

2.解压wireless_tools安装包,并修改makefile

[weishusheng@localhost wifi]$ tar -zxf wireless_tools.29.tar.gz

[weishusheng@localhost wifi]$ cd wireless_tools.29

[weishusheng@localhost wireless_tools.29]$ vim Makefile

添加自己的交叉编译器路径和交叉编译器的库,这些工具的编译可以先在自己的虚拟机或者PC上编译,将编译生成的可执行文件拷贝到开发板的相应目录下!

修改如下:( 红色部分为修改部分)

## Compiler to use (modify this for cross compile).

CC = /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc

## Other tools you need to modify for cross compile (static lib only).

AR = /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-ar

RANLIB = /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-ranlib

3.编译wireless_tools安装包,生成iwconfig、iwpriv、 iwevent、libiw.so.29等文件

[weishusheng@localhost wireless_tools.29]$ make

。。。

[weishusheng@localhost wireless_tools.29]$ ls

嵌入式系统添加无线wifi模块

4. 将iwconfig, iwpriv, iwevent、iwspy拷贝到开发板的bin目录下,将libiw.so.29拷贝到开发板的/lib下:(用tftp传送文件,这里不在赘述)

以下是我拷贝完毕后查看相应安装包的结果:

嵌入式系统添加无线wifi模块

修改他们的权限

>: chmod 777 iw* libiw.so.29

嵌入式系统添加无线wifi模块

2.3.2 下载wpa_supplicant-0.7.3

wpa_supplicant本是开源项目源码,被谷歌修改后加入Android移动平台,它主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的,而实际上的工作内容是通过socket(不管是wpa_supplicant与上层还是 wpa_supplicant与驱动都采用socket通讯)与驱动交互上报数据给用户,而用户可以通过socket发送命令给wpa_supplicant调动驱动来对WiFi芯片操作。 简单的说,wpa_supplicant就是WiFi驱动和用户的中转站外加对协议和加密认证的支持。

1.下载后解压wpa_supplicant压缩包文件:

[weishusheng@localhost wifi]$ tar -zxf wpa_supplicant-0.7.3.tar.gz

2.3.3 下载openssl(数据包)

1.下载地址:http://www.openssl.org/source/ openssl-0.9.8i.tar.gz

我之前用上面的链接下载的时候,这个链接已经失效了,大家可以百度openssl-0.9.8i进行下载,我最后是在CSDN上花积分下载的

在编译openssl-0.9.8i数据包前,需要用到wpa_supplicant的一个补丁,所以将wpa_supplicant-0.7.3的patches拷贝到openssl数据包的patch目录下,这里可以自己创建一个install目录和patch目录,install目录用来存放编译openssl-0.9.8i时生成的可执行文件,patch目录用来存放wpa_supplicant-0.7.3的patches补丁,具体操作如下:

[weishusheng@localhost openssl-0.9.8i]$ mkdir install patch

2.将wpa_supplicant中的补丁拷贝到openssl中:

[weishusheng@localhost wifi]$ cd wpa_supplicant-0.7.3
[weishusheng@localhost wpa_supplicant-0.7.3]$ ls
COPYING patches README src wpa_supplicant
[weishusheng@localhost wpa_supplicant-0.7.3]$ cd patches/
[weishusheng@localhost patches]$ ls
openssl-0.9.8d-tls-extensions.patch openssl-0.9.8i-tls-extensions.patch
openssl-0.9.8e-tls-extensions.patch openssl-0.9.8-tls-extensions.patch
openssl-0.9.8g-tls-extensions.patch openssl-0.9.9-session-ticket.patch
openssl-0.9.8h-tls-extensions.patch
[weishusheng@localhost patches]$ cp openssl-0.9.8i-tls-extensions.patch /home/weishusheng/modules/wifi/openssl-0.9.8i/patch

3.修改openssl-0.9.8i目录下的makefile如下:

CC= /opt/buildroot-2011.11/arm920t/usr/bin/arm-linux-gcc

AR=/opt/buildroot-2011.11/arm920t/usr/bin/arm-linux-ar $(ARFLAGS) r

RANLIB= /opt/buildroot-2011.11/arm920t/usr/bin/arm-linux-ranlib

添加编译后可执行文件的存放目录,这个目录的设置不唯一,你可以自己选择存放路径,红色部分为要修改的部分,修改成你自己的目录:

# INSTALL_PREFIX is for package builders so that they can configure

# for, say, /usr/ and yet have everything installed to /tmp/somedir/usr/.

# Normally it is left empty.

INSTALL_PREFIX=

INSTALLTOP=/home/weishusheng/modules/wifi/openssl-0.9.8i/install         //29行

# Do not edit this manually. Use Configure --openssldir=DIR do change this!

OPENSSLDIR=/home/weishusheng/modules/wifi/openssl-0.9.8i/install       //32行

4.编译安装openssl-0.9.8i

[skyyang@centos6 openssl-0.9.8x]$ make && make install

5.编译通过后,可以看到install目录下生成了很多文件

[weishusheng@localhost openssl-0.9.8i]$ ls install/lib/
engines libcrypto.a libssl.a pkgconfig

6.拷贝libcrypto.a  libssl.a到开发板的/lib下

2.3.4 编译wpa_supplicant

[weishusheng@localhost wifi]$ cd wpa_supplicant-0.7.3
[weishusheng@localhost wpa_supplicant-0.7.3]$ ls
COPYING patches README src wpa_supplicant
[weishusheng@localhost wpa_supplicant-0.7.3]$ cd wpa_supplicant/

1.复制defconfig 改名为.config,并修改如下:

[weishusheng@localhost wpa_supplicant]$ cp defconfig .config

[weishusheng@localhost wpa_supplicant]$ vim .config

27 #CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc
28 CC=/opt/buildroot-2011.11/arm920t/usr/bin/arm-linux-gcc -L/home/weishusheng/modules/wifi/openssl-
0.9.8i/install/lib
29 #CFLAGS += -Os
30 CFLAGS += -I/home/weishusheng/modules/wifi/openssl-0.9.8i/install/include
31 #CPPFLAGS += -I../src/include -I../../src/router/openssl/include
32 #LIBS += -L/opt/brcm/hndtools-mipsel-uclibc-0.9.19/lib -lssl
33 LIBS +=-L/home/weishusheng/modules/wifi/openssl-0.9.8i/install/lib

2.编译wpa_supplicant

[weishusheng@localhost wpa_supplicant]$ make

[weishusheng@localhost wpa_supplicant]$ ls

嵌入式系统添加无线wifi模块

3.将wpa_cli,wpa_supplicant,wpa_passphrase拷贝到开发板的bin目录下:

~ # ls bin/嵌入式系统添加无线wifi模块

2.4 启动RT3070无线模块连接路由器

2.4.1 使用wpa_passphrase创建wpa_supplicant的配置文件

1.使用wpa_passphrase创建wpa_supplicant的配置文件,使用加密后的密码,不用明文。当然使用明文密码也可以连接到无线路由器:

以下命令是在开发板上进行的操作:

/apps/wireless # wpa_passphrase CMCC 9b4019b401 >> wpa_supplicant.conf

/apps/wireless # cat wpa_supplicant.conf

2.修改wpa_supplicant.conf配置文件,添加密码加密算法和使用明文密码:

>: vi wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="Router_LingYun"
key_mgmt=WPA-PSK
#proto=WPA
#psk="lingyun-emb"
proto=WPA2
pairwise=TKIP CCMP
group=TKIP CCMP
psk="lingyun-emb"
#psk=20a17fe2e0482c0db4e4dcf6c4494cebbd88ae4f166015115ca83ce9022b8cd2

}

嵌入式系统添加无线wifi模块

2.4.2 使能RT3070无线网卡模块

>:  ifconfig wlan0 up

2.4.3 ifconfig wlan0 up启动无线网卡错误:rt2x00…:error-Failed to Reguest Firmware

通常情况下,load firmware的动作是通过用户空间的hotplug handler,也就是/proc/sys/kernel/hotplug里设定的执行档,来完成。root_qtopia默认会在/etc/init.d/rcS里将/proc/sys/kernel/hotplug设定为/sbin/mdev,即busybox的mdev模块。它在收到来自内核的请求加载rt3070.bin这个firmware消息后,会从/lib/firmware目录下去找rt3070.bin,如果能找到就加载。

具体解释看这个链接:

http://www.linuxidc.com/Linux/2012-01/50806.htm

但是那时候我按照这个链接上的方法做了,还是不行,后来找了其他博客,说是要移植RT2870和RT3070这两个系统固件,才可以使能无线网卡!于是我到官网去下载了这两个固件:(其实我们用的是RT3070,所以只需要加载RT3070.bin文件就行了)

[weishusheng@localhost ~]$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/dwmw2/linux-firmware.git

[weishusheng@localhost ~]$ cd linux-firmware/

将RT3070.bin固件下载到开发板的/lib/firmware目录下:

/lib >: mkdir -p  /lib/firmware

/lib >: cd firmware/

/lib/firmware >: tget rt3070.bin

Rt3070.bin           100% |*******************************|  8192   0:00:00 ETA

2.4.4 加载完RT3070.bin固件后重新使能无线网卡便可以成功使能

>: ifconfig wlan0 up
>: ifconfig
eth0 Link encap:Ethernet HWaddr FA:BF:B1:79:4B:F5
inet addr:192.168.1.23 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2838 errors:0 dropped:0 overruns:0 frame:0
TX packets:1544 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1768351 (1.6 MiB) TX bytes:243628 (237.9 KiB)
Interrupt:51 Base address:0x2300

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

wlan0 Link encap:Ethernet HWaddr 00:24:25:50:A9:4D
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

>:

我们注意到当你第一次使能无线网卡的时候,你只是使能了它,但是这张网卡的参数还未配置,还没有IP,所以现在还是不能上网,要配置网卡参数、连接路由器之后才能上网!

2.4.5 启动RT3070并配置RT3070无线网卡参数

1.启动命令:

~#wpa_supplicant -B -Dwext -iwlan0 -c/apps/wireless/wpa_supplicant.conf -d

-d :增加调试信息

-D :驱动名称,无线网卡为wext

-i :网络接口名称,这里无线为wlan0

-B:后台守护进程

-c:指定配置文件

嵌入式系统添加无线wifi模块

2.配置无线网卡IP和子网掩码:

>: ifconfig wlan0 192.168.1.244 broadcast 192.168.1.1 netmask 255.255.255.0 up

嵌入式系统添加无线wifi模块

3.测试开发板是否可以无线上网:

>: ifconfig eth0 down
>: ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

wlan0 Link encap:Ethernet HWaddr 00:24:25:50:A9:4D
inet addr:192.168.1.244 Bcast:192.168.1.1 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:499 errors:0 dropped:147 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:50920 (49.7 KiB) TX bytes:2916 (2.8 KiB)

>: ping 192.168.1.3

嵌入式系统添加无线wifi模块

看到了没,可以上网了!如果你想上外网,那么就要给开发板添加DNS域名解析服务!还有添加默认网关!

此时我们把开发板上的网线拔了依旧可以上网ping通。

嵌入式系统添加无线wifi模块的更多相关文章

  1. 嵌入式系统图形库GUI核心模块介绍

    本文转载自:http://blog.csdn.net/xteda/article/details/6575278 (作者 冯青华 信庭嵌入式工作室(www.xteda.com)- CEO Blog:h ...

  2. CDlinux系统破解无线wifi

    CDlinux是破解无线wifi信号的很好用的系统.它就像一个PE,不过它是基于Linux内核的微型系统.里面的破解工具很齐全,既有传统的抓包工具,也有最新的PIN码破解软件,而且针对windows用 ...

  3. 「雕爷学编程」Arduino动手做(33)——ESP-01S无线WIFI模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...

  4. FS210(cortex-A8)移植MT7601无线WIFI模块

    准备:ubuntu 12.04 板子内核:3.0.2 交叉编译器:arm-cortex_a8-linux-gnueabi-gcc 所需资源下载:https://pan.baidu.com/s/1yWA ...

  5. 打开&sol;关闭网卡无线WIFI模块

    @echo off title ------(Please run as Administrators)Please select------ :begin echo ---------------- ...

  6. 「玩转树莓派」树莓派 3B&plus; 配置无线WiFi

    前言 网线不方便还花钱,有自带的无线 WiFi 模块为啥不用. 网络模式 这里我们先介绍两种网络模式,WPA-Personal 与 WPA-Enterprise. WPA-Personal 大多数家庭 ...

  7. WIFI模块 RTL8188EUS Realtek

    http://item.taobao.com/item.htm?spm=a230r.1.14.24.KnooKa&id=26119704895 W12 产品是一款采用国际先进*瑞昱Realt ...

  8. 嵌入式linux驱动开发之给linux系统添加温度传感器模块

    忙了几天,终于可以让ds18b20在自己的开发板的linux系统上跑了!虽然ds18b20不是什么新鲜玩意,但是想想知己可以给linux系统添加模块了还是有点小鸡冻呢! 虽然说现在硬件的资源非常丰富而 ...

  9. 如何做好智能家居工业物联网串口转WiFi&sol;4G&sol;以太网无线AP方案的物联网WiFi模块选型

    2020年一场突如其来的灾难袭来,各大经济市场在不同程度被按下了"暂停键".物联网控制作为新兴行业优势凸显出来,其无接触式的交互方式,远程控制,智能控制车间,给人民带来安全.智能的 ...

随机推荐

  1. React组件生命周期过程说明

    来自kiinlam github94 实例化 首次实例化 getDefaultProps getInitialState componentWillMount render componentDidM ...

  2. 获得Unix&sol;Linux系统中的IP、MAC地址等信息

    获得Unix/Linux系统中的IP.MAC地址等信息 中高级  |  2010-07-13 16:03  |  分类:①C语言. Unix/Linux. 网络编程 ②手册  |  4,471 次阅读 ...

  3. Rich控件二

    Calendar控件  使用案例: 在Default.aspx中: <div> <h1>Calendar控件</h1> <asp:Calendar ID=&q ...

  4. SQL Server 数据库初始化准备脚本

    通常我们在项目部署前都会写一份数据库初始化脚本.由于数据库外键的限制,我们需要按照数据引用顺序添加初始记录,这个整理过程相当麻烦. 因此写了以下脚本,原理是先去掉所有外键,然后执行一次清空,然后添加数 ...

  5. 常用命令ls cd cp mv touch mkdir pwd rm cut sort tr more less

    ls  -ldhtai 显示目录下面的文件 ls -l 显示详细信息 ls -d 显示当前目录 ls -t 以时间先后顺序显示 ls -a 列出所有文件包括隐藏文件 ls -i 显示文件的inode号 ...

  6. 浅谈Linux基本命令

    本篇文章作为Linux 入门的必备篇,主要简述Linux系统目录结构和Linux 基本Shell命令,大致内容如下: ​ 一  Linux目录及其概述 如下目录为CentOS 7目录结构 ​ 1.建立 ...

  7. 向redis中添加删除list列表

    转: 向redis中添加删除list列表 2018年04月18日 15:44:54 luo_yu_1106 阅读数:4082   一.添加 向redis中添加队列有两种方式 1.lpush l是lef ...

  8. 【模拟】&lbrack;NOIP2014&rsqb;螺旋矩阵&lbrack;c&plus;&plus;&rsqb;

    题目描述 一个n行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转:重复上述操作直至经过矩阵中所有格子.根据经过顺序 ...

  9. 【转】Python介绍

    [转]Python介绍 本节内容 Python简史 Python是一门什么样的语言? Python的优点与缺点 Python解释器 一.Python简史 历史背景 在20世纪80年代,IBM和苹果已经 ...

  10. 四种常见 Git 工作流比较

    BY 童仲毅(geeeeeeeeek@github) 这是一篇在原文(BY atlassian)基础上演绎的译文.除非另行注明,页面上所有内容采用知识共享-署名(CC BY 2.5 AU)协议共享. ...