RT3070无线网卡AP模式——开发板实现路由功能并使客户端成功联网

目录

一、配置内核支持无线网卡softAP模式

1、概念

2、优缺点

二、配置无线网络的软件移植

1.移植Openssl-0.9.8e

2.移植libnl

3.移植Hostapd

4. 自动分配IP链接wif 

三、iptables移植

四、总结:

五、制作过程中遇到的问题:


———————————————————————————————————————

主机操作系统:Centos 6.7 
交叉编译器环境:arm-linux-gcc-4.5.4 
开发板平台: FL2440 
Linux内核版本: linux-3.0 
开发模块: SIM900 WiFI-AP模式
邮箱:leiyuxing205@gmail.com
———————————————————————————————————————

一、配置内核支持无线网卡softAP模式

1、概念

无线网卡的SoftAP模式是指将无线网卡作为热点来使用。在这种模式下,无线网卡会发出SSID和密码,其他设备可以连接到这个热点并访问该设备所在的网络。这种模式适用于需要创建一个临时网络的场合,例如在没有可用的无线路由器的情况下,或者需要为会议或活动提供无线网络连接等。要使用无线网卡的SoftAP模式,需要安装支持此功能的无线网卡驱动程序,并在操作系统中启用SoftAP功能。





如果没有build in RF选项,在使用hostapd命令时会出错

注:先从可以选择的地方开始选,不然你会一脸懵逼发现很多选项都没有,选完之后建议再反复检查3遍,因为会新增许多新选项,切记避免遗漏!!!

2、优缺点

无线网卡SoftAP模式是指将无线网卡设置为一个无线访问点模式,使其他设备能够通过该无线访问点连接到网络。它有以下优缺点:

优点:

  1. 灵活性强:可以通过使用无线网卡SoftAP模式,将任何计算机或设备转换为一个无线访问点,从而提供Wi-Fi服务。
  2. 可以方便地与多个设备连接:无线网卡SoftAP模式允许多个设备同时连接到网络。
  3. 部署方便:无线网卡SoftAP模式不需要额外的硬件设备,因此可以快速部署。

缺点:

  1. 安全性问题:无线网卡SoftAP模式不提供加密功能,因此存在数据泄露和网络攻击的风险。
  2. 有限的传输速度:由于无线网卡SoftAP模式共享设备的带宽,因此可能会导致网络传输速度较慢,并且有限制。
  3. 不适合大型网络:无线网卡SoftAP模式只适用于小型网络,不能满足大型网络的需求。
  4. 稳定性差:在连接过多的设备时,无线网卡SoftAP模式容易出现连接不稳定或意外断开的情况。


二、配置无线网络的软件移植

1.移植Openssl-0.9.8e

Hostapd依赖于openssl与libnl这两个库。所以首先要移植openssl与libnl,openssl我们已经移植过了,但我担心版本兼容性的问题,本着学习的心态便又移植了网上普遍使用的openssl-0.9.8e
1.1下载Openssl-0.9.8e
Openssl-0.9.8e
http://download.csdn.net/detail/u010944778/8940135

1.2解压之后直接修改Makefile

[leiyuxing@centos6 openssl-0.9.8e]$ mkdir install
[leiyuxing@centos6 openssl-0.9.8e]$ vim Makefile
 29INSTALLTOP=/home/leiyuxing/fl2440/kernel/linux-3.0/openssl-0.9.8e/install
 62 CC= /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc
 63 CFLAG= -O
 64 DEPFLAG= -DOPENSSL_NO_CAMELLIA -DOPENSSL_NO_GMP -DOPENSSL_NO_MDC2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779
 65 PEX_LIBS=
 66 EX_LIBS=
 67 EXE_EXT=
 68 ARFLAGS=
 69 AR=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-ar $(ARFLAGS) r
 70 RANLIB= /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-ranlib
[leiyuxing@centos6 openssl-0.9.8e]$ sudo make
[leiyuxing@centos6 openssl-0.9.8e]$ sudo make install


2.移植libnl

2.1下载libnl
libnl
http://download.csdn.net/detail/u010944778/8940293

