[原創]移遠RM500U-CN模組驅動移植

来源:https://www.cnblogs.com/zhijun1996/archive/2022/07/16/16484126.html
-Advertisement-
Play Games

1. 簡介 中國廣電正式放號了,為了支持廣電700MHz的5G基站,需要換用新的5G模組.移遠通信的RM500U模組正好可以滿足我們的使用要求; 選用該模組的原因:雙卡單待 支持SIM卡熱插拔 支持中國廣電700MHz基站 版本升級方便 具體參數請到公司官網查看吧> https://www.quec ...


1. 簡介

  • 中國廣電正式放號了,為了支持廣電700MHz的5G基站,需要換用新的5G模組.移遠通信的RM500U模組正好可以滿足我們的使用要求;
  • 選用該模組的原因:雙卡單待 支持SIM卡熱插拔 支持中國廣電700MHz基站 版本升級方便
  • 具體參數請到公司官網查看吧> https://www.quectel.com/cn/product/5g-rm500u-cn

2. 編譯驅動

2.1 獲取驅動包

  • 不用多說,請聯繫廠商獲取

2.2 選擇合適的版本

  • 解壓
tar -xvf Quectel_Linux_USB_Serial_Option_Driver_20211012.tgz
  • 解壓成功後,會產生一個目錄20211012,其中存放著各個版本的驅動源碼,如下
  • 根據自己的內核版本,選擇相應版本的驅動.比如我的內核版本是3.17.0,我就選擇v3.17.1版本的驅動
# 查看內核版本
$ uname -a
Linux (none) 3.17.0-xilinx #1 SMP PREEMPT Fri Nov 3 11:57:52 CST 2017 armv7l GNU/Linux

# 選擇版本最接近的驅動
$ cd 20211012/v3.17.1/

2.3 修改驅動源碼

  • 奇怪,移遠提供的源碼包預設竟然不支持RM500U-CN模組,還需要自己在源碼中手動添加對RM500U-CN模組的支持,難道是因為這個模組比較新,驅動還未更新?(2022/7/16)
  • 修改驅動源碼路徑下的drivers/usb/serial/option.c,添加對RM500U-CN模組的支持
  • linux下lsusb命令可以看到模組對應的PIDVID分別為0x2C7C0x0900,將其添加到option.coption_ids[]數組中,如下圖:

2.4 創建驅動安裝目錄

  • 因為並不是在編譯機上進行安裝,需要進行交叉編譯,因此創建一個驅動的安裝目錄,便於後續驅動移植
$ make install

2.5 交叉編譯

  • 修改Makefile如下:
# 指明內核源碼路徑,這裡因為有些敏感信息,我隱藏了一部分路徑,修改成自己的源碼路徑即可
KERNELDIR := /***/***/***/***/***/kernel/build/linux-***-v2014.4            # 內核源碼路徑
PWD       := $(shell pwd)

obj-m+=./drivers/usb/serial/option.o
obj-m+=./drivers/usb/serial/usb_wwan.o
obj-m+=./drivers/usb/serial/qcserial.o

modules: clean
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

