Ubuntu14.04 ec20 4G模块 ppp拨号--rt3070 wifi模块释放sofAP

前言

这个方案是一个复杂项目里的一个关键环节,因此有些地方绕了远路。
这个方案的硬件架构是:

ec20--(串口)--stm32--(串口)--ch340--(USB)--linux--(USB)--rt3070

其中ec20和stm32选用常见的带ec20的开发板
ch340 选用常见的串口转USB (TTL转USB)模块
linux选用Ubuntu14.04操作系统(虚拟机)
rt3070选用常见无线网卡模块

主要大坑

一,驱动不匹配

两个usb驱动,必须确保能够工作
一个是usb340或者341
另一个是rt3070。
采坑缘由:这两个驱动不一定能配合你所安装的linux内核,我因为一开始选用了linux5.0的系统导致2处驱动不匹配从而花费大量时间进行make和修改驱动源码,最终我选择了linux4.0,重头构建在一天内完成了需要的功能。

二,串口配置

在拨号前必须确保串口可以进行通讯,由于是中间有一个stm32做一个串口转发,因此必须配置串口波特率和stm32方面设置的相同。
采坑缘由:ec20官方手册里提供的linux系统下直接拨号的方案是usb直接连接的,而我是通过串口转usb模块连接的,二者一个是网卡驱动一个是转串口驱动,是不一样的。

开工

linux虚拟机需要准备好,操作系统选用Ubuntu14.04(自己下载安装)

第一阶段 ppp 拨号

前期准备

stm32和ec20详细操作略过,stm32里需要设置连接ec20和ch341模组的串口波特率为115200,停止位1,无校验,8位数据位,设置串口直接转发收到数据到另一端。
通过串口调试软件打开连接PC的341的com口,设置好对应波特率勾选发送新行 然后发送 AT ,如果能够收到 OK 代表 4g和stm32的通路工作正常。
再准备好虚拟机,最好能够实现虚拟机和主机之间的复制粘贴,方便接下来的工作和bug修复。虚拟机开启后登录root用户,登录不了用普通用户也可以。登录成功后打开控制台,普遍用户需要先设置root用户账户然后登录(设置略过)登录结果如图:
普通用户切换为root用户
然后连接usb转串口设备。我连接了rt3070和ch341,未连接时是灰色的,连接后是亮色,可以通过右键图标来连接。
连接标志
通过以下指令查看连接情况

lsusb

lsusb
通过以下指令查看串口转usb的端口
dmesg | grep ttyS*
端口
其中ttyUSB0就是接下来ppp拨号所需要的端口

调试一下串口
stty -F /dev/ttyUSB0
如果打印正常,执行配置串口的动作
stty -F /dev/ttyUSB0 115200 cs8
配置完成,再重新看一下是不是配置对了
配置串口
如果提示没有权限,可以使用chmod 777 来给与权限

我想想还有什么准备工作…应该没了

拨号动作

首先查看一下当前的网络接口
ifconfig
网络接口
我这里有3个接口,一个是网线,一个是本地回环,一个是无线模块
没有ppp0,如果拨号成功会生成ppp0接口

拨号语句是很简单的。
主要是相关的准备工作
执行下面的代码生成脚本文件lte
vim /etc/ppp/peers/lte
输入以下内容

nodetach
nolock
/dev/ttyUSB0
115200
user "b"
password "m"
nocrtscts
modem
hide-password
usepeerdns
noauth
noipdefault
novj
novjccomp
noccp
debug
defaultroute
ipcp-accept-local
ipcp-accept-remote
connect 'chat -s -v -f /etc/ppp/peers/lte-chat-connect'
disconnect 'chat -s -v -f /etc/ppp/peers/lte-chat-disconnect'

如图
执行下面的代码生成脚本文件lte-chat-connect
vim /etc/ppp/peers/lte-chat-connect
输入以下内容

ABORT 'NO CARRIER'
ABORT 'ERROR'
ABORT 'NO DIALTONE'
ABORT 'BUSY'
ABORT 'NO ANSWER'
'' AT
OK ATE0
OK ATD*99#
CONNECT ''
                

如图

文件截图
执行下面的代码生成脚本文件lte-chat-disconnect
vim /etc/ppp/peers/lte-chat-disconnect
输入以下内容

ABORT OK

ABORT BUSY
ABORT DELAYED
ABORT "NO ANSWER"
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
ABORT VOICE
ABORT ERROR
ABORT RINGING
TIMEOUT 12
"" \K
"" \K
"" \K
"" +++ATH
"" +++ATH
"" +++ATH
"" ATZ
SAY "\nGoodbay\n"\

如图

如图
vim用vi代替也是可以的
但是vi没有vim用起来舒服
一键安装vim用
apt install vim
至此准备工作全部完成了
来来,开始进行拨号
pppd call lte&

