Linux 下安装 移远4G模块驱动,并调试
安装环境
ubuntu 18.04
内核linux-Kernel-4.15.0
对接移远的 EC25的 4G 模组.
注意事项
如果碰到 AT命令 一组命令都正常. 但是用PPP或者 gobinet +QconnectManager 都拨号不成功的话,得思考一下相关桌面系统有没有安装其他的网络或者4G拨号工具.比如我使用的ubuntu 安装了modemmanager,得把它卸载掉apt-get remove modemmanager.
安装前准备
下载内核源码
sudo apt install linux-source-4.15.0
或者 到https://mirrors.edge.kernel.org/pub/linux/kernel/下载源码
有些系统被设置了 禁止apt
# 在终端输入下面命令强制解锁
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
sudo rm /var/lib/dpkg/lock-frontend
复制代码编译内核需要一些图形化处理的库
sudo apt-get install libncurses5-dev libssl-dev
sudo apt-get install build-essential openssl
sudo apt-get install zlibc minizip
sudo apt-get install libidn11-dev libidn11
复制代码
如果报错:某某 依赖没有被安装,去pkgs.org 该网站下载 例如: libncurses5-dev_6.1-1ubuntu1.18.04_amd64.deb
下载好后 dpkg -i 路径/
特别注意modemmanager
这是个坑,因为modemmanager 也是拨号上网的程序,只要把它卸载了才能拨号成功.
apt-get remove modemmanager
更改内核源码
添加USB 相关的内核源码
add VID 和 PID
/drivers/usb/serial/option.c
static const struct usb_device_id option_ids[] = {
#if 1 //Added by Quectel
{ USB_DEVICE(0x2C7C, 0x0125) }, /* Quectel EC25 */
#endif
}
复制代码/drivers/usb/serial/qcserial.c
# 删除这行
{USB_DEVICE(0x05c6, 0x9215)}, /* Acer Gobi 2000 Modem device (VP413) */
复制代码/drivers/net/usb/qmi_wwan.c
# 删除这行
{QMI_GOBI_DEVICE(0x05c6, 0x9215)}, /* Acer Gobi 2000 Modem device (VP413) */
复制代码添加USB数据包传输机制
/drivers/usb/serial/usb_wwan.c
static struct urb *usb_wwan_setup_urb(struct usb_serial_port *port,
int endpoint,
int dir, void *ctx, char *buf, int len,
void (*callback) (struct urb *))
{
struct usb_serial *serial = port->serial;
struct urb *urb;
urb = usb_alloc_urb(0, GFP_KERNEL);/* No ISO */
if (!urb)
return NULL;
usb_fill_bulk_urb(urb, serial->dev,
usb_sndbulkpipe(serial->dev, endpoint) | dir,
buf, len, callback, ctx);
#if 1 //Added by Quectel for zero packet
if (dir == USB_DIR_OUT) {
struct usb_device_descriptor *desc = &serial->dev->descriptor;
if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9090))
urb->transfer_flags |= URB_ZERO_PACKET;
if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9003))
urb->transfer_flags |= URB_ZERO_PACKET;
if (desc->idVendor == cpu_to_le16(0x05C6) && desc->idProduct == cpu_to_le16(0x9215))
urb->transfer_flags |= URB_ZERO_PACKET;
if (desc->idVendor == cpu_to_le16(0x2C7C))
urb->transfer_flags |= URB_ZERO_PACKET;
}
#endif
return urb;
}
复制代码添加系统的重启 和设备重启的机制
/drivers/usb/serial/option.c
stati