[leiyuxing@centos6 linux-3.0]$ cd libnl-1.1
[leiyuxing@centos6 libnl-1.1]$ mkdir install
[leiyuxing@centos6libnl-1.1]$./configure--prefix=/home/leiyuxing/fl2440/kernel/linux-3.0/libnl-1.1/install --host=arm-linux
[leiyuxing@centos6linux-3.0]$makeCC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc

[leiyuxing@centos6 libnl-1.1]$ sudo make install

将/install下的lib文件夹中的libnl.so.1拷贝到开发板/lib目录下。
 


3.移植Hostapd

3.1下载
hostapd-1.0.tar.gz
http://download.csdn.net/detail/u010944778/8940421


3.2解压后修改.config与Makefile

[leiyuxing@centos6 linux-3.0]$ cd hostapd-1.0
[leiyuxing@centos6 hostapd-1.0]$ ls
COPYING  hostapd  patches  README  src
[leiyuxing@centos6 hostapd-1.0]$ cd hostapd/

Makefile的修改:

CFLAGS += -I../src
CFLAGS += -I../src/utils


CFLAGS += -I/home/leiyuxing/fl2440/kernel/linux-3.0/libnl-1.1/install/include/
CFLAGS += -I/home/leiyuxing/fl2440/kernel/linux-3.0/openssl-0.9.8e/install/include/
LIBS +=-L/home/leiyuxing/fl2440/kernel/linux-3.0/libnl-1.1/install/lib/
LDFLAGS +=-L/home/leiyuxing/fl2440/kernel/linux-3.0/libnl-1.1/install/lib/
LIBS +=-L/home/leiyuxing/fl2440/kernel/linux-3.0/openssl-0.9.8e/install/lib/
LDFLAGS +=-L/home/leiyuxing/fl2440/kernel/linux-3.0/openssl-0.9.8e/install/lib/


# Uncomment following line and set the path to your kernel tree include
[leiyuxing@centos6 hostapd]$cp defconfig .config
[leiyuxing@centos6 hostapd]$vim .config

.config 修改:

22 # Driver interface for drivers using the nl80211 kernel interface
23 CONFIG_DRIVER_NL80211=y
[leiyuxing@centos6 hostapd]make
CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc
[leiyuxing@centos6 hostapd]$ ls

得到了hostapd和配置文件hostapd.conf,需要tftp到你的开发板上的/bin目录下。并到  /bin 目录下修改hostapd.conf文件:

interface=wlan0                            //网络接口设备名称
driver=nl80211                            //默认使用nl80211无线驱动
ssid=leiyuxing                          //热点名称
channel=3                                 //设定无线频道
hw_mode=g                                 //使用80211g协议标准ignore_broadcast_ssid=0             
auth_algs=1                               //指定OSA认证算法
wpa=3                                     //指定WPA/WPA2类型
wpa_passphrase=11111111                   //指定认证密钥
wpa_key_mgmt=WPA-PSK 
wpa_pairwise=TKIP    //启用了WPA或WPA2则需要指定wpa_pairwise
rsn_pairwise=CCMP

