移远EC20在树莓派下的移植
一.本地安装编译树莓派内核
1,下载源代码,这可能需要一些时间:
git clone --depth=1https://github.com/raspberrypi/linux
2.添加丢失的依赖
sudo apt-get install bc
3.安装字符界面运行库
sudoaptitude install libncurses5-dev
4.将下载好的内核放入树莓派中
5.cd linux内核
6.把它加到Linux源码的drivers/usb/serial/option.c文件里
#define EC20_VID 0x2c7c
#define EC20_PID 0x0125
7.在option_ids 列表中增加
{ USB_DEVICE(EC20_VID, EC20_PID)},
8.make menuconfig 配置:
USB相关:
[*] Device Drivers →
[*] USB Support →
[*] USB Serial Converter support →
[*] USB driver for GSM and CDMA modems
保存退出
9.树莓派2/3 默认编译配置
cdlinux内核目录
KERNEL=kernel7
make bcm2709_defconfig
10.编译和安装内核,模块和设备树二进制数据块,(要等2,3小时):
make -j4 zImage modules dtbs
sudo make modules_install
sudo cp arch/arm/boot/dts/*.dtb /boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb*/boot/overlays/
sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
sudo scripts/mkknlimg arch/arm/boot/zImage /boot/$KERNEL.img
11.仔细检查完每一步没问题后,reboot
12.可以看到ec20已经驱动成功,这三个就是我们所需要的。13.用AT指令测试
cat /dev/ttyUSB2 &
二.拨号上网测试(用官方的脚本)
安装ppp
sudo apt-get install ppp
有2种方法启动ppp拨号
方式1: 拷贝quectel-chat-connect quectel-chat-disconnect quectel-ppp到/etc/ppp/peers目录下。
并在quectel-ppp里修改你的串口设备名,pppd拨号使用的username,password。
在quectel-chat-connect里修改你的APN。APN/username/password是从你的网络提供商那里获取的。
然后使用下面的命令启动ppp拨号, 命令最后的&可以让pppd后台运行
pppd call quectel-ppp &
方式2:使用quectel-pppd.sh拨号,命令形式如下:
./quectel-pppd.sh串口设备名(比如/dev/ttyUSB3) APN username password
ip-up:pppd在获取ip和dns之后,会自动调用这个脚本文件来设置系统的DNS
嵌入式系统一般需要拷贝这个文件到/etc/ppp目录下。
请确保该文件在你的系统里有可执行权限。
quectel-ppp-kill用来挂断拨号的,pppd必须被正常的挂断,否则可能会导致你下次ppp拨号失败。
使用下面方式来调用这个脚本
./quectel-ppp-kill
得到一个动态ip
ping 一下谷歌
三,TCP链接阿里云
1.树莓派作为client端口
编写client.py代码如下:
import socket
import time
import sys
SERVER_IP = "120.25.215.94"//阿里云ip
SERVER_PORT =8080 //树莓派ip
print("Starting socket: TCP...")
server_addr = (SERVER_IP, SERVER_PORT)
socket_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
while True:
try:
print("Connecting to server @ %s:%d..." %(SERVER_IP, SERVER_PORT))
socket_tcp.connect(server_addr)
break
except Exception:
print("Can't connect to server, try it latter!")
time.sleep(1)
continue
print("Receiving package...")
while True:
try:
data = socket_tcp.recv(512)
if len(data)>0:
print("Received: %s" %data)
socket_tcp.send("Hello TCP!")
time.sleep(1)
continue
except Exception:
socket_tcp.close()
socket_tcp = None
sys.exit(1)
2.阿里云的sever端先不写代码,用网络助手测试下
阿里云和树莓派成功通过4G网络TCP链接。