本文將帶你使用RNDIS的方式,搭配Linux主控終端,快速實現USB上網。
RNDIS是指Remote NDIS,基于USB實現RNDIS實際上就是TCP/IP over USB,就是在USB設備上跑TCP/IP,讓USB設備看上去像一塊網卡,從而使Linux可以通過USB設備連接網絡。
一、Linux驅動配置
1. 虛擬串口
通過串口發送AT指令,Air780ER使用CDC-ACM驅動,大部分Linux系統默認就支持,插入就可以使用。
測試AT指令可以用minicom等工具,運行命令:
sudo minicom -D /dev/ttyACM0
測試結果如下:
如果所用系統不支持CDC-ACM驅動,則可使用如下配置:
▼ 虛擬串口驅動配置 ▼
1)配置內核:
2)確定端口:
交叉編譯后,板上運行,demesg打印如下。
說明ACM驅動Air780ER成功,其中節點:
1-1.3:1.2為AT口
對應的操作文件/dev/ttyACM0,進行通訊。如果沒有合適的命令行工具,用如下的源代碼編譯個簡單小程序在linux下發AT的小工具;
1-1.3:1.4為日志口
對應的操作文件/dev/ttyACM1,進行抓日志,具體抓日志方法見uart_capture.c;
1-1.3:1.6為modem口
對應的操作文件/dev/ttyACM2,客戶可以進行PPP撥號。
注意事項:
有些Linux設備存在模組重啟后,操作文件會發生移位,比如本來是/dev/ttyACM0是可以進行AT通訊的,后來又不行。
最靠譜的方法是通過驅動節點,來找到操作文件usb_find.c;
可以用:
FindUsbDevice(AIRM2M_USB_DEVICE_AT_INTERFACE_ID),來尋找真正的需要的端口。
某些最簡系統需要根據設備描述來識別,可以參考如下Linux上展示的細節進行適配,lsusb_618;
相關最新資料詳見:
https://docs.openluat.com/air780er/at/quick_start/usb/
2. RNDIS驅動
Air780ER是標準的RNDIS,目前Linux大部分發行版本都已經默認支持RNDIS驅動了,只要通過USB連接Air780ER模組就可以直接用,模組開機后就會在Linux設備端看到新的網卡。
如下圖所示:
注意:
每個設備的ethx可能不一樣,上圖插入Air780ER模組后增加的網卡即為RNDIS網卡,地址為192.168.10.2。
如果沒有RNDIS驅動的,可按照下圖配置:
▼ RNDIS驅動配置 ▼
二、RNDIS功能測試
STEP 1:禁用本地網卡sudo ifconfig eth0 down
STEP 2:使能模組網卡sudo ifconfig eth10 up
使能之后,最好再通過ifconfig再次確認一下。
STEP 3:聯網測試
PING百度網站聯網成功,如下圖所示。
三、如何禁用RNDIS功能
1. 使用設備管理器禁用RNDIS功能
在設備管理器,網絡適配器下找到Remote NDIS選項后,點擊鼠標右鍵選擇禁用設備即可。
2. 使用代碼禁用RNDIS功能
發送AT+RNDISCALL=0關閉RNDIS網卡,重啟生效。
四、常見問題及解決辦法
1. 如何排查Linux使用RNDIS無法上網的問題?
一般情況下,不是特別精簡的Linux已經支持RNDIS 功能,如果插上合宙的4G 模組,但是不能上網的話,需要注意以下幾點:
1)能否檢測到RNDIS設備?
在命令行中輸入dmesg,如此出現rndis_host 1-1:1.0 eth1這樣的打印,則證明已經識別到了。如果沒有,可能是硬件問題,也可能是所用Linux真的不支持rndis,需參考上文驅動配置,配置一下驅動。
此時查看ifconfig,如果沒有出現rndis_host 1-1:1.0 eth1中的eth1,則發送ifconfig -a;此時發現有eth1但是沒有IP地址,發送udhcpc -i eth1出現地址后,即可使用此網卡進行上網。
2)出現設備網卡,但是無法上網?
這可能是由于模組沒有注冊上網絡,可以通過模組串口發送AT指令查詢。
常用AT指令:
AT+CPIN? 查看卡是否在位;
AT+CEREG? 查看是否注冊上網絡;
AT+CESQ 查看信號值;
ATI 查看版本號。
2. RNDIS上網,獲取實時流量、上行下行數據是哪個指令?
可以通過ifconfig獲取。
3. Linux其它常見問題的解決方法:
01)無法識別VID與PID
一般模組對接的Linux協議是USB協議,設備插入后,系統會檢測出設備的標識:PID VID;
其中VID是廠商識別碼,PID是產品識別碼。此處不需要裝驅動也可以識別,所以,我們排除插入無法識別的時候,先通過命令行命令lsusb。
Air780ER模組的VID與PID,分別是19d1和0001。
如上圖所示 ,就是代表已經識別到Air780ER模組了。
查看模組是否已經識別,如果這里沒有識別到模組,應該先排除硬件問題。
常見硬件問題:
USB是否走線過長;
USB是否VBUS沒有連接;
模組是否沒開機。
02)確認是否識別到網卡
如果按照驅動配置加入驅動,Linux發送dmesg出現以下的顯示說明正常識別到網卡:
第8行:
1-2.1設備代表掛在usb bus1上2.1節點為EigenComm的USB 設備;
第13行:
1-2.1:1.0代表usb interface 0,被當做RNDIS使用(其實interface 1也是被RNDIS使用);
第16、17、19行:
1-2.1:1.2 、1-2.1:1.4 、1-2.1:1.6代表usb interface 2,4,6,分別枚舉ttyACM0,ttyACM1,ttyACM2(這個不固定)。
第18行:
代表RNDIS被設置成eth10網卡,如下所示:
03)在Linux下發AT的小工具
一些Linux開發板本身不帶串口工具,出問題的時候沒法通過AT指令來找出原因,這里提供一個小工具sendat.c,編譯后運行即可。
https://docs.openluat.com/air780er/at/quick_start/usb/
今天的內容就分享到這里了~
審核編輯 黃宇
-
usb
+關注
關注
60文章
7945瀏覽量
264632 -
網卡
+關注
關注
4文章
311瀏覽量
27384
發布評論請先 登錄
相關推薦
評論