这里对WiFi模块的驱动就不做详细介绍,本篇文章可能会涉及两款WiFi模块,一个是USB接口的WiFi模块,一个是SDIO接口的wifi模块,即AP6212,平台可能涉及爱特梅尔和三星的4418两个平台。

本篇的记录主要内容是:建立WiFi模块的AP热点,并且客户端设备通过该热点,借助4G模块的网络连接外网。

建立WiFi的AP热点涉及下面几个软件包或者软件工具:

hostapd-0.8、hostapd-2.5、libnl-1.1.4、openssl-1.0.0

如果不了解libnl和openssl版本有什么不同,尽量不要使用高版本,很可能会出问题,使用上面的两个版本就可以,这两个依赖库官网都可下载(自行百度下载地址)。上面的hostapd有两个版本,原因是0.8版本是USB的wifi模块源码资料中打包提供的,官网没找到该版本,看来是厂家对其做了修改,以适应自己的USB WiFi模块;2.5版本就是官网通用版本可以下载得到,没什么特别需要注意的。为此WiFi模块的工具以厂家提供的为准最好,不会有兼容性问题。

对于这两个WiFi模块,他们执行的不同就是hostapd工具的不同,其他都一样,这里选择AP6212做主要说明。hostapd工具为2.5的版本。

hostapd工具即为热点的创建工具,libnl-1.1.4、openssl-1.0.0为其依赖库,所以要先编译libnl-1.1.4、openssl-1.0.0这两个依赖库。

注:编译器自由指定,由需求决定。

openssl-1.0.0的编译:

这个库的编译有点特殊,在配置之前先指定CC编译器,即:CC=arm-linux-gnueabihf-gcc

然后执行:

./config no-asm shared --prefix=/xxxx/openssl-1.0.0/install 

如果PC机没有依赖库问题就会自动生成Makefile文件,一般不会有问题。生成Makefile后还需要修改它,修改的部分如下且修改为下面的情况即可:

CROSS_COMPILE=arm-linux-gnueabihf-
CC= $(CROSS_COMPILE)gcc
CFLAG= -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -DTERMIO -O3 -Wall -DMD32_REG_T=int
#CFLAG= -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DOPENSSL_NO_KRB5 -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall
#CFLAG= -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DOPENSSL_NO_KRB5 -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall
DEPFLAG= -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_STORE
PEX_LIBS=
EX_LIBS= -ldl
EXE_EXT=
ARFLAGS=
AR=$(CROSS_COMPILE)ar $(ARFLAGS) r
RANLIB= $(CROSS_COMPILE)ranlib
NM= $(CROSS_COMPILE)nm
PERL= /usr/bin/perl
TAR= tar
TARFLAGS= --no-recursion
MAKEDEPPROG= gcc
LIBDIR=lib

之后直接make以及make install即可。
l ibnl-1.1.4的编译:

这个库的编译没什么复杂的,先执行下面的配置命令:

./configure --prefix=/xxxx/libnl-1.1.4/install CC=arm-linux-gnueabihf-gcc LD=arm-linux-gnueabihf-ld --enable-shared --enable-static --host=arm-linux-gnueabihf

之后直接make以及make install即可。
hostapd的编译:

该工具的编译不要configure的配置,直接使用hostapd目录下的defconfig配置即可,即执行命令:cp defconfig .config

然后打开.config文件需要添加所依赖的库路径,如下所示:

CFLAGS += -I/xxxx/libnl-1.1.4/install/include
LIBS += -L/xxxx/libnl-1.1.4/install/lib
CFLAGS += -I/xxxx/openssl-1.0.0/install/include
LIBS += -L/xxxx/openssl-1.0.0/install/lib

另外解注释下面两个选项:

CONFIG_DRIVER_NL80211=yCONFIG_TLS=openssl

执行make即可生成hostapd可执行工具。

到这里需要的必要工具就编译完成了,剩下的就是把它们拷贝到开发板了。具体的位置个人需求。把依赖库和可执行文件路径都添加到环境变量中即可使用了。

建立热点的命令如下:

insmod /lib/modules/bcmdhd.ko "firmware_path=/etc/firmware/fw_bcmdhd_apsta.bin" "nvram_path=/etc/firmware/nvram_ap6212.txt"ifconfig wlan0 192.168.2.1 netmask 255.255.255.0 up
udhcpd -fS /etc/udhcpd.conf&
hostapd -B /etc/hostapd.conf

