3.1 wifi网卡RT3070在S3C2440的移植和使用
学习目标:熟悉RT3070在S3C2440的移植和使用,以及其中的相关工具的安装和使用;
一、配置内核选择WIFI驱动
1. 将usb wifi插到电脑,在ubuntu使用命令:# lsusb 查看wifi的PID:0x148f, VID:0x3070
2. 搭建环境
(使用的是arm-linux-gcc 4.3.2,内核为:linux 3.4.2)
1) 内核源码打补丁
在终端执行以下命令:
# tar xjf linux-3.4.2.tar.bz2
# cd linux-3.4.2
# patch -p1 < ../linux-3.4.2_camera_jz2440.patch
# cp config_ok .config
2) 配置内核
进入内核目录,根据网卡的VID/PID确定使用哪一个源码,搜索usb-wifi的 0x3070:
# cd /work/system/linux-3.4.2/drivers/net/wireless
# grep "0x3070" * -nR
进入到对应目录/drivers/net/wireless/rt2x00的Makefile:obj-$(CONFIG_RT2800USB) += rt2800usb.o, 可知需要配置项:CONFIG_RT2800USB。
查看对应的Kconfig文件:
config RT2800USB
tristate "Ralink rt27xx/rt28xx/rt30xx (USB) support"
depends on USB
select RT2800_LIB
select RT2X00_LIB_USB
select RT2X00_LIB_FIRMWARE
select RT2X00_LIB_CRYPTO
select CRC_CCITT
---help---
This adds support for rt27xx/rt28xx/rt30xx wireless chipset family.
Supported chips: RT2770, RT2870 & RT3070, RT3071 & RT3072
When compiled as a module, this driver will be called "rt2800usb.ko".
因此,可知CONFIG_RT2800USB在make menuconfig配置界面的字符提示为:"Ralink rt27xx/rt28xx/rt30xx (USB) support" ,执行make menuconfig,搜索 /RT2800USB

根据目录进行配置成模块,然后对依赖项搜索,配置:
│ Symbol: RT2X00 [=m]
│ Type : tristate
│ Prompt: Ralink driver support
│ Defined at drivers/net/wireless/rt2x00/Kconfig:1
│ Depends on: NETDEVICES [=y] && WLAN [=y] && MAC80211 [=y]
│ Location:
│ -> Device Drivers
│ -> Network device support (NETDEVICES [=y])
│ -> Wireless LAN (WLAN [=y])
以此类推,对其依赖项进行配置。
还有一项: Library routines --->
{*} CRC-CCITT functions
即:

