RT3070无线网卡有两种工作模式STA模式和softAP模式,分别由STA驱动和softAP驱动来实现,STA驱动支持无线网卡工作在STA模式下,可以连接到网络实现上网功能。而SoftAP的驱动支持无线网卡工作在softAP模式下,可以作为一个软的接入点,实现无线路由器功能。

之前进行STA模式的驱动移植,使得我们的开发板能够连接到互联网实现上网功能。这里对RT3070的第二种工作模式即softAP进行一个回顾总结,使FL2440开发板实现路由器功能,其他终端设备可以连接到「 路由器」实现上网。

内核配置

[*] Networking support  ---> Networking options  ---> [*] Network packet filtering framework (Netfilter)  ---> [*]   Advanced netfilter configuration Core Netfilter Configuration  --->(除了下面选项外其他全选)< >   SCTP protocol connection tracking support (EXPERIMENTAL)< >   FTP protocol support < >   SIP protocol support < > Transparent proxying support (EXPERIMENTAL)< >   set target and match support< >   CHECKSUM target support< >   "CT" target support< >   "DSCP" and "TOS" target support< >   "NOTRACK" target support< >   "TRACE" target support<*>   IP set support  ---><*>   bitmap:ip set support<*>   bitmap:ip,mac set support<*>   bitmap:port set support<*>   list:set set support <*>   IP virtual server support  --->(除了下面选项外其他全选)[ ]   IP virtual server debugging[ ]   SCTP load balancing support< >   FTP protocol helper IP: Netfilter Configuration  --->(全选)<*>   RF switch subsystem support  --->     

对于我的内核版本来说,需要将<> IP set support和<> IP virtual server support 先选上以后在Core Netfilter Configuration才会出现那些不需要选的选项。

前期移植准备:

具体移植过程楼主不加说明,和之前的类似,可参考博客:
http://blog.csdn.net/Edroid1530/article/details/72784383

需要移植的库,以及应用程序如下:
- Openssl库
- linbl库
- Hostapd
- iptables

1、Openssl库

1 介绍
OpenSSL是使用非常广泛的SSL的开源实现。由于其中实现了为SSL所用的各种加密算法,因此OpenSSL也是被广泛使用的加密函数库
1.1 SSL
SSL(Secure Socket Layer)安全协议是由Netscape公司首先提出,最初用在保护Navigator浏览器和Web服务器之间的HTTP通信(即HTTPS)。后来SSL协议成为传输层安全通信事实上的标准,并被IETF吸收改进为TLS(Transport Layer Security)协议。
SSL/TLS协议位于TCP协议和应用层协议之间,为传输双方提供认证、加密和完整性保护等安全服务。SSL作为一个协议框架,通信双方可以选用合适的对称算法、公钥算法、MAC算法等密码算法实现安全服务。

1.2 OpenSSL
OpenSSL是著名的SSL的开源实现,是用C语言实现的。
OpenSSL的前身是SSLeay,一个由Eric Young开发的SSL的开源实现,支持SSLv2/v3和TLSv1。
伴随着SSL协议的普及应用,OpenSSL被广泛应用在基于TCP/Socket的网络程序中,尤其是OpenSSL和Apache相结合,是很多电子商务网站服务器的典型配置。

2、libnl库

libnl 库封装了netlink socket 底层操作,提供了一系列高级API,简化了netlink编程。 libnl 包含四个主要的lib

  • libnl
  • libnl-genl
  • libnl-route
  • libnl-nf
    参考:http://www.tuicool.com/articles/j6f6z2

3、Hostapd

hostapd 是一个用户态用于AP和认证服务器的守护进程。它实现了IEEE 802.11相关的接入管理,IEEE 802.1X/WPA/WPA2/EAP 认证, RADIUS客户端,EAP服务器和RADIUS 认证服务器。在Linux系统中,使用hostapd可以实现WIFI的无线接入热点(AP)

关于IEEE 802.11协议具体可参考:
http://blog.csdn.net/Peter_tang6/article/details/72850513

hostapd.conf配置文件是用来设置wifi热点信息的文件,我们可以对hostapd目录下的hostapd.conf文件进行拷贝到开发板然后进行修改。也可以在开发板/etc目录下创建hostapd.conf配置文件

interface=wlan0 //网络接口
ssid=qicheng //设置SSID为qicheng
driver=nl80211  //使用nl80211无线驱动
channel=3   //设置wifi信道为信道3
hw_mode=g   //使用80211g协议标准 , 有效的值取决于硬件,通常:a, b, g
ignore_broadcast_ssid=0 //禁用广播ssid
auth_algs=1 /*指定OSA认证算法, auth_algs=1 只支持 WPA2 身份验证算法。auth_algs=2 表示支持 WEP。永远不要使用有线等效加密 (wired equivalent privacy, WEP),因为它非常容易破解,并且多年前就已经被完全破解了。auth_algs=3 表示支持这两种方式。*/wpa=3    /*指定WPA/WPA2类型, wpa=2 仅支持 WPA2。wpa=1 表示支持 WPA1,而 wpa=3 表示二者都支持。*/
wpa_key_mgmt=WPA-PSK    //指定支持的加密密钥算法
wpa_passphrase=12345678 //指定认证密钥
wpa_pairwise=TKIP     /*启用了WPA或WPA2则需要指定wpa_pairwise或rsn_pairwise。*/
rsn_pairwise=CCMP     /*wpa_pairwise 和 rsn_pairwise控制支持加密数据的密钥,可以使用 CCMP、TKIP 或两者均使用*/

