因为现在的无线wifi网络大多是wpa加密。所以需要移植wpa_supplicant工具。
一、下载源码
下载wpa_supplicant-0.7.3.tar.gz (openssl用到0.7.3提供的补丁)
#tar xvfz wpa_supplicant-0.7.3.tar.gz
下载
www.openssl.org/source/openssl-0.9.8e.tar.gz
#tar zxvf openssl-0.9.8e.tar.gz
二、编译openssl库
将wpa_supplicant中的补丁拷贝到openssl中
# cp wpa_supplicant-0.7.3/patches/openssl-0.9.8e-tls-extensions.patch openssl-0.9.8e/
#cd openssl-0.9.8e
#mkdir /usr/local/ssl
#vim Makefile
CC= arm-linux-gnu-gcc
AR= arm-linux-gnu-ar $(ARFLAGS) r
RANLIB= arm-linux-gnu-ranlib
INSTALLTOP=/usr/local/ssl
OPENSSLDIR=/usr/local/ssl
#make
#make install
在/usr/local/ssl目录下安装了ssl库
#ls /usr/local/ssl
#bin certs include lib man misc openssl.cnf private
后面编译wpa_supplicant要依赖openssl中的lib和include
碰到问题:NUMPRIMES没有定义
原因:bn_prime.h 内容为空
解决办法:进入crypto/bn目录运行:perl crypto/bn/bn_prime.pl >bn_prime.h
三、编译wpa_supplicant
进入wpa_supplicant-0.7.3.tar.gz解压生成的wpa_supplicant-0.7.3/wpa_supplicant目录中:
#cp defconfig .config
#vim .config
CC=arm-linux-gcc -L/usr/local/ssl/lib/
#CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc
CFLAGS += -I/usr/local/ssl/include
#CPPFLAGS += -I../src/include -I../../src/router/openssl/include
LIBS += -L/usr/local/ssl/lib
#make
经过编译后的wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicant和wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用wpa_cli来搜索、设置、和连接网络。
碰到问题: cannot find -lcrypto
Makefile增加LIBS_p += -L/usr/local/ssl/lib
编译生成wpa_supplicant、wpa_passphrase,将这两个文件拷贝到目标板的/bin/目录下。
在目标板中创建/etc/wpa_supplicant.conf文件,文件内容如下:
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="max" //填写无线网络的的用户名
key_mgmt=WPA-PSK
proto=WPA
pairwise=TKIP
group=TKIP
psk="1234567890" //填写密码
}
还有一种说法,说需要使用wpa_passphrase ssid名 密码 >> /etc/wpa_supplicant.conf来给密码加密,但我实际使用过程中发现并不需要这个,所以有朋友遇到拨号不上,可以使用这个加密一下密码试试,方法如下:
之后wpa_supplicant.conf中会添加以下内容,然后把最后面的经过加密的密码修改到上面去,再把下面的内容删掉!
network={
ssid="max"
#psk="1234567890"
psk=4b2bc7cbb3710e9ea43f09e8d57e8bdb3b2a2127af44960d73216c3612f6baba
}
如:
network={
ssid="max" //填写无线网络的的用户名
key_mgmt=WPA-PSK
proto=WPA
pairwise=TKIP
group=TKIP
psk=4b2bc7cbb3710e9ea43f09e8d57e8bdb3b2a2127af44960d73216c3612f6baba
#psk="1234567890" //填写密码
}
运行:wpa_supplicant -iwlan0 -c/etc/wpa_supplicant.conf
然后再:ifconfig wlan0 192.168.1.99 netmask 255.255.255.0
运行ping网关。
再然后,编辑/etc/network/interfaces:
pre-up wpa_supplicant -Bw -Dwext -i eth1 -c/etc/wpa_supplicant.conf
post-down killall -q wpa_supplicant
sudo /etc/init.d/networking restart
1,备份一下/etc/network/interfaces
cp /etc/network/interfaces /etc/network/interfaces_bak
2,下面是我的interfaces文件内容
- #auto eth0
- #iface eth0 inet static
- #address 192.168.1.118
- #gateway 192.168.1.1
- #netmask 255.255.255.0
-
- auto wlan0
- iface wlan0 inet static
- address 192.168.1.139
- gateway 192.168.1.1
- netmask 255.255.255.0
- wpa-ssid TP-LINK_196958
- wpa-psk ×××××
sudo vi /etc/network/interfaces
auto mlan0
iface mlan0 inet static
address 192.168.1.114
gateway 192.168.1.1
netmask 255.255.255.0
echo "nameserver 211.98.1.28">> /etc/resolv.conf
ifconfig eth0 192.168.22.23
route add default gw 192.168.22.1
ifconfig eth59 192.168.22.47 netmask 255.255.255.0 up
nameserver 202.106.0.20
route add default gw 192.168.22.1
Ubuntu操作系统安装完成后网络管理默认是用DHCP自动获取IP地址的,之前在自己住宿就一两台机使用反正也没啥差就懒得改为静态固定IP,但是最近在公司使用vm虚拟机下安装了台Ubuntu8.10玩一玩,有时基本使用SecureCRT软件SSH远程登陆使用,但是由于公司使用都是内部动态 IP地址,而且机器较多所以导致IP地址经常性更换,有点烦所以自己决定试图修改成使用静态IP,可是那个可恶的NetworkManager总是在重启后又变成默认的DHCP自动获取IP。。。故决定删除彻底NetworkManager
1 |
sudo apt-get –purge remove network-manager |
2 |
sudo apt-get –purge remove network-manager-gnome |
手动设置静态IP地址:编辑修改网络接口配置文件/etc/network/interfaces
1 |
sudo vim /etc/network/interfaces |
修改设置DNS服务器配置文件/etc/resolv.conf
1 |
sudo vim /etc/resolv.conf |
2 |
nameserver 202.101.103.54 |
3 |
nameserver 202.101.103.55 |
最后重启网络服务
1 |
sudo /etc/init.d/networking restart |
这样上网基本就没什么问题啦/// 如果你之前没有删除NetworkManager网络管理的话,重启后/etc/resolv.conf里面的配置文件又会被修改为
导致又是使用DHCP动态分配IP地址的。
Linux 手动无线网卡 WiFi 配置
发表于 2011年01月29日 | 分类: Linux |
12条评论
操作环境: ArchLinux Linux myhost 2.6.36-ARCH
硬件: USB 无线网卡 TL-WN821N
1. 安装 wireless_tools 和 madwifi
pacman -S wireless_tools madwifi
2. 查看网卡状态
lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse
Bus 001 Device 003: ID 0cf3:7015 Atheros Communications, Inc.
在USB接口001/003上检测到网卡。
iwconfig
lo no wireless extensions.
eth0 no wireless extensions.
wlan0 IEEE 802.11bgn ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=0 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
无线网卡为 wlan0
3. 激活网卡
ifconfig wlan0 up
因为我的网卡必需要先激活才能扫描,否则下一步scan会出现错误:wlan0 Interface doesn't support scanning.
4. 扫描网络
iwlist wlan0 scan
wlan0 Scan completed :
Cell 01 - Address: 54:E6:FC:22:E1:D2
Channel:1
Frequency:2.412 GHz (Channel 1)
Quality=53/70 Signal level=-57 dBm
Encryption key:on
ESSID:"TP-LINK_22E1D2"
Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s
9 Mb/s; 12 Mb/s; 18 Mb/s
Bit Rates:24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s
Mode:Master
Extra:tsf=000000292a41bd80
Extra: Last beacon: 960ms ago
IE: Unknown: 000E54502D4C494E4B5F323245314432
IE: Unknown: 010882848B960C121824
IE: Unknown: 030101
IE: IEEE 802.11i/WPA2 Version 1
Group Cipher : CCMP
Pairwise Ciphers (1) : CCMP
Authentication Suites (1) : PSK
IE: WPA Version 1
Group Cipher : CCMP
Pairwise Ciphers (1) : CCMP
Authentication Suites (1) : PSK
发现WPA2-PSK/WPA-PSK 加密网络 TP-LINK_22E1D2
因为加密方式为 WPA-PSK 所以得用 wpa_supplicant 而不能使用 iwconfig wlan0 key xxx 形式,iwconfig key方式适用于WEP。
5. 配置 wpa_supplicant
新建文件 /etc/my_wpa_supplicant.conf
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="TP-LINK_22E1D2"
psk="密码"
}
因为全部使用默认配置,所以配置文件非常简单。
6. 连接wlan0到网络,并以daemon方式运行
wpa_supplicant -B -i wlan0 -c /etc/my_wpa_supplicant.conf
-B Background 在后台以daemon 运行
-i interface
-c 配置文件
7. 设置IP地址
ifconfig wlan0 192.168.1.131
ifconfig 查看状态
wlan0 Link encap:Ethernet HWaddr 54:E6:FC:03:0D:6B
inet addr:192.168.1.131 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:95 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:32434 (31.6 Kb) TX bytes:576 (576.0 b)
8. 加入网关到路由
我的网关的是192.168.1.1
添加通过wlan0访问的网关
route add default gw 192.168.1.1 dev wlan0
route 查看route状态
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 wlan0
default 192.168.1.1 0.0.0.0 UG 0 0 0 wlan0
9. 设置完毕。
以后上线只需运行
wpa_supplicant -B -i wlan0 -c /etc/my_wpa_supplicant.conf
ifconfig wlan0 192.168.1.131
route add default gw 192.168.1.1 dev wlan0
即可
10. 相关命令
关闭连接
wpa_cli terminate
连接状态
wpa_cli status
题外话:无线网卡的自动配置
无线网卡的自动配置,可通过netcfg2,具体参见 ArchLinux Wiki Netcfg 一文,非常详细。
← Linux Chrome/Chromium 使用支付宝
今天整理发现一张昔日的编程光盘,被深深的雷到了
→
请问我的无线网络没有密码的话,第4步以后该如何做?
直接在/etc/network/interfaces加入3行
auto wlan0
iface wlan0 inet dhcp
wireless-essid my_essid
就可以了么?
会自动启用11N的模式么?
madwifi跟ndiswrapper两种方式,哪种更加稳定、节约资源呢?
如果手动的话 无密码为 5,6步并为
iwconfig wlan0 essid ESSID 比如 我的是 iwconfig wlan0 essid TP-LINK_22E1D2
如果有WEP密码则再加入 iwconfig wlan0 key PASSWORD
余下的从7步设置ip和route即可。
看你的interfaces配置应该是没问题的。可能再需要添加route的相关配置。比如
up route del default
up route add default gw 192.168.1.1 dev wlan0
ndiswrapper 没用过,不好说,
好不容易找到驱动了,TL-WN821N V3版的芯片是AR9271,之前一直以为是7010的,看到芯片信息0cf3 :7015,又看到有别人说是7010,就先入为主了,绕了弯路。这下既不用ndiswrapper,也不用madwifi了,用的是compat- wireless编译安装的Firmware。应该是最稳定的方案了吧,试用一段时间再看看。。。
参考了2篇文章:http://linuxwireless.org/en/users/Drivers/ath9k_htc
http://blog.sina.com.cn/s/blog_593c5b070100mcap.html
你好,我在Ubuntu下使用下,在用TL-WN821N,看到的芯片信息也是0cf3:7015。
不知道你现在用的情况怎么样?最后Firmware是用的7010还是9270?能不能把具体过程再详细点介绍一下?谢谢。
请问哪步的结果和文章中显示的不一样?
呵呵,搞定了。
我是用了一个图形工具装了ath92_htc,里面带了ar9271和ar7010的firmware。
可以很方便地用网络管理器管理无线连接。
好。
你好!有没有试过一台设备有两个网络设备,一个是wifi ,一个是eth0(有线设备),并且它们都是处于同一个局域网内的,如何保证wifi和ethO不相互影响,比如说,当eth0异常时,我们仍然可以ping得wifi地址?
没有很好的答案。思路是eth down时触发wlan up。
樓上的意思是想wlan0和eth0不同IP是能夠使用的,
如果你想要使用同一個IP的話可以寫個腳本獲取eth0的連接狀態,如果掉線後就開啓wlan0,並且設置IP,不過當切換時會有個間隔
这个方法好。