3)编译内核:
# make uImage
4) 编译模块:
# make modules
5) 拷贝这生成的四个文.ko文件到nfs文件系统目录:
# ls *.ko
# cp *.ko /work/nfs_root/fs_mini_mdev_new/lib/
二、 kernel和驱动在开发板运行
1. 将uImage烧写到开发板中,插上wifi执行lsusb查看设备是否存在。
uboot命令行(默认方式烧写):
set bootargs console=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.1.8:/work/nfs_root/fs_mini_mdev_new ip=192.168.1.17
set bootcmd 'nfs 32000000 192.168.7.124:/work/nfs_root/uImage; bootm 32000000'
save
boot
2. mount命令挂在文件目录,并加载编译的驱动模块:
insmod rt2x00lib.ko ...4个
注意:——> rt2870.bin固件需要拷贝到开发板 /lib/firmmware目录下
3. 启动网卡:ifconfig wlan0 up,并使用# ifconfig -a 命令查看网卡状态。
4. 为wlan0配置ip:
# ifconfig wlan0 192.168.73.6
注意:这里配置IP要根据后面的热点(或者使用DHCP工具自动配置)进行配置, eth0和wifi不在一个网段;
三、wifi模块的配置和使用
3.1 概念: 认证/加密
无线加密的多种方法,包括:WEP WPA TKIP EAP,他们之间的区别:
http://wenku.baidu.com/link?url=DlLntlD490hAeIIbE-CO4QfAzgUC-gOTA7FCwS_XanOJMFzkyhQrFIB38ULKCcQIVFyDqqSWNWyq5kVtYAoJKjjf9pmZLu17-hVQ922WeaG
例如:手机上WIFI热点有4种常用的"认证/加密":1) OPEN; 2)WEP;3) WPA(TKIP);4)WPA2(AES)
无线网络的配置需要安装以下工具:iw, wpa_supplicant,dhcp
3.2 iw 工具
旧工具iwconfig, iw是它的替代者, 可用于这2种"认证/加密": OPEN, WEP
3.2.1 编译和安装
a. 依赖库libnl安装
-> tar xzf libnl-3.2.23.tar.gz
-> cd libnl-3.2.23/
-> ./configure --host=arm-linux --prefix=$PWD/tmp //配置编译目录为当前目录下的/tmp
编译出现问题,方法:修改 lib/addr.c 添加宏(宏来自内核源码include/linux/socket.h)
-> make
-> make install
拷贝库文件和头文件到arm-linux-gcc的路径目录下,用于后面的编译iw工具:
把编译出来的头文件应该放入:/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include(注意程序v里报错时,是需要直接拷贝netlink/)
-> cd tmp/include/libnl3
-> sudo cp netlink -rf /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
把编译出来的库文件应该放入:/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
把编译出来的库文件应该放入NFS文件系统的lib目录:/work/nfs_root/fs_mini_mdev_new/lib
b.安装iw
-> tar xjf iw-3.11.tar.bz2
-> cd iw-3.11/
修改Makefile:
CC = "arm-linux-gcc"
NL3xFOUND := Y
#LIBS += $(shell $(PKG_CONFIG) --libs $(NLLIBNAME))
#CFLAGS += $(shell $(PKG_CONFIG) --cflags $(NLLIBNAME))
在info.c的代码前面添加
#define htole16(X) (((((uint16_t)(X)) << 8) | ((uint16_t)(X) >> 8)) & 0xffff)
将生成的iw工具拷贝到开发板;
3.2.2 iw使用:
iw list // 列出WIFI网卡的性能
ifconfig wlan0 up // ifconfig wlan0 down
iw dev wlan0 scan // 扫描WIFI AP
iw wlan0 connect vivo // 连接到WIFI AP:vivo (open)
iw wlan0 connect vivo keys d:0:baiwenwang123 // 连接到WIFI AP:vivo (WEP) d: default, 0: 第0个密码
iw dev wlan0 link查看连接状态
ifconfig wlan0 192.168.1.55(配置前,可用电脑链接vivo热点,并在终端上查看ip网段)
ping 192.168.1.1
iw wlan0 disconnect
3.3. wpa_supplicant安装: 可用于上述4种"认证/加密"
a. 编译依赖libopenssl
-> tar xzf openssl-1.0.1d.tar.gz
-> cd openssl-1.0.1d/
-> ./config shared no-asm --prefix=$PWD/tmp
修改Makefile:
CC= arm-linux-gcc
AR= arm-linux-ar $(ARFLAGS) r
RANLIB= arm-linux-ranlib
NM= arm-linux-nm
MAKEDEPPROG= arm-linux-gcc
-> make
-> make install 把编译出来的头文件应该放入:/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
把编译出来的库文件应该放入:/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
把编译出来的库文件应该放入NFS文件系统的lib目录:/work/nfs_root/fs_mini_mdev_new/lib(需要拷贝到开发板的)
b. 安装wpa_supplicant
-> tar xzf wpa_supplicant-2.0.tar.gz
-> cd wpa_supplicant-2.0/wpa_supplicant/
-> cp defconfig .config
修改.config加上一行:
CONFIG_LIBNL32=y
修改Makefile:
CC=arm-linux-gcc
-> make
-> make DESTDIR=$PWD/tmp install //安装到当前下目录的tmp目录下
c.wpa_supplicant使用:
将编译出的工具wpa_supplicant和wpa_cli拷贝到开发板的/bin/目录下,并修改执行权限
-> mkdir -p /var/run/wpa_supplicant
4种模式的使用:(需要修改并拷贝/work/netwoktool/wpa_supplicant-2.0/wpa_supplicant/examples下的.conf配置文件,并拷贝到开发板的/etc/目录下)
① OPEN
ifconfig wlan0 up
wpa_supplicant -B -c/etc/plaintext.conf -iwlan0
wpa_cli -iwlan0 status // 查看状态
ifconfig wlan0 192.168.1.55(和iw的ip配置方法相同)
ping 192.168.1.1
配置文件内容为:
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="hello" //wifi ap的名字
key_mgmt=NONE
}
② WEP/WEP
wpa_supplicant -B -c/etc/wep.conf -iwlan0
wpa_cli -iwlan0 status // 查看状态
ifconfig wlan0 192.168.1.55
ping 192.168.1.1
配置文件:
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="hello"
key_mgmt=NONE
wep_key0="12345678" //密码
wep_tx_keyidx=0
}
③WPA(TKIP)
wpa_supplicant -B -c/etc/wpa-psk-tkip.conf -iwlan0
wpa_cli -iwlan0 status // 查看状态
ifconfig wlan0 192.168.1.55
ping 192.168.1.1
配置文件
ctrl_interface=/var/run/wpa_supplicant # 一个目录,用于wpa_supplicant和wpa_cli的socket通信
network={
ssid="hello"
proto=WPA # proto: list of accepted protocols, 可取WPA,RSN
# If not set, this defaults to: WPA RSN
key_mgmt=WPA-PSK # 认证方式
# If not set, this defaults to: WPA-PSK WPA-EAP
pairwise=TKIP # If not set, this defaults to: CCMP TKIP
group=TKIP # If not set, this defaults to: CCMP TKIP WEP104 WEP40
psk="12345678"
}
④ WPA2(AES)
wpa_supplicant -B -c/etc/wpa_wpa2.conf -iwlan0
wpa_cli -iwlan0 status // 查看状态
ifconfig wlan0 192.168.1.55
ping 192.168.1.1
配置文件:
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="hello"
psk="12345678"
}
注意: wpa_cli可工作于"命令模式"和"交互模式"
⑤ 配置文件里设置多个无线网络
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="hello"
psk="12345678"
}
network={
ssid="word"
psk="12345678"
}
⑥ 访问外网:
修改/etc/resolv.conf添加DNS:(根据ap的网段配置)
nameserver 192.168.1.1
设置网关:
route add default gw 192.168.1.1
3.4. dhcp : 使得WIFI网卡动态获取IP
a. 编译、安装
-> tar xzf dhcp-4.2.5-P1.tar.gz
-> cd dhcp-4.2.5-P1
-> ./configure --host=arm-linux ac_cv_file__dev_random=yes
-> cd bind
修改Makefile:
-> ./configure BUILD_CC=gcc ac_cv_file__dev_random=yes --host=arm-linux --disable-kqueue
-> tar xzf bind.tar.gz
-> cd bind-9.8.4-P2
修改 lib/export/dns/Makefile.in
gen: ${srcdir}/gen.c
${CC} ${ALL_CFLAGS} ${LDFLAGS} -o $@ ${srcdir}/gen.c ${LIBS}
改为
gen: ${srcdir}/gen.c
${BUILD_CC} ${ALL_CFLAGS} ${LDFLAGS} -o $@ ${srcdir}/gen.c ${LIBS}
-> cd ../..
-> make DESTDIR=$PWD/tmp install
把文件复制到挂载的文件目录下:
sudo cp bin/* /work/nfs_root/fs_mini_mdev_new/bin/
sudo cp sbin/* /work/nfs_root/fs_mini_mdev_new/sbin/
sudo cp etc/dhclient.conf.example //work/nfs_root/fs_mini_mdev_new/etc/dhclient.conf
sudo cp etc/dhcpd.conf.example /work/nfs_root/fs_mini_mdev_new/etc/dhcpd.conf
sudo cp client/scripts/linux /work/nfs_root/fs_mini_mdev_new/etc/dhclient-script
chmod +x /work/nfs_root/fs_mini_mdev_new/etc/dhclient-script
并修改
#!/bin/bash
改为
#!/bin/sh //arm平台需要用sh
b. dhcp的使用:
# insmod 加载4个.ko模块
# mkdir -p /var/db
# ifconfig wlan0 up
# wpa_supplicant -B -c/etc/wpa2-eap-ccmp.conf -i wlan0
# cp mnt/fs_mini_mdev_new/dhcp etc/dhclient-script /sbin/
# chmod 777 /sbin/dhclient-script
# dhclient -d wlan0
# route 查看网关
# cat /etc/resolv.conf 查看DNS
3.5 一接入WIFI网卡,就自动执行wpa_supplicant等
热拔插配置文件:
$ vi /etc/mdev.conf
wlan0 0:0 777 * /sbin/auto_wifi.sh
$ vi /sbin/auto_wifi.sh
#!/bin/sh
if [ $ACTION = "add" ];
then
wpa_supplicant -B -c/etc/wpa_wpa2.conf -iwlan0
wpa_cli -a/sbin/wpa_action.sh -B
else
killall wpa_supplicant
killall wpa_cli
killall dhclient
fi
$ chmod +x /sbin/auto_wifi.sh
一连接上WIFI AP, 就自动执行dhclient
创建一脚本wpa_action.sh:
$ vi /sbin/wpa_action.sh
#!/bin/sh
IFNAME=$1 //wlan0
CMD=$2
if [ "$CMD" = "CONNECTED" ]; then
echo connect $IFNAME, dhclient for it > /dev/console
dhclient -d $IFNAME
fi
if [ "$CMD" = "DISCONNECTED" ]; then
echo disconnect $IFNAME, kill dhclient for it > /dev/console
killall dhclient
fi
运行:
$ chmod +x /sbin/wpa_action.sh
$ wpa_cli -a/sbin/wpa_action.sh -B 后台
关闭和打开命令:
$ wpa_cli -iwlan0 disconnect
$ wpa_cli -iwlan0 reconnect
ping外网:
$ ping baidu.com
四. 使用WIFI网卡的AP功能
4.1 下载源码
地址:http://w1.fi/hostapd/
4.2 编译、安装
# tar xzf hostapd-2.0.tar.gz
# cd hostapd-2.0/
# cd hostapd/
# cp defconfig .config
修改.config, 加一行:
CONFIG_LIBNL32=y
修改Makefile:
CC=arm-linux-gcc
# make
# make DESTDIR=$PWD/tmp install
把tmp/下生成的hostapd hostapd_cli复制到NFS的bin目录
4.3 hostapd使用
a. hostapd的配置文件: WPA/WPA2
# vi /etc/hostapd/myhostapd.conf
ctrl_interface=/var/run/hostapd
#change wlan0 to your wireless device
interface=wlan0
driver=nl80211
ssid=helloworld //ap名称
channel=1
# 认证/加密方式
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=3
wpa_passphrase=123456 //密码
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
把配置文件存为/etc/hostapd/myhostapd.conf
启动 hostapd:
# hostapd -B /etc/hostapd/myhostapd.conf
b. 启动 dhcpd
修改配置文件/etc/dhcpd.conf,添加:
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.100;
option domain-name-servers 192.168.1.1;
option routers 192.168.1.1;
}
创建空文件/var/db/dhcpd.leases:
--> /var/db/dhcpd.leases
--> ifconfig wlan0 192.168.1.1
--> dhcpd -cf /etc/dhcpd.conf wlan0
--> killall hostapd 关闭热点
4.3.1 OPEN方式的配置文件
# vi /etc/hostapd/myhostapd.conf
ctrl_interface=/var/run/hostapd
#change wlan0 to your wireless device
interface=wlan0
driver=nl80211
ssid=Hello word
channel=1
# 认证/加密方式
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
4.3.2 WEP方式的配置文件
# vi /etc/hostapd/myhostapd.conf
ctrl_interface=/var/run/hostapd
#change wlan0 to your wireless device
interface=wlan0
driver=nl80211
ssid==Hello word
channel=1
# 认证/加密方式
macaddr_acl=0
auth_algs=2
ignore_broadcast_ssid=0
wep_key0="12345678"
wep_default_key=0
4.3.3 修改/etc/mdev.conf自动启动AP模式
vi /etc/mdev.conf
wlan0 0:0 777 * /sbin/auto_wifi_ap.sh
# vi /sbin/auto_wifi_ap.sh
#!/bin/sh
if [ $ACTION = "add" ];
then
hostapd -B /etc/hostapd/myhostapd.conf
ifconfig wlan0 192.168.1.1
dhcpd -cf /etc/dhcpd.conf wlan0
else
killall hostapd
killall dhcpd
fi
3.1 wifi网卡RT3070在S3C2440的移植和使用的更多相关文章
- 34、JZ2440上WIFI网卡使用
:http://wireless.kernel.org在这个网站上的document中有下面说有内容的介绍 1. 准备工作(虚拟机,开发板)及配置内核选择WIFI驱动1.1 选型:确定网卡的VID,P ...
- 使用wifi网卡笔记5---AP模式
使用WIFI网卡的AP功能 1.下载源码 hostapd: http://w1.fi/hostapd/ 2.编译.安装(hostapd依赖于libnl库,需要编译.安装此库) tar xzf host ...
- 在单板上使用WIFI网卡的固件问题
(在单板上使用WIFI网卡的固件问题)(我的wifi网卡是RT3070) (一般买的网卡说是支持LINUX免驱的话,那么在/lib/firmware/ 下一定有相应的固件) 我将USB网卡接入UBUN ...
- 使用WIFI网卡的AP功能
前几篇博客中,wifi无线网卡都工作于STA模式,那么它能否工作于AP模式.本篇博客就研究使wifi 无线网卡工作于AP模式.使用一个应用程序hostapd,关于它的介绍可以去此网站https://w ...
- S5PV210 移植无线wifi网卡 MT7601
一.准备工作 1.MT7601驱动下载 点击下载 2.插入usb WiFi 启动开发板linux,lsusb查看usb驱动 Bus 001 Device 003: ID 148f:7601看到的是该驱 ...
- 不止是联网!教你玩转PC自带Wi-Fi网卡
前言:Wi-Fi对于现在的智能手机来说已经是再熟悉不过的配置了,而主板自带Wi-Fi网卡的设计也越来越普及,但有些玩家可能思维还停留在“Wi-Fi网卡 = 连无线网络用的网卡,我用有线就不需要”的层次 ...
- 使用wifi网卡笔记4---工具dhcp及全自动使用wifi
dhcp : 使得WIFI网卡动态获取IP ·1.源码获取 输入dh看有哪些应用程序,输入dhclient -v查看一下相关信息,源码获取的网址 2.开发环境配置 解压 tar xzf dhcp-4. ...
- 使用wifi网卡笔记2----概念及工具iw(STA模式)
1.认证和加密的概念 (1)概念 (2)阶段划分 初级版本:认证不需要密码, 传输不需要加密 认证不需要密码, 传输需要加密(用WEP算法) 认证需要密码(用WEP算法), 传输需要加密(用WEP算法 ...
- 使用wifi网卡笔记1----网卡选型、开发环境搭建、内核配置
1.wifi的STA模式和AP模式 Ap(Access Point)模式指的是可以将网卡设置为路由器用来共享流量或有线网络给别人使用, sta模式指的是当做网卡连接路由器上网 (1):AP也就是无线接 ...
随机推荐
- 【系统】在windows中追加/删除虚拟打印机
由于项目需要在windwos系统中添加多台虚拟打印机(能够正常打印出纸),查找了一下系统函数. 使用 rundll32 printui.dll,PrintUIEntry,在CMD中运行,在弹出框中得到 ...
- TCP、UDP、Socket 通信(原)
说明:本随笔主要演示自己给自己发送消息例子,分别使用了TCP协议.UDP协议以及socket套接字通信.使用socket套接字了模拟TCP.UDP通信实现原理.其中有些源码都来自<C#高级编程 ...
- 转 C++11 并发指南std::condition_variable详解
之前看过,但是一直没有怎么用就忘了,转一篇别人的文字记录下来 本文将介绍 C++11 标准中 <condition_variable> 头文件里面的类和相关函数. <conditio ...
- 阅读HandlerInterceptor接口源码的理解
一.阅读接口类注释 我先理解的方法,方法都看懂了类注释自然而然明白了.所以此处略. 二.阅读preHandle()方法注释 Intercept the execution of a handler. ...
- [原创] 腾讯RTX二次开发相关的一些注意事项
在企业即时通信方面,腾讯的RTX在国内的占有率应该是很高的 所以,就避免不了要与其他系统进行消息集成 腾讯为此提供了二次开发的工具包,支持JAVA.C#.VB等多种开发语言 但是,目前为止,腾讯官方提 ...
- PHP基础系列(一) PHP字符串相关的函数分类整理
PHP提供了非常丰富的自带函数,有人说PHP是一个大的函数库,在某种程度上我是非常认同这种观点的,这个也是PHP非常容易上手的原因之一.在使用PHP编程的时候,需要实现某一功能的时候,如果说php自带 ...
- caffe 学习(3)——Layer Catalogue
layer是建模和计算的基本单元. caffe的目录包含各种state-of-the-art model的layers. 为了创建一个caffe model,我们需要定义模型架构在一个protocol ...
- 如何遍历Map操作总结
Map<Integer, String> map = new HashMap<Integer, String>(); map.put(1, "123"); ...
- Java 分支结构
Java 分支结构 - if...else/switch 顺序结构只能顺序执行,不能进行判断和选择,因此需要分支结构. Java 有两种分支结构: if 语句 switch 语句 if 语句 一个 i ...
- Mysql不同表的同名字段索引名可以相同
mysql中不同表的相同字段索引是可以重名的,因为索引文件一表一个: 命名规则: 普通索引:idx_字段名 唯一索引:ux_字段名