在Ubuntu上安装移远EC200M驱动

最近公司在做降本相关工作,考虑移远 EC20 4G模组成本较高,希望通过更低成本替换硬件,最后找到EC200M芯片,虽然EC200M速率(最大下行10M/s 最大上行5M/s)上低于EC20(最大下行150M/s 最大上行50M/s),基本上可以满足大部分用户场景(中低速)。

公司使用ubuntu armv7架构 内核版本为4.14.111版本,本身系统做了裁剪,不支持EC200M驱动。如果用户在ubuntu上增加移远EC200M驱动,可按照如下步骤操作:

1.如果从移远公司获取到相关驱动包📎Quectel_UMTS_LTE_5G_Linux_USB_Driver_用户指导_V1.1(1).pdf 说明文档

Quectel_Linux_USB_Serial_Option_Driver_20231211压缩包

压缩包含有

文件夹。

这些文件夹主要是对应内核版本驱动的源码。

2.先下载ubuntu系统对应驱动源码,可以通过uname -a /uname -r来查询内核版本,确定对应驱动源码(公司ubuntu系统内核版本为4.14.111,下面都是以此版本为参考点)。

3.接着将驱动源码赋值到宿主机ubuntu系统(因为目标机的性能不一定有编译环境)(本文宿主机系统为ubuntu adm64),然后解压缩。

4.安装交叉编译工具

下载gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar

解压缩 tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar

设置安装目录。

设置交叉编译环境

在/etc/profile 最后一行追加

export PATH=$PATH:"安装目录/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin"

显示如上信息表示安装交叉环境成功。

  1. 如何内核版本一致,则跳过该步骤,如果-宿主机内核版本和目标机不一样,需要在宿主机上编译内核源码,然后供驱动代码引用。我们的宿主机环境为5.8.0 目标机为4.14.111 版本。所以下载4.14.114内核源码git clone http://github.com/friendlyarm/linux.git -b sunxi-4.14.y --depth 1
  2. 制作自己config文件,到/home/yangxd/linux/arch/arm/configs/找到自己配置相似或者之前系统配置,我们以 sunxi_defconfig 为例。

开启如下配置:

CONFIG_USB_SERIAL = m

CONFIG_USB_SERIAL_WWAN = m

CONFIG_USB_SERIAL_OPTION =m

  1. 开始编译内核并按照以下步骤

编译内核请执行该命令

make -j4 zImage dtbs ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 编译内核

编译模块请执行该命令

make -j4 modules ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 编译模块

将模块安装output请执行下面命令

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=output modules_install

将模块安装到内核里请执行下面命令

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules_install

8.进入对应驱动源码的目录下(/home/yangxd/v4.14.111/)。

1.因为驱动源码使用uname -r 获取内核,宿主机和目标机不一致,所以我们修改内核版本为制定版本。

2.修改交叉编译的环境,ARCH=arm CROSS_COMPILE=arm-linux-gnueablihf-

修改红色部分。

9.开始编译驱动

执行make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

生成三个*.ko文件

可以使用readelf -h *.ko 和modinfo *.ko 分别查询当前ko的架构和内核版本是否和目标机一致。

10.复制驱动option.ko,usb_wwan.ko,qcserial.ko到目标机(ubuntun armv7 架构) 复制到/lib/modules/kneral/drivers/usb/serial/

11.然后执行depmod驱动安装,可以使用dmesg查看是否安装成功,如果出现以下信息表示安装成功

  1. 如果11步骤出现

说明option.ko文件已经内置到build-in中,会加载冲突失败 。如果内核模块加载EC200M驱动,需要重新处理串口option这块。

13.使用移远编写好的串口处理代码 📎usb_serial.zip来解决option.ko加载冲突的问题

14.重新交叉编译补丁源码,类似之前驱动源码编译,修改内核这块

15.生成gsmdriver.ko并把该ko文件发送到目标机中,

将quectel-CM 源码里的那个 default.script 放到 /etc/udhcpc/目录里,

chmod 777 /etc/udhcpc/default.script

16.然后执行depmod命令,就会出现11步骤结果,则表示成功,如果不成功,则重新定位问题,主要错误就是内核版本不一致等等原因

17.解决完之后,就可以执行Quectel_QConnectManager_Linux_V1.6.5.zip编译出quectel-CM进行拨号

18.最终 成功可以使用以下验证。

usb0带有ip地址

route -n 含有 usb路由信息

ping www.baidu.com成功

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 18:14:02       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 18:14:02       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 18:14:02       45 阅读
  4. Python语言-面向对象

    2024-07-22 18:14:02       55 阅读

热门阅读

  1. 【Linux常用命令】之mkdir命令

    2024-07-22 18:14:02       18 阅读
  2. 在 macOS 上使用 Jadx 进行 APK 反编译

    2024-07-22 18:14:02       19 阅读
  3. C++生成随机数的两种方法

    2024-07-22 18:14:02       13 阅读
  4. Blazor Webassembly多标签页实现非iframe的实现

    2024-07-22 18:14:02       17 阅读
  5. Lianwei 安全周报|2024.07.22

    2024-07-22 18:14:02       21 阅读
  6. js弹出对话框

    2024-07-22 18:14:02       14 阅读
  7. 优先级策略:在Eureka中配置服务实例优先级

    2024-07-22 18:14:02       20 阅读
  8. L298N的输出电流与电压

    2024-07-22 18:14:02       18 阅读
  9. 基于vite + pnpm monorepo 实现一个UI组件库

    2024-07-22 18:14:02       18 阅读