Linux驱动开发

您所在的位置:网站首页 常用网卡驱动 Linux驱动开发

Linux驱动开发

2023-12-14 10:56| 来源: 网络整理| 查看: 265

4G通信

使用有线网络或者 WIFI 有很多限制,因为要布线,即使是 WIFI 也得先布线,然后接个路由器。因此在不方便布线的场合,就可以通过 4G 连接到网络。下面介绍如何在 I.MX6U-ALPHA 开发板中使用 4G 来实现联网功能

一、4G网络连接

4G 模块一般都是 MiniPCIE 接口的,虽然用了 MiniPCIE 接口,但是实际上的通信接口都是 USB,所以 4G 模块的驱动就转换为了 USB 驱动。4G 模块厂商都提供了详细的文档讲解如何在 Linux 下使用 4G 模块,以及如何修改 Linux 内核加入 4G 模块驱动。

I.MX6U-ALPHA 开发板也有一个 MiniPCIE 形式的 4G 模块接口,虽然外形是 MiniPCIE 的,但是内心却是 USB 的。I.MX6U-ALPHA 开发板的 4G 模块原理图如下图所示: 在这里插入图片描述 由上图可以看出,U8 就是 MiniPCIE 接口,MiniPCIE 接口连接到了 GL850 这个 HUB 芯片的 DP2 和 DM2,也就是 GL850 的 USB2 接口上,U11 是 Nano SIM 接口

二、4G模块介绍

ME3630 4G 模块是深圳高新兴物联(前身是中兴物联)出品的 4G LTE 模块,是一款 LTE Cat.4 七模全网通 4G 模块,在 LTE 模式下可以提供 50Mbps 上行速率以及 150Mbps 的下行速率,并支持回退到 3G 或 2G 网络。其特性如下:

– 一路 USB2.0 接口 – 一路 UART 接口 – SIM 卡接口支持 1.8/3.0V – 内置 TCP、 UDP、 FTP 和 HTTP 等协议 – 支持 RAS/ECM/NDIS – 支持 AT 指令

ME3630 4G 模块有多种配置,这里主要使用到 ME3630 的数据通信功能,在使用 ME3630 4G 模块之前,需先将其插入到开发板的 MiniPCIE 座上、上紧螺、插入 Nano SIM 卡、接上天线,如下图: 在这里插入图片描述

三、4G模块实验 3.1 模块驱动修改 添加 USB 设备信息:Linux 源码的 drivers/usb/serial/option.c 文件中 option_ids 数组里添加 ME3630 的 PID 和 VID { USB_DEVICE(0x19d2, 0x0117) }, /* ME3630*/ { USB_DEVICE(0x19d2, 0x0199) }, { USB_DEVICE(0x19d2, 0x1476) },

在这里插入图片描述

添加 ECM 支持程序:支持 ECM 接口,可以通过该接口轻松联网。在 drivers/usb/serial/option.c 文件 option_probe 函数里面添加如下内容 /* EM3630 */ if (serial->dev->descriptor.idVendor == 0x19d2 && serial->dev->descriptor.idProduct == 0x1476 && serial->interface->cur_altsetting->desc. bInterfaceNumber == 3) return -ENODEV; if (serial->dev->descriptor.idVendor == 0x19d2 && serial->dev->descriptor.idProduct == 0x1476 && serial->interface->cur_altsetting->desc. bInterfaceNumber == 4) return -ENODEV; if (serial->dev->descriptor.idVendor == 0x19d2 && serial->dev->descriptor.idProduct == 0x1509 && serial->interface->cur_altsetting->desc. bInterfaceNumber == 4) return -ENODEV; if (serial->dev->descriptor.idVendor == 0x19d2 && serial->dev->descriptor.idProduct == 0x1509 && serial->interface->cur_altsetting->desc. bInterfaceNumber == 5) return -ENODEV;

在这里插入图片描述

配置 Linux 内核:

使能 USBNET 功能

-> Device Drivers -> -*- Network device support -> USB Network Adapters -> -*- Multi-purpose USB Networking Framework

使能 USB 串口 GSM、 CDMA 驱动

-> Device Drivers -> [*] USB support -> USB Serial Converter support -> USB driver for GSM and CDMA modems

使能 USB 的 CDC ACM 模式