install: modules
        # 這裡表示編譯完成後,執行make install時將驅動拷貝到步驟2.4自定義的路徑下
        cp $(PWD)/drivers/usb/serial/*.ko ./install

clean:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) clean
  • 開始編譯,指定交叉編譯工具
# make install ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi-
  • 等待編譯完成,查看驅動安裝目錄:
$ ls install/
option.ko  qcserial.ko  usb_wwan.ko
  • 編譯完成

3. 安裝驅動

3.1 將編譯好的驅動拷貝到目標機上,安裝之

# insmod usb_wwan.ko
# insmod option.ko
# insmod qcserial.ko

3.2 檢查驅動是否正常

  • 驅動安裝完成後,正常情況下就會在/dev目錄下產生5個ttyUSB,dmesg如下:
# dmesg | grep ttyUSB*
[ 1121.543526] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB9
[ 1121.593404] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB10
[ 1121.614269] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB11
[ 1121.655317] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB12
[ 1121.684846] usb 1-1.1: GSM modem (1-port) converter now attached to ttyUSB13
  • 如果驅動安裝過程中沒有報錯,但是模組沒有識別,重新給模組上下電試試

4. 問題排查

Q:驅動安裝正常,設備節點也正常,但是ifconfig看不到5G模組對應的interface,這是什麼原因呢?

  • 因為RM500U-CN模組預設使用的是USB NCM驅動,但是我司的嵌入式設備上使用的是cdc_ether驅動,需要修改5G模組的模式
  • 務必查看RM500U-CN模組相關文檔,確定驅動類型
  • 使用minicom 或 microcom輸入如下AT指令,並重啟模組(minicom或microcom如何使用這裡就不贅述了,網上資料一大堆):
# minicom -D /dev/ttyUSB11
AT+QCFG="usbnet",1           # 重啟模組生效
  • 模組重啟後,dmesg可以看到如下信息:說明usb0就是5G模組對應的interface
[ 1121.500432] cdc_ether 1-1.1:1.0 usb0: register 'cdc_ether' at usb-zynq-ehci.0-1.1, CDC Ethernet Device, 3e:37:f1:99:c9:6e
  • tips
# 如使用RNDIS驅動,需要執行如下AT指令
AT+QCFG="usbnet" ,3
# 如使用NCM驅動,需要執行如下AT指令
AT+QCFG="usbnet" ,5

5. 常用AT指令

#查詢卡是否成功識別
AT+CPIN?
+CPIN: READY

OK

#查詢APN
AT+CGDCONT?
+CGDCONT: 1,"IPV4V6","3gnet","0.0.0.0",0,0,0,0,,,,,,0,,,0,,0,0,0,0
+CGDCONT: 11,"IPV4V6","ims","0.0.0.0",0,0,0,0,,,,,,0,,,0,,0,0,0,0

OK

#查詢運營商
AT+QSPN
+QSPN: "CHN-UNICOM","UNICOM","CHN-UNICOM",0,"46001"

OK

#設置APN
AT+CGDCONT=1,"IP","3gnet"
OK

#查詢網路信息:訪問計數,運營商,頻段
AT+QNWINFO
+QNWINFO: "FDD LTE",46001,"LTE BAND 3",1506
+QNWINFO: "NR5G-NSA",46001,"",0

OK

#查詢網路配置優先順序
AT+QNWPREFCFG="mode_pref"
+QNWPREFCFG: "mode_pref",AUTO

OK

#設置NSA入網
AT+QNWPREFCFG="mode_pref",NR5G-NSA
OK

#設置SA入網
AT+QNWPREFCFG="mode_pref",NR5G-SA
OK

#設置模組自動選擇入網方式及優先順序
AT+QNWPREFCFG="mode_pref",AUTO
OK

#撥號
AT+QNETDEVCTL=1,1,0
OK

#查詢IP
AT+CGPADDR
+CGPADDR: 1,"10.66.98.208"
+CGPADDR: 11,""

OK

#查詢信號強度NSA
AT+QENG="servingcell"
+QENG: "servingcell", "NOCONN"
+QENG: "LTE","FDD",460,01,B61D52,312,350,1,3,3,184B,-88,-9,-62,8,12,0,37
+QENG: "NR5G-NSA",460,01,589,-88,17,-3,627264,78,0,6219,1

OK

#查詢信號強度SA
AT+QENG="servingcell"
+QENG: "servingcell","NOCONN","NR5G-SA","TDD",460,11,596961006,341,590E02,627264,78,100,-88,-10,5,20,28,1

OK

#查詢運營商
AT+QSPN
+QSPN: "CHN-UNICOM","UNICOM","CHN-UNICOM",0,"46001"

OK

#查詢運營商的另一種方法
AT+COPS=3,1
OK
AT+COPS?
+COPS: 0,1,"CUCC",13

OK

#查詢當前使用的卡槽
AT+QUIMSLOT?
+QUIMSLOT: 1

OK

#切換為卡槽2
AT+QUIMSLOT=2
OK

#切換為卡槽1
AT+QUIMSLOT=1
OK

#查看模組溫度
AT+QTEMP
+QTEMP: "soc-thermal","33"
+QTEMP: "pa-thermal","31"
+QTEMP: "pa5g-thermal","31"
+QTEMP: "board-thermal","32"

OK

#設置用戶名,密碼,鑒權方式
AT+QICSGP=1,3,"3gnet","cogent","cogent",2
OK

#查詢用戶名,密碼,鑒權方式 
AT+QICSGP?
+QICSGP: 1,1,"cmnet","user","passwd",3

OK

#開啟熱插拔,使用該指令時模組中不能插卡
AT+QSIMDET=1,1
#查看熱插拔狀態
AT+QSIMDET?

NOTE:

  • 本文為原創文章,轉載請註明出處
  • 禁止轉載到CSDN!!!

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、字元串 1、字元串編碼發展: 1)ASCII碼: 一個位元組去表示 (8個比特(bit)作為一個位元組(byte),因此,一個位元組能表示的最大的整數就是255(二進位11111111 = 十進位255)) 2)Unicode:兩個位元組表示(將各國的語言(中文編到GB2312,日文編到Shift_JI ...
  • JetBrAIns RubyMine 2022 for Mac是應用在Mac上的一款強大的Ruby代碼編輯器,可以通過可定製的配色方案,鍵盤方案以及高效開發所需的所有外觀設置,智能導航一鍵導航到聲明,超級方法,測試,用法,實現,是一款功能強大的代碼編輯工具。 詳情:JetBrains RubyMin ...
  • 本文主要介紹crudapi三種API認證方式,基於Spring Security框架實現, 包括Cookie,Basic Auth,JWT令牌Token。 ...
  • 1.mybatis攔截器介紹 攔截器可在mybatis進行sql底層處理的時候執行額外的邏輯,最常見的就是分頁邏輯、對結果集進行處理過濾敏感信息等。 public ParameterHandler newParameterHandler(MappedStatement mappedStatement ...
  • AbpVnext 本地事件匯流排 補充知識 發佈訂閱 概念 應用場景 本地事件匯流排允許服務發佈和訂閱進程內事件,這意味著如果兩個服務>(發佈者和訂閱者)在同一個進程中運行,那麼它是合適的 完整示例 DDD開發規範: 先定義好介面層、後實現層、暴露介面 對於要更新的實體 //領域層的實體 public ...
  • IdentityServer4 實現鑒權、授權,AspNetCore Identity實現資料庫用戶管理表直接生成。 ps:IdentityServer4文檔上最後給的例子是 // 配置使用記憶體存儲用戶信息,但使用 EF 存儲客戶端和資源信息, 我初步要實現的是 //資料庫存儲用戶信息 記憶體存儲資源 ...
  • 二、Docker相關命令 2.1、Docker 服務相關命令 systemctl命令是系統服務管理器指令 2.1.1、啟動docker服務 命令 systemctl start docker 2.1.2、停止docker服務 命令 systemctl stop docker 2.1.3、重啟dock ...
  • 痞子衡嵌入式半月刊: 第 58 期 這裡分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發佈一期。 本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。 上期回顧 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...