上面各项解释如下: 
(1) ssid:无线路由器发射的wifi名称; 
(2) hw_mode:指定802.11协议,包括 a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g;
=================================================================== 
无线局域网标准 IEEE 802.11协议 
*IEEE 802.11, 1997年,原始标准(2Mbit/s,工作在2.4GHz)。 
*IEEE 802.11a,1999年,物理层补充(54Mbit/s,工作在5GHz)。 
*IEEE 802.11b,1999年,物理层补充(11Mbit/s工作在2.4GHz)。 
*IEEE 802.11g,2003年,物理层补充(54Mbit/s,工作在2.4GHz)。 
使用最多的应该是802.11n标准,工作在2.4GHz频段,可达600Mbps(理论值) 
=================================================================== 
(3)channel:设定无线频道;
(4)interface:接入点设备名称,注意不要包含ap后缀,即如果该设备称为wlan0ap,填写wlan0即可;
(5)driver:设定无线驱动,我这里是nl80211;
(6)auth_algs=1 
其中auth_algs指定采用哪种认证算法,采用位域(bit fields)方式来制定,其中第一位表示开放系统认证(Open System Authentication, OSA),第二位表示共享密钥认证(Shared Key Authentication, SKA)。我这里设置alth_algs的值为1,表示只采用OSA;
(7)wpa:指定WPA类型,这是一个位域值(bit fields),第一位表示启用WPA,第二位表示启用WPA2。在我的配置中,无论设置成1、2或3,都可以正常连接
(8)wpa_passphrase:WPA/WPA2加密需要指定密钥,这个选项就是配置WPA/WPA2的密钥。注意wpa_passphrase要求8~63个字符。另外还可以通过配置wpa_psk来制定密钥,不过要设置一个256位的16进制密钥,不适合我们的需求;
(9)wpa_pairwise/rsn_pairwise:如果启用了WPA,需要指定wpa_pairwise;如果启用了WPA2,需要指定 rsn_pairwise,或者采用wpa_pairwise的设定。
接下来将hostapd拷贝到的/bin下,并修改可执行权限,将hostapd.conf也拷贝到开发板的/app/AP/目录下 
在板子上直接执行hostapd -B hostapd.conf 即可 
如果编译过程出现缺少库的错误,请自行检查你hostapd所依赖的libnl库和openssl库是否成功交叉编译。
 

>: ls
hostapd.conf
>: hostapd -B hostapd.conf
Configuration file: hostapd.conf
phy1 -> rt2x00mac_conf_tx: Info - Configured TX queue 0 - CWmin: 3, CWmax: 4, Aifs: 2, TXop: 102.
phy1 -> rt2x00mac_conf_tx: Info - Configured TX queue 1 - CWmin: 4, CWmax: 5, Aifs: 2, TXop: 188.
phy1 -> rt2x00mac_conf_tx: Info - Configured TX queue 2 - CWmin: 5, CWmax: 10, Aifs: 3, TXop: 0.
phy1 -> rt2x00mac_conf_tx: Info - Configured TX queue 3 - CWmin: 5, CWmax: 10, Aifs: 7, TXop: 0.
Using interface wlan0 with hwaddr 00:24:25:50:a9:4d and ssid 'leiyuxing'
phy1 -> rt2x00mac_conf_tx: Info - Configured TX queue 0 - CWmin: 2, CWmax: 3, Aifs: 1, TXop: 47.
phy1 -> rt2x00mac_conf_tx: Info - Configured TX queue 1 - CWmin: 3, CWmax: 4, Aifs: 1, TXop: 94.
phy1 -> rt2x00mac_conf_tx: Info - Configured TX queue 2 - CWmin: 4, CWmax: 6, Aifs: 3, TXop: 0.
phy1 -> rt2x00mac_conf_tx: Info - Configured TX queue 3 - CWmin: 4, CWmax: 10, Aifs: 7, TXop: 0.

.修改/home/leiyuxing/fl2440/3rdparty/busybox-1.20.2/examples/udhcp /udhcpd.conf 然后拷贝到开发板/etc目录下




1,修改IP池 
起始IP的后两位可以随意,但必须在一个网段 
192.168.x.y 
192.168.x.z 

2,修改执行dhcp功能的接口 
可以用过ifconfig -a或者iwconfig命令来查看接口 
3,修改DNS、网关、netmask等 
opt dns 8.8.8.8 # DNS地址 
option subnet 255.255.255.0 #子网掩码 
opt router 192.168.2.1 #网关 
其他默认即可


4. 自动分配IP链接wif 

因为udhcpd和udhcpc一样都是busybox里面自带的命令。所以我直接把配置文件放到开发板上再执行命令

>:ifconfig wlan0 192.168.2.1 netmask 255.255.255.0 (先把要接入点设备ip设置好)
>:udhcpd -f /etc/udhcpd.conf //就可以启动dhcp服务器了。

(注意!!!)这里执行的时候可能会出错!!!

udhcpd -f /etc/udhcpd.conf 
udhcpd (v1.20.2) started 
udhcpd: can’t open ‘/var/lib/misc/udhcpd.leases’: No such file or directory