-> Device Drivers -> [*] USB support -> Support for Host-side USB -> USB Modem (CDC ACM) support 编译 Linux 内核,然后使用新的 zImage 启动开发板。如果 ME3630 已经插上的话,系统启动以后就会输出如下信息 在这里插入图片描述

以上可见,ME3630 虚拟出了 3 个 USB 设备,分别为 ttyUSB0~ttyUSB2。ECM 模式下,可以通过运行ifconfig -a命令查看对应的网卡,名字可能为usbX/ecmX/ethX 等,如果存在的话就说明 ECM 接口驱动加载成功

在这里插入图片描述

3.2 PPP联网测试 使能 Linux 内核 ppp 功能:支持 ppp 拨号上网,按如下配置并重新编译内核 -> 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 移植 pppd 软件:通过 pppd 软件来实现 ppp 拨号上网

移植之前先删除掉/usr/sbin/chat 这个软件(Busybox制作根文件系统的时候生成的),因为移植pppd也会编译出 chat 软件,不删除的话会出错

将源码 ppp-2.4.7.tar.gz 拷贝到 Ubuntu 下并解压,进入解压后的文件夹进行配置编译

cd ppp-2.4.7/ ./configure //配置 make CC=arm-linux-gnueabihf-gcc //编译 /************************************************/ /*若提示bison和flex "not found" 的话就安装这两个库*/ sudo apt-get install bison sudo apt-get install flex

编译完成后会在当前目录下生成 chat/chat、pppd/pppd、pppdump/pppdump 和 pppstats/pppstats 这四个文件,将四个文件拷贝到开发板根文件系统中 /usr/bin 目录下

sudo cp chat/chat /home/andyxi/linux/nfs/rootfs/usr/bin/ -f sudo cp pppd/pppd /home/andyxi/linux/nfs/rootfs/usr/bin/ -f sudo cp pppdump/pppdump /home/andyxi/linux/nfs/rootfs/usr/bin/ -f sudo cp pppstats/pppstats /home/andyxi/linux/nfs/rootfs/usr/bin/ -f

完成以后输入“pppd -v”查看版本号,如果 pppd 版本号显示正常就说明 pppd 移植成功

ppp 上网测试

使用 pppd 进行拨号上网之前要先创建 4 个文件,这 4 个文件须放到同一个目录下。在开发板根文件系统下创建 /etc/gosuncn 目录

在 /etc/gosuncn 目录下,创建名为 “ppp-on” 的shell 脚本文件

#!/bin/sh clear OPTION_FILE="gosuncn_options" DIALER_SCRIPT=$(pwd)/gosuncn_ppp_dialer exec pppd file $OPTION_FILE connect "chat -v -f ${DIALER_SCRIPT}"

在 /etc/gosuncn 目录下,创建名为 “gosuncn_options” 的文件

/dev/ttyUSB2 //联通或移动卡用ttyUSB2,电信卡用ttyUSB0 115200 crtscts modem persist lock noauth noipdefault debug nodetach user Anyname //电信卡,要改为"user card" password Anypassword //电信卡,要改为"password card" ipcp-accept-local ipcp-accept-remote defaultroute usepeerdns noccp nobsdcomp novj dump

在 /etc/gosuncn 目录下,创建名为 “gosuncn_ppp_dialer” 的文件

ABORT "NO CARRIER" ABORT "ERROR" TIMEOUT 120 "" ATE SAY "ATE" ECHO ON OK ATH OK ATP //"3GNET"是联通卡的APN码,移动卡的话要改为"CMNET" //若是电信卡,下面行要改为 OK "AT+ZCAPN=card,card" OK AT+CGDCONT=1,\"IP\",\"3GNET\" OK ATD*99# //电信卡,要改为"ATD#777" CONNECT

在 /etc/gosuncn 目录下,创建名为 “disconnect” 的脚本文件

#!/bin/sh killall pppd

最后还要给予 ppp-on 和 disconnect 这两个文件可执行权限

chmod 777 ppp-on disconnect

使用./ppp-on &命令连接 4G 网络,可能会出现如下问题

在这里插入图片描述

#提示不能创建“Can't create lock file /var/lock/LCK..ttyUSB2” #检查根文件系统是否存在/var/run 和/var/lock,没有的话就创建这两个文件夹 mkdir /var/run //创建/var/run 文件夹 mkdir /var/lock //创建/var/lock 文件夹

在这里插入图片描述