4、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。


启动wlan0

: ifconfig wlan0 up


远程连接开发板:

 要是开发板实现路由功能,需将我们的开发板插到路由器上。然后将我们的eth0的IP地址和路由器设置子同一网段,当前连接的路由器网关为192.168.2.1

所以我们需要将开发板eth0设置在这个网段才能通过ssh远程登录开发板。我们的RT3070网卡只能一次实现一种模式,所以不能够既做路由器用,又做为设备连接互联网用,所以开发板连接到路由器必须采用有线的方式,即将网线插到路由器上,通过et0来连接


启动守护进程:

: hostapd -B hostapd.conf

你打开手机就可以发现有一个热点名为qicheng,但是现在还不能上网,因为此时还没分配IP地址。

>ifconfig


配置DHCP

为了使连上热点的中断设备能够自动获取IP,我们需要启用DHCP服务。busybox中已经集成了udhcp,我们可以直接对busybox-1.20.2/examples/udhcp/ 下的配置文件udhcpd.conf进行修改,也可以在开发板上/etc目录下新建一个名为udhcp.conf的配置文件。内容如下:

start 192.168.3.20
end 192.168.3.254
interface wlan0
opt dns 8.8.8.8
option subnet 255.255.255.0
opt router 192.168.3.1

IP地址分配范围是在2~254之间,开始的值最好不要太大,否则会出现问题。这里192.168.3.x是我们自己定义的,因为路由器默认网关为192.168.2.1所以我们不能再用2了,也可以设为192.168.4.x,这代表我们开发板作为路由器所在的网段。

然后设置并启动DHCP服务(开发板上操作以下命令)

>mkdir -p /var/lib/misc/
>touch /var/lib/misc/udhcpd.leases   //创建租赁文件
>ifconfig wlan0 192.168.3.1 netmask 255.255.255.0 //设置接入点
>echo "nameserver 8.8.8.8" > /etc/resolv.conf //DNS >udhcpd -f /etc/udhcpd.conf //启动DHCP,此时用手机连上FL2440『路由器』将打印以下信息
udhcpd (v1.20.2) started
Sending OFFER of 192.168.3.20 //分配给手机的IP地址为192.168.3.20
Sending ACK to 192.168.3.20

此时,我们可以将手机连接到”qicheng”这个wifi,然后试着ping一下。

>ping 192.168.3.20

PING 192.168.3.20 (192.168.3.20): 56 data bytes
64 bytes from 192.168.3.20: seq=0 ttl=64 time=72.368 ms
64 bytes from 192.168.3.20: seq=1 ttl=64 time=1280.778 ms
64 bytes from 192.168.3.20: seq=2 ttl=64 time=277.356 ms

此时依旧不能上网,还需要用iptables工具进行相关配置。

iptable工具使用:

将上文中一直好的iptable,/install/lib文件夹下的所有库文件(所以.a或者.so)的文件到开发板/lib和将xtables-multi打包放/bin目录下,赋予可执行权限后将xtables-multi重命名为iptables。

确保开发板连接的路由器能够上网,即开发板的eth0网卡连入互联网。
然后在开发板上对iptables如下配置:

/*将局域网内地址通过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 /*配置好默认网关 */
>: route add default gw 192.168.2.1 /*启动 dhcp服务*/
>: udhcpd -f udhcpd.conf

然后可以在windons下打开cmd进行测试:

>ping 192.168.3.1         //检查网关是否可达
>ping 114.114.114.114     //检查外网是否可达
>ping www.baidu.com       //检查DNS是否可用

附上一张流程图:

引用的是别人的图,我的板子默认网关应该是192.168.3.1。eth0和LAN之间为192.168.2.0

流程总结:

内核配置—>工具以及库移植—>创建hostapd.conf配置文件(设置wifi信息)—>启动wlan0—>启动守护进程(可找连接wifi)—>配置DHCP(可连接并分配IP)—>iptables相关配置(手机可上网)

本文参考:http://blog.csdn.net/Edroid1530/article/details/72784383