拨号成功如图:

拨号成功
这时候去看一下网络端口:

完成了
这里也说明一下断开连接的方法

poff

拨号的那个控制台会有新的打印信息
打印信息
这个时候再去看ifconfig就没有ppp0网口了

至此拨号动作完成。

第二阶段 wifi释放

这一阶段坑很多,请自行准备搜索引擎。

前期准备

首先接入网卡
我之前已经插上了,如果成功安装了驱动用ifconfig来看是能看到wlan0网卡的。如果是一团乱码那么最好重新安装一下驱动。
查看一下网卡状态
iwconfig
在这里插入图片描述
如图当前还不是ap模式,但是网卡已经就位了
查看一下网卡是否支持ap(rt3070是支持的,为了保险再看一下)
iw list
在这里插入图片描述
如果显示信息里这一段里有ap那就可以支持wifi
然后准备安装本次使用的工具
apt-get install hostapd dnsmasq
一个是hostapd用于管理wifi,另一个是dnsmasq
dns安装过程中可能会出现如下错误:
dns启动异常
这个可以跳过,其余异常不建议跳过,因为会留下隐患。
修改hostapd配置文件
[root@localhost ~]$ sudo vim /etc/hostapd/hostapd.conf
写入以下内容:

interface=wlan0
driver=nl80211
ssid=My_wifi
channel=6
hw_mode=g
ignore_broadcast_ssid=0
auth_algs=1
wpa=3
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

这样就准备了一个名字是My_wifi,密码是12345678的wifi了但是现在还不能释放出来。
要启用这个配置文件还需要做如下修改
先进入文件
# sudo vim /etc/init.d/hostapd
修改一处
DAEMON_CONF=/etc/hostapd/hostapd.conf
如图:

上图

下一步是配置dnsmasq
#sudo vim /etc/dnsmasq.conf
修改为如下内容:

interface=wlan0
listen-address=192.168.100.2
#no-dhcp-interface=
dhcp-range=192.168.100.50,192.168.100.150,12h
server=/google/8.8.8.8

上图代码

到这里要进行配置准备已经结束了接下来就是顺畅的执行环节(或者是智熄的找bug环节,建议大家去找外文论坛的资料,那里更加全面)

释放wifi动作(sofAP)

首先放出全部要执行的命令,如果配置没有遗漏,那么依次执行就行释放出wifi:
1,启用网卡
sudo nmcli nm wifi off
sudo rfkill unblock wlan
sudo ifconfig wlan0 192.168.100.2 netmask 255.255.255.0 up
2,启用dnsmask
sudo /etc/init.d/dnsmasq restart
3,启用hostapd
sudo service hostapd restart
到这一步可以用iwconfig命令查看网卡状态,这时应该可以看到mode是Master状态(ap)如图:
上图效果
这时候手机是可以连上wifi的但是会显示无法访问互联网(如果是正在获取ip那说明前面有误,请自行检查配置是否正确)
4,nat组网 和启用路由转发
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

iptables -A FORWARD -i ppp0 -o wlan0 -m state --state RELATED,ESTABLISH -j ACCEPT

iptables -A FORWARD -i wlan0 -o ppp0 -j ACCEPT

echo "1" > /proc/sys/net/ipv4/ip_forward

这个时候手机连接wifi就可以上网啦
完结撒花
4g-wifi

成功

总结流程

(硬件连接跳过,只说linux命令行操作)
1.ppp拨号
stty -F /dev/ttyUSB0 115200 cs8
pppd call lte&
2.释放wifi

sudo nmcli nm wifi off
sudo rfkill unblock wlan
sudo ifconfig wlan0 192.168.100.2 netmask 255.255.255.0 up
sudo /etc/init.d/dnsmasq restart
sudo service hostapd restart

3.启用nat和路由转发

sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
sudo iptables -A FORWARD -i ppp0 -o wlan0 -m state --state RELATED,ESTABLISH -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o ppp0 -j ACCEPT
echo "1" > /proc/sys/net/ipv4/ip_forward

结语

我从9.24号开始准备研究这个方案,到11月2号完成拨号,其中有很大一部分是时间是因为5.0linux版本和所需驱动不兼容的影响导致我不停的去研究问题。最终使我能够完成这个功能的核心是因为我选择了4.0版本的linux和开始在Ubuntu论坛上查资料,总共用时2两天,完成重新搭建。
希望大家不要跟我犯一样的错误,从而能够节约时间,享受美好生活ヾ(◍°∇°◍)ノ゙。

附加

几个功能的关闭:
断开ppp 连接
poff
关闭wifi
ifconfig wlan0 down

发布了19 篇原创文章 · 获赞 5 · 访问量 1283

猜你喜欢

转载自blog.csdn.net/ex_xyz/article/details/102471054