Linux之USB无线网卡开发(二)

目录

使用WIFI网卡利用wpa_supplicant(STA模式)

1、编译过程

2、使用wpa_supplicant

使用WIFI网卡利用dhcp并且自动使用wifi

1、编译过程

2、使用

3、接上网卡自动连接AP并设置IP

使用WIFI网卡的AP功能

1、编译安装

2、使用

3、修改hostapd配置文件实现其他方式

4、修改/etc/mdev.conf自动启动AP模式


使用WIFI网卡利用wpa_supplicant(STA模式)

对于我们的ARM/手机一般是supplicant(请求者,要访问网络的设备),而AP在术语上是authentic(客服端和认证服务器的中间设备,在客户端和认证服务器之间传递信息),服务器术语上是Authentic Server(对supplicant进行实际身份验证的设备,通常是远程认证拨号用户服务)

1、编译过程

在ubuntu编译和安装wpa_supplicant-2.0.tar.gz、openssl-1.0.1d.tar.gz过程,wpa_supplicant需要依赖于openssl因此需要先安装openssl,对于./config如果没有--prefix=$PWD/tmp也可以在make install的时候指定安装目录,没有指定交叉编译链,在配置的时候修改Makefile,定义了no-asm不使用汇编,里面的汇编是x86平台的,在这里可以根据help信息得知,shared指定将库编译为动态库

tar xzf openssl-1.0.1d.tar.gz
cd openssl-1.0.1d/
./config shared no-asm --prefix=$PWD/tmp 

修改Makefile,编译出错提示-m64的问题,这里没有指定ARCH=arm,直接用交叉编译,因此在Makefile中可以把-m64去掉

CC= arm-linux-gcc
AR= arm-linux-ar $(ARFLAGS) r   //打包命令
RANLIB= arm-linux-ranlib
NM= arm-linux-nm
MAKEDEPPROG= arm-linux-gcc

安装,将头文件和库放入编译器中,将需要的库放入nfs挂载的文件系统中

把编译出来的头文件应该放入:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
sudo cp * -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
sudo cp * -rf -d /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib

把编译出来的库文件应该放入NFS文件系统的lib目录:
sudo cp *.so* -d /work/nfs_root/fs_mini_mdev_new/lib

接下来编译wpa_supplicant,可以参考https://wireless.wiki.kernel.org/en/users/documentation/wpa_supplicant,这里直接使用它的默认配置,修改Makefile将编译器修改为arm-linux-gcc

tar xzf wpa_supplicant-2.0.tar.gz 
cd wpa_supplicant-2.0/wpa_supplicant/
cp defconfig .config 

修改Makefile:
CC=arm-linux-gcc 

然后进行make编译,提示了cannot find -lnl,在wpa_supplicant目录中搜索"lnl"如下,在src/drivers/drivers.mak中31行提示说如果定义了CONFIG_LIBNL32就会去使用lnl-3

src/drivers/drivers.mak:31:  DRV_LIBS += -lnl-3
src/drivers/drivers.mak:32:  DRV_LIBS += -lnl-genl-3
src/drivers/drivers.mak:36:    DRV_LIBS += -lnl-tiny
src/drivers/drivers.mak:38:    DRV_LIBS += -lnl
src/drivers/drivers.mak:42:    DRV_LIBS += -lnl-genl
src/drivers/drivers.mak:148:  DRV_LIBS += -lnl-3
src/drivers/drivers.mak:149:  DRV_LIBS += -lnl-genl-3
src/drivers/drivers.mak:150:  DRV_LIBS += -lnl-route-3
src/drivers/drivers.mak:154:    DRV_LIBS += -lnl-tiny
src/drivers/drivers.mak:156:    DRV_LIBS += -lnl
src/drivers/drivers.mak:160:    DRV_LIBS += -lnl-genl
src/drivers/drivers.mak:161:    DRV_LIBS += -lnl-route
src/drivers/drivers.mk:31:  DRV_LIBS += -lnl-3

因此我们修改.config直接加上CONFIG_LIBNL32=y,再进行make就没有问题了,再执行,将安装路径放在tmp中,并将生成的执行程序拷贝到挂载nfs的开发板上去

make DESTDIR=$PWD/tmp install

cp * /work/nfs_root/fs_mini_mdev_new/bin/

2、使用wpa_supplicant

使用的时候,在wpa的说明文档中有解释需要先用哪个配置文件,在wpa目录中搜索.conf,其中可以参考wpa_supplicant.conf,里面有详细说明,这里来参考examples里面的配置文件

./wpa_supplicant.conf
./examples/openCryptoki.conf
./examples/plaintext.conf
./examples/wpa-psk-tkip.conf
./examples/wep.conf
./examples/wpa2-eap-ccmp.conf
./examples/udhcpd-p2p.conf
./examples/ieee8021x.conf
./dbus/dbus-wpa_supplicant.conf
./wpa_supplicant_template.conf
  • open模式