Udhcpd在执行的时候可能会提示没有一个叫做udhcpd.release的租赁文件,这个只要在相应的文件夹下创建即可。执行下面两条命令:

>:mkdir -p /var/lib/misc/ 
>:touch /var/lib/misc/udhcpd.leases 

再次执行! 

>:udhcpd -f /etc/udhcpd.conf 
udhcpd (v1.20.2) started
Sending OFFER of 192.168.2.20//这时候就是已经连上你开发板的wifi
Sending ACK to 192.168.2.20 //此时还不能上网!!!
可以试着 ping 192.168.2.20 看看是否能连接


三、iptables移植

===================================================================
 iptables简介
iptables是基于内核的防火墙,功能非常强大,iptables内置了filter,nat和mangle三张表。
Filter表负责过滤数据包,包括的规则链有,input,output和forward;
Nat表则涉及到网络地址转换,包括的规则链有,prerouting,postrouting和output;
Mangle表则主要应用在修改数据包内容上,用来做流量整形的。
默认的规则链有:INPUT,OUTPUT,NAT,POSTROUTING,PREROUTING;
INPUT匹配目的IP是本机的数据包,FORWARD匹配流经本机的数据包,PREROUTING用来修改目的地址用来做DNAT,POSTROUTING用来修改源地址用来做SNAT。
===================================================================

4.1下载
iptables-1.4.12.tar.gz
http://download.csdn.net/detail/u010944778/8945513
4.2解压之后进入目录

[leiyuxing@centos6 linux-3.0]$ cd iptables-1.4.12
[leiyuxing@centos6 iptables-1.4.12]$ mkdir install
[leiyuxing@centos6 iptables-1.4.12]$ cd install
[leiyuxing@centos6 install]$ pwd
/home/leiyuxing/fl2440/kernel/linux-3.0/iptables-1.4.12/install



[leiyuxing@centos6 iptables-1.4.12]$ ./configure  --host=arm-linux --enable-static --disable-shared --prefix=/home/leiyuxing/fl2440/kernel/linux-3.0/iptables-1.4.12/install --disable-ipv6 --disable-largefile

[leiyuxing@centos6 iptables-1.4.12]$make CC=/opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc CFALGS=--static LDFLAGS=-static

[leiyuxing@centos6 iptables-1.4.12]$make

[leiyuxing@centos6 iptables-1.4.12]$ make install

[leiyuxing@centos6 iptables-1.4.12]$cd ./install/sbin
[leiyuxing@centos6 sbin]$ sudo /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-strip xtables-multi
[leiyuxing@centos6 install]$ tar -czf lib.tar.gz lib
[leiyuxing@centos6 install]$ ls
bin  include  lib  lib.tar.gz  sbin  share


此时将/install/lib文件夹和xtables-multi打包放到开发板/lib和/bin目录下,赋予权限后将xtables-multi改名为iptables
.使用iptables命令接着配置nat转发表
/*将局域网内地址通过eth0接口伪装后转发出去*/

>:iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

/*开启转发功能,允许已建立连接及相关连接对内转发*/

>: iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISH -j ACCEPT 

/*对外转发,数据包从wlan0流向eth0*/

>: iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
>:echo "1" >/proc/sys/net/ipv4/ip_forward
>:ifconfig eth0 192.168.199.22
>:route add default gw 192.168.199.1




然后连上的wifi热点就可以上网了。至此使用hostapd+udhcpd+iptables等工具基于内核mac80211驱动框架就实现了RT3070无线网卡的softAP!!!

再附上一张简图:


四、总结:

实现开发板路由的整个流程