这里给出udhcpd.conf和hostapd.conf两个文件的配置:

udhcpd.conf配置:

start 192.168.2.2
end 192.168.2.100
interface wlan0
max_leases 20
remaining yes
auto_time 7200
decline_time 3600
conflict_time 3600
offer_time 60
min_lease 60
lease_file /etc/udhcpd.leases
opt dns 114.114.114.114           #192.168.1.2 192.168.1.10
option subnet 255.255.255.0
opt router 192.168.2.1
option domain local

hostapd.conf配置(开放式热点):

interface=wlan0
driver=nl80211
ctrl_interface=/var/run/hostapd
ssid=MyAP
channel=3
ieee80211n=1
hw_mode=g
ignore_broadcast_ssid=0

还要建立一个udhcpd.leases文件,路径如前面udhcpd.conf配置文件所示:

touch/etc/udhcpd.leases

为了确保运行的正确,请确保内核中有如下配置:

这样执行运行命令后应该就可以搜索到名为MyAP的热点了。

当然了前面只是建立了AP热点,且可自动分配IP地址,但是还无法上网。

为了使其能够通过4G网络连接互联网,那么我们需要iptables工具来实现nat转接。需要移植iptables工具,我这里使用的版本是iptables-1.4.19。

配置的命令是:

./configure --prefix=/xxxx/iptables-1.4.19/install CC=arm-cortex_a9-linux-gnueabi-gcc LD=arm-cortex_a9-linux-gnueabi-ld --enable-shared --enable-static --host=arm-cortex_a9-linux-gnueabi --disable-ipv6 --disable-largefile

执行make和make install即可。

把编译好的库和可执行文件拷贝到开发,并指定环境变量,即可使用了。

为了保证iptables工具的正确执行,那么请确保内核开启了下面的功能:


执行不报错即可,执行iptables -A FORWARD -s 192.168.2.0/24 -o ppp0 -j ACCEPT命令测试一下,然后执行iptables -L看是否有规则,如果有那么就说明没问题。

那么,WiFi模块通过4G模块上网的命令如下:

iptables -A FORWARD -s 192.168.2.0/24 -o ppp0 -j ACCEPT
iptables -A FORWARD -d 192.168.4.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.2.0/255.255.255.0 -o ppp0 -j MASQUERADE
echo 1 >/proc/sys/net/ipv4/ip_forward #启动转发

完整的命令如下:

ifconfig wlan0 192.168.2.1 netmask 255.255.255.0 up
udhcpd -fS /etc/udhcpd.conf&
iptables -A FORWARD -s 192.168.2.0/24 -o ppp0 -j ACCEPT
iptables -A FORWARD -d 192.168.4.0/24 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.2.0/255.255.255.0 -o ppp0 -j MASQUERADE
echo 1 >/proc/sys/net/ipv4/ip_forward
hostapd -B /etc/hostapd.conf

为了方便,把上面的命令保存为ap.sh文件。

万事具备了,下面给出WiFi热点通过4G网卡上网的操作流程。

第一步:ppp.sh wcdma建立4G网络

第二步:ap.sh(注意路径问题)

之后搜索热点连接,应该可以上互联网了。