wpa_supplicant -B -c/etc/plaintext.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="dswei"
        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="dswei"
        key_mgmt=NONE
        wep_key0="baiwenwang123"
        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="dswei"
        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="baiwenwang12"
}
  • WPA2(AES)模式,这种模式与WPA(TKIP)模式共用一种配置文件,看上一种方式,在注释中包含了默认配置,例如如果不设置proto,则为WPA RSN模式即WPA2模式
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
network={
        ssid="dswei"
        psk="baiwenwang123"
}

wpa_cli可工作于"命令模式"和"交互模式",配置文件里设置多个network

ctrl_interface=/var/run/wpa_supplicant
network={
        ssid="dswei"
        psk="baiwenwang123"
}
network={
        ssid="Programer"
        psk="baiwenwang"
}

访问外网:修改/etc/resolv.conf添加DNS

nameserver 192.168.1.1                       //AP作为DNS
route add default gw 192.168.1.1             //设置网关

使用WIFI网卡利用dhcp并且自动使用wifi

1、编译过程

编译、安装dhcp-4.2.5-P1.tar.gz,解压之后发现有configure,常用命令执行./configure --host=arm-linux,发现提示/dev/random不存在,在目录中搜索搜索/dev/random,在configure的7688行中提示ac_cv_file__dev_random不是空的话就不会打印出错误,然后再make

./configure --host=arm-linux ac_cv_file__dev_random=yes
make

make后同样会出现错误,在bind/bind-9.8.4-P2/lib/export/isc中file app_api.o等编译出来的是给PC机用的,修改Makefile

./configure BUILD_CC=gcc ac_cv_file__dev_random=yes --host=arm-linux --disable-kqueue  //55行

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
make DESTDIR=$PWD/tmp install

安装,把文件复制到开发板挂载的NFS文件系统

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

执行wpa连接上AP后,执行dhclient -d wlan0,提示需要dhclient-script,在解压的在dhcp目录下,搜索dhclient-script,并将其复制到NFS中

sudo cp client/scripts/linux /work/nfs_root/fs_mini_mdev_new/etc/dhclient-script
sudo chmod +x /work/nfs_root/fs_mini_mdev_new/etc/dhclient-script
dhclient -d wlan0
在这里依然提示没有dhclient-script
sudo vi /work/nfs_root/fs_mini_mdev_new/etc/dhclient-script
并修改
#!/bin/bash
改为
#!/bin/sh

2、使用

执行dhclient -d wlan0,加上-d参数可以打印出信息,执行ifconfig可以看到自动配置IP,执行route可以看到自动配置网关,执行cat /etc/resolv.conf可以看到自动配置域名服务器

3、接上网卡自动连接AP并设置IP

需要参考热拔插:Linux驱动之热拔插,一接入WIFI网卡,就自动执行wpa_supplicant等

cat /etc/mdev.conf 
wlan0 0:0 777 * /sbin/auto_wifi.sh

cat /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_cli都会执行/sbin/wpa_action.sh,并加上执行权限

创建一脚本:    
cat /sbin/wpa_action.sh 
#!/bin/sh
IFNAME=$1   //表示哪个网卡
CMD=$2      //动作CONNECTED或者DISCONNECTED
if [ "$CMD" = "CONNECTED" ]; then
   echo connect $IFNAME, dhclient for it > /dev/console
   dhclient $IFNAME
fi
if [ "$CMD" = "DISCONNECTED" ]; then
   echo disconnect $IFNAME, kill dhclient for it > /dev/console
   killall dhclient
fi

chmod +x /sbin/wpa_action.sh

使用WIFI网卡的AP功能

1、编译安装

需要hostapd来搭建AP,因此我们要安装hostapd,这里以hostapd-2.0.tar.gz为例

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目录中usr/local/bin把生成的hostapd、hostapd_cli复制到NFS的bin目录,在hostapd目录中可以找到hostapd.conf,里面的解释很全

2、使用

使用前需要写出配置文件,怎么写可以参考hostapd.conf的解释,这里写出一个自己的conf

ctrl_interface=/var/run/hostapd
#change wlan0 to your wireless device
interface=wlan0              //网卡                    
driver=nl80211               //驱动
ssid=S3C2440                 //AP名称
channel=1

# 认证/加密方式
macaddr_acl=0               //mac地址的过滤
auth_algs=1                 //来指定是用open还是wep,对于wpa和wpa2这个值必须设置为1
ignore_broadcast_ssid=0
wpa=3                       //bit0表示WPA bit1表示WPA2,这里为3表示AP两个都支持
wpa_passphrase=baiwenwang   //密码
wpa_key_mgmt=WPA-PSK        //密码不经过服务器
wpa_pairwise=TKIP           //WPA的加密方式        
rsn_pairwise=CCMP           //WPA2的加密方式

把配置文件存为/etc/myhostapd.conf,启动hostapd: 

hostapd -B /etc/myhostapd.conf