RT3070无线网卡AP模式——开发板实现路由功能相关推荐

  1. RT3070无线网卡AP模式

    RT3070无线网卡AP模式--开发板实现路由功能并使客户端成功联网(WIFI) 主机操作系统:Centos 6.7 交叉编译器环境:arm-linux-gcc-4.5.4  开发板平台: FL244 ...

  2. 【微信小程序控制硬件16 】 安信可 ESP32-S 开发板实现移植腾讯物联开发平台蓝牙 llsync 协议,实现一键蓝牙快速配网+远程控制。(附带源码)

    文章目录 一.前言 二.源码目录说明 三.编译指导 四.常见问题 五.开源微信物联网控制一览表 另外,不要把我的博客作为学习标准,我的只是笔记,难有疏忽之处,如果有,请指出来,也欢迎留言哈! 微信物联 ...

  3. 利用粤嵌LinuxGEC6818开发板实现电子相册

    实验目的 利用粤嵌LinuxGEC6818开发板实现电子相册,要求如下: 实验操作必须在Linux操作系统下完成 源代码模块化设计 实现水平或者垂直滑动切换图片 实验步骤 因为操作需要在Linux下运 ...

  4. GEC6818开发板JPG图像显示,科大讯飞离线语音识别包Linux_aitalk_exp1227_1398d7c6运行demo程序,开发板实现录音

    GEC6818开发板JPG图像显示 | 开发板实现录音 一.GEC6818开发板JPG图像显示 1.jpg图片特性 2.如何解压缩jpg图片 1.对jpegsrc.v8c.tar.gz进行arm移植 ...

  5. STM32实例——基于STM32开发板实现传感数据采集-DHT11温湿度采集

    STM32开发板实现传感数据采集-DHT11温湿度采集 一.前言 本项目是基于STM32开发板的温湿度采集,传感器采用DHT11温湿度传感器,软件采用keil5等.本项目采用ARM结构中最为代表的Co ...

  6. 基于RK3588开发板实现多屏拼接

    基于RK3588开发板实现多屏拼接 多屏拼接功能说明 将一组完整的画面分割为若干子画面分别送给不同的屏幕显示,可以支持下图的多种模式 硬件环境 基于RK3588 EVB开发板实现4屏拼接,RK3588 ...

  7. 【Verilog】基于Nexys4DDR开发板实现数字钟

    功能: 基于Nexys4DDR开发板实现的数字钟,六位数码管显示时分秒,可切换24时制/12时制,有整点报时功能(led灯闪烁). Verilog代码: `timescale 1ns / 1ps//数 ...

  8. 基于PYNQ-Z2开发板实现矩阵乘法加速详细流程

    基于PYNQ-Z2开发板实现矩阵乘法加速 主要内容 1.在Vivado HLS中生成矩阵乘法加速的IP核. 2.在Vivado中完成Block Design. 3.在Jupyter Notebook上 ...

  9. Mixly(米思齐)的安装以及基于Arduino开发板实现电容触摸控制灯

    Mixly(米思齐)的安装以及基于Arduino开发板实现电容触摸控制灯 1.Mixly下载 http://mixly.org/bnu-maker/mixly-arduino-win Mixly软件安 ...

最新文章

  1. Seaborn使用violinplot函数可视化多分组小提琴图(violin plot)、每个小提琴图内部包含两个分组、使用inner函数设置在小提琴图中使用虚线显示分位数位置
  2. centos6下jbd2进程占用大量IO处理
  3. Java对战.NET,战争与和平的游戏
  4. Linux系统故障修复-MBR损坏,grub.conf配置文件丢失
  5. [SpringBoot2]HelloWorld
  6. 《机器人学导论--Join J.Craig》第一章 绪论
  7. MATLAB App Designer GUI开发从0到1(实战篇)
  8. OSPF笔记——LSA及其字段,及其作用
  9. 2021-2025年中国冻融室行业市场供需与战略研究报告
  10. oracle iso,Oracle数据库之Linux操作系统各版本ISO镜像下载(包括oracle linux\redhat\centos\u...
  11. Java项目开发管理工具-Maven基础
  12. 我的世界服务器如何开无限小号,实操神技能,微信能“无限”开小号?
  13. 「星火计划沙龙视频」云原生数据湖专场
  14. QT-ico图片的生成
  15. HackBGRT(一):修改window系统启动logo动画
  16. u盘连接计算机找不到,重装系统后U盘插入电脑怎么没反应?找不到U盘盘符解决办法...
  17. 晁盖与吴用 3gp转换软件
  18. 题解 CF940A 【Points on the line】
  19. 送福利 手把手教你快速配置腾讯云 Linux 服务器
  20. VC++钩子使用之全局键盘钩子

热门文章

  1. Android 9.0 以上http链接提示无网络和加载失败
  2. Vue开发环境快速搭建步骤
  3. html文字如何显示在右侧,html点击左边代码右边显示相应的内容
  4. android 小项目 简单项目 大作业 演示文档 结业 选修课 论文 答辩
  5. python的`__slots__`属性
  6. 升级为私有全栈云的腾讯云TStack究竟强在了哪儿?
  7. MySQL数据库sql分类_mysql数据库常用sql的分类整理
  8. python二手房价格预测_Python爬取赶集网北京二手房数据R对爬取的二手房房价做线性回归分析...
  9. 给无聊的生活赋予意义
  10. ME AND MY GIRLFRIEND: 1