Linux 开发板4G转WiFi热点 手机连接热点上网(三 WiFi模块的移植及AP的建立)相关推荐

  1. linux 4g wifi切换,Linux 开发板4G转WiFi热点 手机连接热点上网(二 4G模块的移植)...

    接着前一篇,本篇博文记录4G模块的移植. 我使用的模块是中兴ME3630模块,前面说了使用供应商或者官方的资料进行移植即可.一般来说4G模块的驱动,Linux内核也基本都有了,只需要设置一下optio ...

  2. Linux 开发板4G转WiFi热点 手机连接热点上网(一 思路)

    很多时候我们需要一个这样的设备,建立一个wifi热点通过4G模块的流量进行上网. 为此这里记录自己实现它的经历. 为了达到目的,需要做下面两大部分: 1.4G模块的联网. 2.WiFi模块的AP热点建 ...

  3. linux开发板开启telnetd

    需求:linux开发板开启telnetd, pc上SercureCRT连接; 前提: 开发板和pc能ping通; 1. 开发板端 在脚本 /etc/init.d/rcS中添加; mount -t de ...

  4. 电脑wifi通过以太网口与linux开发板网络共享设置方法

    本文介绍pc 端wifi通过以太网口与linux开发板实现网络共享的方法,该方法主要是为了实现板卡可以访问外网上网. (当然也可以通过开发板控制器直接无线连接wifi 热点方式达到目的) 步骤如下: ...

  5. 意法半导体STM32MP157A MPU加持,米尔科技首款ST Linux开发板MYD-YA157C评测

    ST公司去年推出了MPU系列芯片,MPU系列不同于以往产品,它既包含有ARM公司Cortex M 单片机核心,也包含有ARM公司Cortex A 应用处理器核心,以期将STM32单片机产品优势扩展到更 ...

  6. 基于正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2)的个人自学记录

    基于正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2)的个人自学记录 硬件环境 正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2) 底板+核 ...

  7. 通过电脑给linux开发板联网,Linux 开发板通过网线连电脑上网的方法和配置步骤...

    Linux 开发板通过网线连电脑上网的方法和配置步骤 调试 Linux 开发板时, 如果需要开发板上网, 可以用一根网线将开发板网口和笔记本的网口连接到一起, 然后笔记本通过 Wi-Fi 网上, 开发 ...

  8. linux 开发板通过网线连电脑上网的方法和配置步骤

    调试linux开发板时,如果需要开发板上网,可以用一根网线将开发板网口和笔记本的网口连接到一起,然后笔记本通过wifi网上,开发板通过笔记本的wifi共享网络上网 步骤1:首先将笔记本的wifi网路设 ...

  9. linux开发板 pc 通讯_从51单片机到Linux 开发板运行hello world(教程4)

    大家好,我是兔子. 是一个嵌入式软硬件工程师. 正在从单片机开发转岗Linux开发. 这次教大家如何在Linux开发板上运行可执行文件. 简单起见,不涉及到硬件.直接和教程2一样,能在PC虚拟机上运行 ...

最新文章

  1. SharePoint 2010 自定义日志
  2. Cap21_项目组合管理
  3. python中的time库安装步骤-Python中time模块的使用
  4. Latex \section 使用中文
  5. 以太网实习_物联网通信硬件入门项目—光纤收发器(1)——实习内容,适用范围,技术及收益...
  6. 税务计算机网络管理制度,税务系统电子数据处理管理办法(试行)
  7. Python的弱引用
  8. 11-11 又是一年光棍节!
  9. 数字电路逻辑设计之逻辑函数
  10. 申通核心业务系统上云战役
  11. java中榨汁机的代码_《榨汁机食谱大全》(不断更新中)
  12. 循环结构(计算0到100之间的奇数和偶数的和)
  13. Muti-scale related papers
  14. apache基于端口的虚拟主机配置
  15. jstack排查cpu使用率过高
  16. HOJ 13108 Just Another Knapsack Problem (AC自动机+dp)
  17. TP5.1实现支付宝线下收银(扫码枪扫描用户支付宝付款码支付)
  18. 龙族幻想东京机器人一次_龙族幻想凌晨四点的东京机器人坐标-机器人刷新点_6137游戏网...
  19. 完美解决React 注册模块报错Missing message: “menu.xxx“ for locale: “zh-CN“, using default message as fallback问题
  20. 小路绫只会做料理 (ayaya)(树状数组 二分)

热门文章

  1. 批量关闭公众号推送_啥?微信又出新功能了?或将提醒用户关闭长期未读公众号推送...
  2. iview图表_【技术博客】iview常用工具记录
  3. while循环里面scanf_5.1 for循环
  4. 2d游戏引擎_游戏60秒:RTS游戏从2D到3D的蜕变
  5. java 内存溢出和内存泄漏_JAVA中的内存溢出和内存泄漏有很大的区别
  6. pycharm创建mysql项目_python+Django+pycharm+mysql 搭建首个web项目详解
  7. 单元格自适应宽度_Dynamic Conv:自适应卷积内核有效提升网络模型的表征能力不增加模型深度和宽度,牺牲一点延迟...
  8. php 从字符中随机挑一个数,php 对中文字符串的处理- 随机取出指定个数的汉字...
  9. 靠 GitHub 打赏谋生的程序员,他们是怎么做的?
  10. 最搞笑的代码注释,你遇到过几个?