在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成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tongue通lingual:灵根,舌也!

灵,指心灵、精神意识;灵根:汉语“灵根”,通常指人的舌头主。舌头是人心灵的表达根器,因此,灵根——指心灵外化的肉身凭据、可以像树根(或一切植物根部)一样延伸、像树根一样重要身体…

磁感应传感器 - 从零开始认识各种传感器【第十二期】

1、什么是磁感应传感器 磁感应传感器又叫做磁力计,是可以测量磁场大小或方向的设备。因为地球本质上是一个巨大的磁铁。磁力计可让您测量空间中某一点的磁场强度以及磁场方向。 图1 磁力计 磁力计已广泛应用于各种应用。它们用于测量地球磁场、地理测量、探测潜艇…

Python内存管理:引用计数与垃圾回收

✨ 内容: 在Python中,内存管理是一个重要且常常被忽视的话题。了解Python如何管理内存,不仅能帮助我们编写高效的代码,还能避免潜在的内存泄漏问题。今天,我们将通过一个实际案例,深入探讨Python的内存管理…

RabbitMQ:如何保证消息的可靠性?

RabbitMQ基础 RabbitMQ支持的消息模型 SpringBoot集成RabbitMQ 一、发送者的可靠性 消息从发送者发送消息,到消费者处理消息,需要经过的流程是这样的: 消息从生产者到消费者的每一步都有可能导致消息丢失: 发送消息时丢失&am…

Spring Boot 学习(10)——固基(Idea 配置 git 访问 gitee)

几转眼就过了两个月,其实也没有闲着,学也学了,只是繁杂事多,学的不如以前多,也没有做过笔记了。 以前做开发因条件受限,没有什么 git ,也没有 gitee。现在出来混要跟上形势才行,学习…

掌握VR全景技术,需要具备哪些条件?

VR全景技术自从进入市场以来,就在各个行业领域尝试落地运用,包括但不限于广告宣传、学校教育、医疗、工业、农业等领域。随着5G 技术的不断普及,VR全景技术也逐渐被应用到日常生活中的各个方面,从地产中介到车企销售,从…

【数据结构】探索排序的奥秘

若有不懂地方,可查阅我之前文章哦! 个人主页:小八哥向前冲~_csdn博客 所属专栏:数据结构_专栏 目录 排序的概念 几种排序方法介绍 冒泡排序 选择排序 插入排序 堆排序 向上调整建堆排序 向下调整建堆排序 希尔排序 快速…

快乐数-快慢指针法

题目描述: 个人题解: 通过反复调用 getNext(n) 得到的链是一个隐式的链表。隐式意味着我们没有实际的链表节点和指针,但数据仍然形成链表结构。起始数字是链表的头 “节点”,链中的所有其他数字都是节点。next 指针是通过调用 ge…

使用两种不同的方法估计几何布朗运动随机过程的参数

使用两种不同的方法估计几何布朗运动随机过程的参数 文章目录 一、说明二. 随机过程三、马尔可夫过程3.1. 维纳进程3.2. 广义维纳过程3.3. 伊藤进程 四、几何布朗运动 (GBM)五、用于估计GBM工艺参数的MLE方法5.1. 最大似然估计如何工作?5.2、…

2024全国青少年信息素养大赛图形化编程复赛真题大全

2024年全国青少年信息素养大赛图形化编程复赛全国结束了,经过了3次各个赛区(7月6日、13日、20日)图形化编程小低组、小高组整体来看,真题出的都比较有水平,2024年全国青少年信息素养大赛总决赛将在2024年8月16日~20日在…

MySQL面试篇章——MySQL索引

文章目录 MySQL 索引索引分类索引创建和删除索引的执行过程explain 查看执行计划explain 结果字段分析 索引的底层实现原理B-树B树哈希索引 聚集和非聚集索引MyISAM(\*.MYD,*.MYI)主键索引辅助索引(二级索引) InnoDB&a…

PRC gRPC 框架

概述 RPC主要目的在于让开发者,能够方便的调用远程服务器上的服务,而不需要关注底层的网络通信细节。其是一种进程间通信技术,允许程序在不同计算机上执行代码。 RPC技术主要用于分布式系统、微服务架构以及需要进行跨网络调用服务的应用中…

项目实战二 HIS项目

目标: 项目的操作流程: 开发体系 前端开发:负责页面的编写 HTML CSS JavaScript 后端开发:看不到 摸不着的功能 常用开发语言 PHP JAVA Python 框架 : 半成品 做好的功能模块 版本控制 Git 分布式版本控…

鼠标连点器:是什么?如何用?鼠标自动点击器好用吗?说明书详细版(国内外6款电脑鼠标连点器分享)值得收藏!

知识科普1:鼠标连点器是什么? ⭕答:鼠标连点器,又称为鼠标点击器或自动点击器,是一种能够模拟鼠标点击操作的计算机软件。 鼠标连点器可以根据用户设定的参数,自动进行连续的鼠标点击操作,从而…

SQL labs-SQL注入(三)

本文仅作为学习参考使用,本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 引言: 盲注简述:是在没有回显得情况下采用的注入方式,分为布尔盲注和时间盲注。 布尔盲注:布尔仅有两种形式,ture&#…

【LLM】-05-提示工程-部署Langchain-Chat

目录 1、软硬件要求 1.1、软件要求 1.2、硬件要求 1.3、个人配置参考 2、创建cuda环境 3、下载源码及模型 4、配置文件修改 5、初始化知识库 5.1、训练自己的知识库 6、启动 7、API接口调用 7.1、使用openai 参考官方wiki,本文以Ubuntu20.04_x64&#xf…

微信小程序数组绑定使用案例(二)

一、数组事件绑定&#xff0c;事件传递数据 1.wxml <text>姓名&#xff1a;{{name}} </text> <block wx:for"{{list}}"><button bind:tap"nameClick2" data-name"{{item}}">修改:{{item}}</button> </block&…

想学习Python爬虫的宝子们可以看过来,从基础开始看这一篇文章就够了!

1. 预备知识 学习者需要预先掌握Python的数字类型、字符串类型、分支、循环、函数、列表类型、字典类型、文件和第三方库使用等概念和编程方法。 2. Python爬虫基本流程 a. 发送请求 使用http库向目标站点发起请求&#xff0c;即发送一个Request&#xff0c;Request包含&am…

单调栈(随缘复习到了,顺手刷了)

也是不知道为什么突然又复习到单调栈了&#xff0c;所以顺手刷了三道题&#xff0c;总结一下 P6503 [COCI2010-2011#3] DIFERENCIJA 思路&#xff1a;这题是要求每个子区间里面的最大值和最小值的差&#xff0c;我们一开始想的必然是纯暴力呀&#xff0c;但是一看这数据&#…

自动驾驶系列—智能巡航辅助功能中的车道变换功能介绍

自动驾驶系列—智能巡航辅助功能中的车道中央保持功能介绍 自动驾驶系列—智能巡航辅助功能中的车道变换功能介绍 自动驾驶系列—智能巡航辅助功能中的横向避让功能介绍 自动驾驶系列—智能巡航辅助功能中的路口通行功能介绍 文章目录 1. 背景介绍2. 功能定义3. 功能原理4. 传感…