>: mv /dev/random /dev/random.org 
>:ln -s /dev/urandom /dev/random
>:hostapd -B /apps/hostapd/hostapd.conf 
Configuration file: /apps/AP/hostapd.conf
phy0 -> rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'.
phy0 -> rt2x00lib_request_firmware: Info - Firmware detected - version: 0.29.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 0 - CWmin: 3, CWmax: 4, Aifs: 2, TXop: 102.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 1 - CWmin: 4, CWmax: 5, Aifs: 2, TXop: 188.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 2 - CWmin: 5, CWmax: 10, Aifs: 3, TXop: 0.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 3 - CWmin: 5, CWmax: 10, Aifs: 7, TXop: 0.
Using interface wlan0 with hwaddr 48:5d:60:40:77:02 and ssid 'mywifi_tset'
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 0 - CWmin: 2, CWmax: 3, Aifs: 1, TXop: 47.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 1 - CWmin: 3, CWmax: 4, Aifs: 1, TXop: 94.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 2 - CWmin: 4, CWmax: 6, Aifs: 3, TXop: 0.
phy0 -> rt2x00mac_conf_tx: Info - Configured TX queue 3 - CWmin: 4, CWmax: 10, Aifs: 7, TXop: 0.
>:ifconfig wlan0 192.168.2.1 netmask 255.255.255.0 
>:iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
>:iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISH -j ACCEPT 
>:iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT 
>:echo "1" >/proc/sys/net/ipv4/ip_forward
>:route add default gw 192.168.1.1
>:udhcpd -f /apps/udhcpd/udhcpd.conf

首先把你的网线连接开发板和路由器;启动网卡ifconfig wlan0 up,手动设置ifconfig wlan0的ip和netmask(我自己的是ifconfig wlan0 192.168.2.1 netmask 255.255.255.0);在hostapd.conf文件所在目录下执行命令hostapd -B hostapd.conf,这时可以成功搜索到自己开发板的wifi了,只是连接不上;执行指令udhapd -f etc/udhapd.conf,成功后,手机就可以连上开发板wifi,并且可以ping通手机(这是手机的ip地址应该是分配出来的网络ip的第一个,例如我的就是192.168.2.20);执行上面的iptables那四个命令,再设置eth0的ip(ifconfig eth0 192.168.199.22,注意设置eth0的ip地址应该和连接的路由器ip地址在同一网段!!!这个很重要,关系到能否上外网),接着设置网关route add default gw 192.168.199.1,执行指令udhapd -f etc/udhapd.conf,手机连上wifi后就可以直接上网啦!!

五、制作过程中遇到的问题:

问题一:



解决方法
若出现读取random随机数错误,可采用符号链接的方法解决:
~> mv /dev/random /dev/random.org 
~> ln -s /dev/urandom /dev/random



问题二:


解决方法:
我觉得是退出不正常造成的。。这个的意思是wlan0正在被使用并且不能重复的使用,没找到解决方法。。就简单粗暴地把/var/run/hostapd文件夹给删除了就好了。

问题三:

>: udhcpd -f /etc/udhcpd.conf
udhcpd (v1.20.2) started
udhcpd: max_leases=235 is too big, setting to 155

解决方法:
把start  192.168.2.100
改为
  start  192.168.2.20

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
使用野火STM32指南者开发板实现无刷电机调速器的FG信号读取和转速反馈可以按照以下步骤进行: 1. 连接电机:将无刷电机连接到开发板的PWM输出引脚和相应的电源引脚上。确保连接正确并进行适当的电源供应。 2. 配置GPIO:使用开发板的GPIO功能,将FG信号线连接到一个可用的输入引脚上。在代码中进行GPIO初始化和配置,将该引脚设置为输入模式。 3. 编写中断处理程序:使用STM32的中断机制,编写一个中断处理程序来捕获FG信号的变化。可以使用外部中断或者定时器中断来实现。 4. 解析转子位置:在中断处理程序中,根据FG信号的变化情况,解析出转子当前所处的位置。可以根据FG信号的上升沿或下降沿来确定转子位置。 5. 计算转速:利用转子位置信息和时间间隔,在中断处理程序中计算出转子的转速。可以通过每个电机周期内的位置变化量来估算转速。 6. 反馈转速:将计算得到的转速值反馈给控制系统或用户界面。可以使用串口通信或其他合适的方式将转速信息发送出去。 需要编写相应的代码来实现上述功能。可以使用STM32的开发环境,例如Keil MDK或者STM32CubeIDE,选择合适的编程语言(如C语言)进行开发。具体的代码实现细节和配置可能会因具体的无刷电机和开发板型号而有所不同,建议参考相关的技术文档和示例代码进行开发。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

进击的雷神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值