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