作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习
擅长领域:驱动开发,嵌入式软件开发,BSP开发
作者主页:一个平凡而乐于分享的小比特的个人主页
文章收录专栏:RK3568驱动开发,本专栏为rk3568驱动开发学习记录
欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖
1.内核修改及支持
1.1 原理图分析
1.2 内核配置
Device Drivers ->
[*] Network device support ->
<*> PPP (point-to-point protocol) support ->
<*> PPP BSD-Compress compression ->
<*> PPP Deflate compression
[*] PPP filtering
<*> PPP MPPE compression (encryption)
[*] PPP multilink support
<*> PPP over Ethernet
<*> PPP support for async serial ports
<*> PPP support for sync tty ports
2. 应用程序测试
2.1 模块开关机
开机方式
首先操作GPIO,给4G模块上电
(注意:开关机按键,复位按键,在开发板上是MPU的GPIO出来后,硬件做了反向的。低电平,上电 低脉冲,复位)
输入如下命令
gpioset 3 0=0
gpioset 3 1=0
将这两个引脚拉低后,模块上电如下所示
关机方式
软件方式关机
先发送AT+QPOWD命令给模块,再拉高引脚
microcom /dev/ttyUSB3 -s 115200
AT+QPOWD
按住Ctrl+x,再输入如下命令
gpioset 3 1=1
(注意:在发送AT命令后需要在几秒内拉高gpio引脚,否则模块会再次开启)
硬件方式关机
先拉低RESET大于100ms后,拉低电源引脚Power_on
硬件关机时序如下图所示:
当4G模块上电后,可以在dev目录下看到四个ttyUSB设备
AT命令检测
我们可以使用microcom命令对串口发送AT命令
microcom /dev/ttyUSB3 -s 115200
AT
检测手机卡是否在位
AT+CPIN?
检查网络名字
AT+COPS?
CHN-CT 表示中国电信
网络注册状态
AT+CREG?
第二个参数为0 表示没有注册网络,为1表示网络已注册
信号强度
AT+CSQ
数值越大表明信号质量越好;
2.2 PPP拨号方式
内核配置好后,编译生成新的镜像烧录到开发板中
启动系统时,会看到如下信息
接下来需要使用到pppd软件,需要通过 pppd 这个软件来实现 ppp 拨号上网 。
下载网址:Index of /pub/ppp (samba.org)
下载好后交叉编译,在make install的时候可能会报下面这种类型的错误
strip: Unable to recognise the format of the input file ‘xxxxxxx’
解决方法:ppp-2.4.5移植(交叉编译)_ppp交叉编译-CSDN博客
编译生成好的四个可执行文件:chat pppd pppdump pppstats 将这四个文件拷贝到开发板的/bin文件夹下
输入pppd -v
如下pp图所示,表示移植成功。
ppp拨号方式需要编写三个脚本文件存放在/etc/ppp/peers下
默认是没有这些文件夹的,所以需要去创建ppp和peers文件夹,创建好后在peers下创建如下三个脚本文件
rasppp.sh
#!/bin/sh
hide-password
noauth
connect '/bin/chat -s -v -f /etc/ppp/peers/rasppp-chat-connect.sh'
disconnect '/bin/chat -s -v -f /etc/ppp/peers/rasppp-chat-disconnect.sh'
debug
/dev/ttyUSB3
115200
defaultroute
noipdefault
novj
novjccomp
noccp
ipcp-accept-local
ipcp-accept-remote
local
lock
dump
nodetach
#这里我用的是电信卡
user card
password card
#如果是移动或者联通的卡将上面两行改为
#user Anyname
#password Anypassword
crtscts
remotename 3gppp
ipparam 3gppp
usepeerdns
rasppp-chat-connect.sh
TIMEOUT 15
ABORT "BUSY"
ABORT "ERROR"
ABORT "NO ANSWER"
ABORT "NO CARRTER"
ABORT "NO DIALTONE"
""AT
OK \rATZ
OK \rAT+CGDCONT=1,"IP",""
OK-AT-OK ATDT#777
CONNECT \d\c
rasppp-chat-disconnect.sh
ORT "ERROR"
ABORT "NO DIALTONE"
SAY "\NSending break to the modem\n"
""\k"
""+++ATH"
SAY "\nGood bye !\n"
添加完以上三个脚本文件后,现在可以使用 ppp
尝试拨号
pppd call rasppp.sh & #后台进行拨号
如果拨号正常如下图所示
从程序的输出中我们可以获得以下信息:
本机IP 10.86.31.158
主要 DNS 服务器:202.103.24.68
次要 DNS 服务器: 202.103.44.150
当我们使用ifconfig
查看网络信息会发现一个ppp0的网络
此时我们需要通过上面获得的网络信息来配置这个ppp0网络
sudo ip route add default via 10.86.31.158
echo "nameserver 202.103.24.68" | tee -a /etc/resolv.conf
echo "nameserver 202.103.44.150" | tee -a /etc/resolv.conf
配置好之后我们就可以上网了,可以ping百度来测试
2.3 ECM模式拨号上网
上面的ppp模式拨号较为繁琐,需要大量的步骤依赖pppd软件,并且ppp拨号的稳定性不强,所以接下来介绍ECM模式,只需要AT命令就可以拨号上网
当我们上电4G模块之后,我们发送如下AT命令切换模块的工作模式为ECM
microcom /dev/ttyUSB3 -s 115200
AT+QCFG="usbnet",1
发送AT命令后,模块会自动重启,如下图所示
我们在ifconfig
查看网络时候,可以看到多了一个usb0网络,并且自动获取IP地址
同样,我们可以ping百度测试上网功能