RTL8188无线网卡AP功能的开发过程

本编文章是记录了RTL8188无线网卡AP功能完整开发过程。


一、使用环境

内核:linux4.4.167

Ubuntu:16.04

 

二、前期的资料搜索

使用RTL8188无线USB网卡,需要使用到8188驱动,开启热点工具hostapd,自动分配ip工具dhcp。因为我使用的开发板上内核已经自带有8188的驱动,所以只需要安装工具。

 

三、移植hostapd,搭建无线热点

3.1 先安装依赖libnl库

1. apt-get install libnl-3-200(开发板上已经存在)

2. apt-get install libnl-3-dev

3. apt-get install libnl-genl-3-dev

3.2 安装hostapd

1. sudo apt-get install hostapd(如果下载失败,sudo apt-get update)

3.3 使用hostapd

1. 修改配置文件,用以下内容替换:sudo vi /etc/hostapd.conf

##### hostapd configuration file##############################################

interface=test_ap                #网卡名称
ctrl_interface=/var/run/hostapd
ssid=test_ap                     #热点wifi名称
channel=6
wpa=2                            #0:无密码 2:使用WPA2PSK-CCMP+TKIP加密
wpa_passphrase=12345678          #密码

当时我是再window系统编辑了文档,然后再拷贝到开发板上的,发现了wifi多了换行符,和密码输入对了也报密码错误。后面发现是因为window编辑的文档换行符是/r/n的,而linux下的换行符只有/n,所以调用命令sed -i 's/\r$//' /etc/hostapd.conf掉。

2. 测试运行开启热点:sudo hostapd /etc/hostapd.conf

3. 测试结果,电脑能搜索到热点并成功连接。

 

四、移植dhcp,连接热点自动分配ip

我这里的热点ip使用2网段。

1. 安装:sudo apt-get install isc-dhcp-server(如果下载失败,sudo apt-get update)

2. 编写配置文件:sudo vi /etc/dhcp/dhcpd.conf,在文件末尾添加

subnet 192.168.2.0 netmask 255.255.255.0

{
range 192.168.2.10 192.168.2.200;        #ip池,从2.10到2.200自动分配
option routers 192.168.2.1;
option domain-name-servers 180.76.76.76; #180.76.76.76是百度公共DNS服务器
}

因为我的热点不连接到外网,所以DNS就随意了。

3. 测试使用:sudo dhcpd -cf /etc/dhcp/dhcpd.conf robot_ap

4. 测试成功,连接热点后,电脑设置为自动获取ip,成功分配到ip地址。

 

五、固定网卡名称

我的开发板8188驱动会自动以wlx+mac地址为名称,为了统一网卡的名称,需要首先固定网卡的名称。

5.1 修改网卡名称规则

1. sudo vi /etc/default/grub

2. 修改为GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"

4. 但是发现我的开发版上并没有这个文件,我就新增了文件并插入了上面那一条。

5. 更新:grub2-mkconfig -o /boot/grub2/grub.cfg

6. 再次出现了无grub2-mkconfig命令。

7. 更新获取:sudo apt-get install grup,提示废弃了,grub2-common取代。

8. 更新获取:sudo apt-get install grub2-common,安装后,使用上面命令更新。

9. 重启,问题没有解决。

5.2 写一个shell脚本来更网卡名称

#!/bin/bash

net_name=`ifconfig|grep -i wlx`
net_name=${net_name:0-19:17}
ip link set net_name name test_ap

这个方法问题是,改名需要先ip link set wlx72f11c4947ab down,但是发现只要关闭这个网卡,就会出现卡死系统现象,通过dmesg查看到,驱动报了个空指针错误。这就难受了,改驱动并不是特别好的方法,因为涉及到机器需要重新烧录的问题。这个方法同样被放弃。

5.3 使用udev。

1. 新增规则:sudo vi /etc/udev/rules.d/70-persistent-net.rules

2. 新增一条:

SUBSYSTEM=="net", ACTION=="add", SUBSYSTEMS=="usb", KERNEL=="wlan[0-9]", NAME="test_ap"

3. 这个方法成功了,具体过程也很多的麻烦,首先实现网卡有两种情况,一种是先插入网卡,再启动开发板;另一种是先启动开发板,再插入网卡。导致了网卡名称可能为wlan0或wlan1,这样udev规则里面需要找多一个不同的属性。

udevadm  info  --query=path  --path=/sys/class/net/wlx72f11c4947ab  --attribute
udevadm  info  --query=path  --path=/sys/class/net/wlan0  --attribute

4. 通过使用上面命令查找到两个网卡的不同属性,试过了好几个属性,有些不是特别好使,最后使用了SUBSYSTEMS=="usb"这个属性。

5. 这个方法能够实现了网卡更改名的问题。

 

六、自动运行启动热点脚本

6.1 使用medv规则

1. 新增:sudo /etc/mdev.conf

2. 插入:test_ap 0:0 777 * /sbin/auto_wifi_ap.sh

3. 编写脚本:vi /sbin/auto_wifi_ap.sh