#使用`./ppp-on &`命令重连后 #提示找不到“/etc/ppp/resolv.conf”这个文件,到相关目录下手动创建该文件 touch resolv.conf

创建完成后重启开发板!进入到/etc/gosuncn 目录,使用./ppp-on &命令完成拨号上网。成功后会生成名为“ppp0”的网卡

在这里插入图片描述 4G 网络测试需要关闭其他网卡,否则可能会有问题,但现在是通过网络启动的系统,且通过 NFS 挂载的根文件系统,因此无法关闭其他的网卡。为了解决这个问提,只能将 uboot、 Linux kernel、 .dtb 设备树和根文件系统都烧写到板子的EMMC 或 NAND 上,然后直接启动 EMMC 或 NAND 上的系统即可,这样就不需要其他网卡工作了。烧写方法请参考系统烧写一文。

系统烧写完成后设置开发板从 EMMC 启动,启动后按照前面的步骤先让 4G 模块连接上网络。确保当前开发板只有一个 ME3630 对应的 ppp0 网卡,最后直接 ping 百度官网即可,结果如下图示 在这里插入图片描述

3.3 ECM联网测试

对于支持 ECM 接口的模块可以直接通过 ECM 上网, ME3630 模块支持 ECM 接口,重启开发板,输入“ifconfig -a”命令可以看到有一个名为“usb0”的网卡,这个 usb0 网卡就是 ECM 接口对应的网卡 在这里插入图片描述 使用 minicom 输入AT 指令,先用 minicom 打开 ttyUSB1, ttyUSB1 就是 ME3630 的 AT 指令串口,波特率设置为 115200,然后依次输入如下指令:

输入 AT 指令:如果模块已经设置为 ECM 模式,则此不需要此步骤

AT+ZSWITCH=L

使用 AT 指令+CGDCONT 来设置数据参数

//联通卡的 APN 为 3GNET //电信卡的 APN 为 CTNET //移动卡的 APN 为 CMNET AT+CGDCONT=1, "IP" , "CMNET"

发送连接 AT 命令

AT+ZECMCALL=1

连接成功以后打开 usb0 网卡,并获取 IP 地址

ifconfig usb0 up //打开 usb0 网卡 udhcpc -i usb0 //获取 IP 地址

在这里插入图片描述

IP 地址获取成功后,ping 一下百度官网,如果能 ping 通说明 ME3630 的 ECM 接口联网成功。如果提示“ bad address ‘www.baidu.com’”,可以检查一下 DNS 服务器地址设置是否正确,打开/etc/resolv.conf 文件,加入“nameserver 114.114.114.114”即可

3.4 GNSS定位测试

GNSS 功能,也就是 GPS 定位,在上面移植 ME3630 驱动时我们知道最终会出现3个 ttyUSB 设备,分别为 ttyUSB0~ttyUSB2,其中 ttyUSB1 为 GNSS 接口。 GPS 模块是串口输出的,因此可以直接使用 minicom 来查看 ttyUSB1 输出的 GNSS 信息。minicom配置如下: 在这里插入图片描述 minicom 打开串口时,有时会提示"/dev/ttyUSB1 is locked"的错误,是由于上次没有正确关闭 minicom,导致在 /var/lock 目录下存在LCK…XXX 文件 (XXX 就是具体的串口设备文件名,比如 ttyUSB1),进入"/var/lock" 下,删除该文件即可

ME3630 默认关闭 GNSS 定位输出功能的,必须先使用 AT 指令配置,minicom 打开串口后,输入如下AT指令进行配置:

ATI //查看固件信息 Manufacturer: GOSUNCNWELINK Model: ME3630-W Revision: ME3630C3CV1.0B03 IMEI: 864863045876287 OK AT+ZGINIT //初始化 GPS OK AT+ZGPSEVENT=1 //使能 GPS 事件上报 OK AT+ZGMODE=3 //设置定位模式 OK AT+ZGPORT=0 //定位信息从 AT、 MODEM、 UART 三个口同时上报 OK AT+ZGNMEA=31 //设置 GPS 数据为 NMEA 格式 OK AT+ZGPSR=1 //使能 ZGPSR 数据 OK AT+ZGRUN=2 //连续定位模式 OK

以上 AT 指令配置完成后 ME3630 就会开始搜星,注意: GPS 天线一定要放到室外! ME3630 搜星结束以后就会输出 NEMA 格式的定位信息 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3