启动dhcpd来自动配置IP、DNS和路由等,修改配置文件/etc/dhcpd.conf,添加以下内容

subnet 192.168.1.0 netmask 255.255.255.0 {        //子网掩码               
  range 192.168.1.10 192.168.1.100;               //分配的IP地址的范围
  option domain-name-servers 192.168.1.1;         //DNS                  
  option routers 192.168.1.1;                     //路由                              
}  

创建/var/db/dhcpd.leases

> /var/db/dhcpd.leases

使用,手机连上AP后,由于IP分配是从192.168.1.10开始的,因此ping 192.168.1.10

ifconfig wlan0 192.168.1.1
dhcpd -cf /etc/dhcpd.conf wlan0
ping 192.168.1.10

可以通过hostapd_cli来查询hostapd,前提是需要ctrl_interface,这个接口需要在配置文件中定义,可以直接执行hostapd_cli,也可以加上命令执行,这里执行hostapd_cli --help可以知道,例如执行all_sta可以知道有哪些设备接入,设备的IP可以去上面创建的dhcpd.leases查找

/ # hostapd_cli --help
hostapd_cli: invalid option -- '-'
hostapd_cli v2.0
Copyright (c) 2004-2012, Jouni Malinen <j@w1.fi> and contributors

usage: hostapd_cli [-p<path>] [-i<ifname>] [-hvB] [-a<path>] \
                   [-G<ping interval>] [command..]

Options:
   -h           help (show this usage text)
   -v           shown version information
   -p<path>     path to find control sockets (default: /var/run/hostapd)
   -a<file>     run in daemon mode executing the action file based on events
                from hostapd
   -B           run a daemon in the background
   -i<ifname>   Interface to listen on (default: first interface found in the
                socket path)

Commands:
   mib                  get MIB variables (dot1x, dot11, radius)
   sta <addr>           get MIB variables for one station
   all_sta              get MIB variables for all stations
   new_sta <addr>       add a new station
   deauthenticate <addr>  deauthenticate a station
   disassociate <addr>  disassociate a station
   get_config           show current configuration
   help                 show this usage help
   interface [ifname]   show interfaces/select interface
   level <debug level>  change debug level
   license              show full hostapd_cli license
   quit                 exit hostapd_cli

3、修改hostapd配置文件实现其他方式

  • OPEN方式的配置文件
ctrl_interface=/var/run/hostapd
#change wlan0 to your wireless device
interface=wlan0
driver=nl80211
ssid=S3C2440
channel=1

# 认证/加密方式
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
  • WEP方式的配置文件
ctrl_interface=/var/run/hostapd
#change wlan0 to your wireless device
interface=wlan0
driver=nl80211
ssid=S3C2440
channel=1

# 认证/加密方式
macaddr_acl=0
auth_algs=2
ignore_broadcast_ssid=0
wep_key0="baiwenwang123"
wep_default_key=0

4、修改/etc/mdev.conf自动启动AP模式

cat /etc/mdev.conf 
wlan0 0:0 777 * /sbin/auto_wifi_ap.sh

cat /sbin/auto_wifi_ap.sh 
#!/bin/sh
if [ $ACTION = "add" ]; 
then
   hostapd -B /etc/myhostapd.conf
   ifconfig wlan0 192.168.1.1
   dhcpd -cf /etc/dhcpd.conf wlan0
else
   killall hostapd
   killall dhcpd
fi

Linux之USB无线网卡开发(一)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统下使用USB无线网卡的步骤如下: 1. 插入USB无线网卡:将无线网卡插入计算机的USB接口。一般情况下,Linux系统会自动检测并识别无线网卡。 2. 查看无线网卡:打开终端,并输入以下命令来查看系统是否已经正确识别无线网卡: ```shell lsusb ``` 这个命令会列出所有连接到计算机的USB设备,你应该能够在列表中找到你的无线网卡。 3. 安装驱动程序:如果系统无法自动识别无线网卡或者无法正常工作,你可能需要手动安装相应的驱动程序。首先,你需要确定你的无线网卡型号和制造商,然后在官方网站上找到对应的Linux驱动程序。下载后,按照驱动程序提供的安装指南进行安装。 4. 配置网络连接:一旦无线网卡被正确地识别和配置,你可以使用网络管理工具(如Network Manager或Wicd)来配置连接到无线网络。 - 网络管理工具通常提供图形界面,可以通过系统设置或应用程序菜单中找到。 - 在网络管理工具中,你可以搜索并找到可用的无线网络,并输入密码或其他身份验证信息进行连接。 5. 测试网络连接:完成配置后,你可以尝试连接到无线网络并测试网络连接是否正常。你可以打开浏览器,访问一个网页,或者使用ping命令测试网络连接。 注意:根据不同的无线网卡型号和Linux发行版,上述步骤可能会有所不同。如果遇到问题,建议查阅无线网卡的制造商网站或者Linux社区中的相关文档和讨论。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值