#!/bin/sh

if [ $ACTION = "add" ];
then
   ifconfig test_ap 192.168.2.2
   hostapd -B /etc/hostapd.conf
   dhcpd -cf /etc/dhcp/dhcpd.conf test_ap
else
   killall hostapd
   killall dhcpd
fi

4. 修改权限:sudo chmod 777 /etc/auto_wifi_ap.sh

5. 在使用脚本使用同样出现了换行符的问题,使用命令去除。

6. 执行后出现了错误:[: ==: unexpected operator

7. 重新修改vi /sbin/auto_wifi_ap.sh,把#!/bin/sh改为#!/bin/bash后解决。

8. 现在插入网卡,发现根本不执行这个脚本。后面网上找了很久,这个功能好像是busybox的,而我这个开发板用的不是busybox,这个方法失败。

6.2 使用udev规则下的RUN

1. 修改文件:sudo vi /etc/udev/rules.d/70-persistent-net.rules

SUBSYSTEM=="net", ACTION=="add", SUBSYSTEMS=="usb", KERNEL=="wlan[0-9]", NAME="test_ap", RUN="/sbin/auto_wifi_ap.sh"

2. 发现了只要一插入网卡就会死机的现象,dmesg查看了信息,发现网卡自己关闭了,上面说到网卡关闭会导致死机的情况。因为怀疑是shell脚本里开启热点的命令导致,首先先去掉开启热点命令和开启dhcp功能的语句,只留下分配ip语句。

3. 把vi /sbin/auto_wifi_ap.sh改成了

#!/bin/sh

if [ $ACTION = "add" ];
then
   ifconfig test_ap 192.168.2.2
else
   killall hostapd
   killall dhcpd
fi

4. 改了之后死机的现象不出现了,但是又出现了另一个问题,ip设置了之后一瞬间,又改回去了。导致问题的猜想是:是因为执行这个程序时候设备还未完全启动,也是上面死机的原因也符合这个猜想,所以又再ifconfig test_ap 192.168.2.2前面加了sleep 60,先测试一下是否这个问题导致的。

5. 问题并没有解决。但是发现发现了奇怪现象,本来初始化很快的,现在变成了很慢,然后确定是了因为加上了sleep 60导致。猜想到,udev的RUN会在设备添加到系统的时候执行(也就是插入设备),再RUN执行完成后再继续初始化。所以用这个方法是不行的了。

后面网上的udev中文手册找到了一句话:注意,禁止在 udev 规则中运行访问网络、或挂载/卸载文件系统的程序, 因为在 systemd-udevd.service 中强制使用了默认沙盒机制。注意,禁止在 udev 规则中运行访问网络、或挂载/卸载文件系统的程序, 因为在 systemd-udevd.service 中强制使用了默认沙盒机制。

我也没有继续深入探索,不确定是否正确。

6.3 使用shell脚本

1. 写一个脚本在后台一直运行,用来检测是否已经网卡已经插入。可以使用python脚本,我选择了shell来实现,编写脚本:vi /sbin/auto_wifi_ap.sh

#!/bin/sh

while true
do
       name=$(ifconfig|grep -i test_ap)        #ifconfig命令检测到了,说明网卡已经初始化完成,循环检测是否存在test_ap的网卡
       name=${name:0:8}                        #截取为test_ap

       if [ "$name" == "robot_ap" ]            #如果存在,则执行开启热点
       then
              sudo ifconfig robot_ap 192.168.2.2
              sudo hostapd -B /etc/hostapd.conf
              sudo dhcpd -cf /etc/dhcp/dhcpd.conf robot_ap
              break                            #退出脚本
       else
              sleep 5
       fi
done

2. 需要加入到开机启动,vi .bashrc

3. 在最后加上/home/rpdzkj/auto_wifi_ap.sh &

4. 测试发现,需要登陆了用户才会执行脚本。搜索得到答案是因为这个脚本是用户环境变量,需要登陆了才会执行。

5. 换一个地方,加入到vi /etc/rc.local

6. 开头地方加上/home/rpdzkj/auto_wifi_ap.sh &

7. 测试成功了。

 

七、测试TCP

测试方法:编译简易的服务端程序,实现接收到的数据并发送回去。window下使用tcp测试工具作为客户端。连接wifi后,运行服务端程序,工具连接上服务器。进行下面的测试,查看工具发送和接收的总字节数是否一致,一致则认为无丢包。

7.1 进行单包数据测试(小于1460字节)

1. 在100ms间隔时间发送测试,结果为服务端无丢包现象,客户端接收返回的数据无丢包现象。

2. 在50ms间隔时间发送测试,结果为服务端无丢包现象,客户端接收返回的数据无丢包现象。

3. 在10ms间隔时间发送测试,结果为发送一段时间后,工具卡死,原因为工具问题导致。

7.2 进行多包数据测试(大于1460字节)

1. 在500ms间隔时间发送测试,结果为服务端无丢包现象,客户端接收返回的数据无丢包现象。

       2. 在200ms间隔时间发送测试,结果为服务端无丢包现象,客户端接收返回的数据无丢包现象。

3. 在100ms间隔时间发送测试,结果为发送一段时间后,工具卡死,原因为工具问题导致。

 

八、结论

考虑到工具问题无法进行更极限的时间间隔测试,需要更进一步的测试。由于从到实际情况考虑,一般不会过于发送太快,或者使用应答机制,一应一答的方式确保接收正常。

综合来看,信号强的情况下,通讯良好无丢包现象,可靠性高。至此,整个rtl8188的AP功能已经完成。

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: rtl8188eu无线网卡驱动是一款适用于Realtek rtl8188eu芯片的无线网卡驱动程序。rtl8188eu芯片是一种常用于笔记本电脑和台式机的无线网络解决方案,具有稳定的性能和快速的数据传输速度。 安装rtl8188eu无线网卡驱动是保证无线网络正常工作的关键步骤之一。首先,我们可以通过在Realtek官网上搜索rtl8188eu无线网卡驱动的最新版本来获取驱动程序。然后,我们可以下载该驱动程序并按照驱动程序附带的安装说明进行安装。安装过程大致包括解压缩驱动文件、运行安装程序、连接无线网卡等步骤。 安装完rtl8188eu无线网卡驱动后,我们需要对驱动程序进行设置和配置,以确保与我们的无线网络兼容且正常工作。通常情况下,我们可以通过系统设置或无线网络管理工具来完成这些配置。需要注意的是,在配置过程中,我们可能需要提供无线网络的名称(SSID)和密码等信息。 当配置完成后,我们就可以开始使用rtl8188eu无线网卡进行无线上网了。此时,我们可以打开我们的无线网络连接管理工具,搜索可用的无线网络,并选择我们要连接的网络。在成功连接到无线网络后,我们就可以正常使用无线网络进行各种在线活动了。 总的来说,rtl8188eu无线网卡驱动是保证我们的无线网络正常工作的必备程序。安装和配置过程相对简单,只要按照说明进行操作即可。有了稳定的无线网络连接,我们可以轻松享受互联网带来的便利和乐趣。 ### 回答2: rtl8188eu无线网卡驱动是一款用于支持rtl8188eu芯片的无线网卡的驱动程序。rtl8188eu芯片是Realtek公司开发的一款高性能无线网络解决方案芯片,主要用于电脑、笔记本电脑和其他移动设备上的无线网络连接。 rtl8188eu无线网卡驱动的安装可以通过几种方式实现。一种常见的方式是通过官方网站下载最新版本的驱动程序,然后按照说明进行安装。另一种方式是通过操作系统的设备管理器,选择更新驱动程序并选择手动安装,然后指定下载的驱动程序文件。 rtl8188eu无线网卡驱动的安装后,可以实现无线网络连接功能。用户可以通过电脑或其他设备的操作系统界面来管理和配置无线网络连接,包括搜索和连接到可用的无线网络、设置无线网络的安全参数等。 安装rtl8188eu无线网卡驱动后,用户可以享受到稳定和高速的无线网络连接。这款驱动程序经过优化和测试,能够提供稳定的无线网络信号和较快的数据传输速度,让用户能够更加方便地进行各种在线活动,如上网浏览、在线游戏、视频播放等。 总之,rtl8188eu无线网卡驱动是一款可以使得rtl8188eu芯片的无线网卡正常工作的驱动程序。它能够通过安装和配置,实现高速、稳定的无线网络连接,为用户带来更加便利的上网体验。 ### 回答3: RTL8188EU是Realtek(瑞昱)公司生产的一款无线网卡芯片。该芯片是用于在计算机中提供无线网络连接功能的硬件设备。 要使用RTL8188EU无线网卡,首先需要安装相应的驱动程序。驱动程序是一种软件,它可以让操作系统认识和与硬件设备进行通信。以下是安装RTL8188EU无线网卡驱动的步骤: 1. 查找正确的驱动程序:首先要确定自己所使用的无线网卡的型号是RTL8188EU,并准备安装对应的驱动程序。可以通过查看无线网卡的型号、参考产品说明书或者从Realtek官方网站下载驱动程序。 2. 下载和解压驱动程序:在Realtek官方网站或其他可信的下载网站上找到相应的驱动程序,并下载到计算机中。下载完成后,使用解压软件将驱动程序解压到一个目录中,准备进行安装。 3. 安装驱动程序:点击驱动程序所在的目录,找到"Setup.exe"或类似的安装程序,并双击运行。安装程序会自动开始安装过程,并按照指示完成驱动程序的安装。 4. 重启计算机:安装驱动程序后,必须重新启动计算机,以便新的驱动程序能够生效。 5. 配置无线网络连接:在计算机重启后,可以打开无线网络连接设置,找到已安装的RTL8188EU无线网卡,并进行配置。可以选择所需的无线网络,并输入密码连接到网络。 需要指出的是,驱动程序的安装可能因操作系统版本和计算机配置而有所不同。在安装驱动程序前,建议查阅相关的驱动程序安装指南或参考Realtek官方网站上的说明。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值