[閒聊] cdc-wdm裝置的用法與3G、LTE的討論分享

看板Linux作者 (如果大海能夠)時間12年前 (2013/09/06 00:06), 編輯推噓0(0026)
留言26則, 2人參與, 最新討論串1/2 (看更多)
各位大大好 小的過去有花了一點時間 在摸索3G dongle 大多是華為(HUAWEI)跟中興(ZTE)的USB 3G dongle 當然還有他們幫忙掛牌的什麼VODAFONE之類 主要driver都是usb-serial、cdc-acm、cdc-ecm 前兩者走pppd撥號上網,第三者走eth介面用dhcp拿IP address(要自己配也ok) 這3種其實算比較老的技術了,可能網路上亂翻都可以找得到相關教學 不過比較有趣的是 網路上大多提的是使用套件(甚至是GUI超人性化套件) 來幫忙建起已連線且可用的3G技術interface 而我大多是在純指令模式,沒透過3G工具的前題下 自己手動給AT CMD,然後手動叫pppd或叫dhcp來完成連線上網 所以如果板友也很感興趣,我很樂意可以一起討論相關經驗 這篇主要是想尋找板友,關於LTE dongle的板友 隨著LTE越來越發達,也漸漸接觸到LTE dongle 可惜台灣並沒有這個環境,所以也很難在台灣看到人討論 受限於tty裝備的因素,越來越多廠商開發出eth介面的3G dongle或LTE dongle 傳統eth大多走cdc-ecm就ok 接著我比較沒接觸過的driver也包括hso、cdc-ncm、qmi_wwan、mbim 前兩者可能也算比較老了 但是後兩者就比較新且有潛力,可以在連線速度上得到更大的提升 目前我正在接觸qmi_wwan的dongle 他主要是同時包括了cdc-wdm與cdc-ecm兩個driver 用cdc-wdm來下CMD,然後用cdc-ecm來上網 現階段是可以透過libqmi這個套件,直接在PC上成功驅動qmi_wwan來上網 但我實在不想透過libqmi的幫忙 所以必須想辦法,自己手動透過cdc-wdm來跟dongle溝通 但我根本找不到辦法跟cdc-wdm 別說是不了解他溝通的語法(應該不是AT CMD) 甚至是不知道該透過什麼方式丟東西給他,以及從他那裡撈到東西 哪怕是亂丟,然後他回給我error都好 不知道對於qmi_wwan下的cdc-wdm,有沒有大大知道該怎溝通的? 我google了老半天,都沒找到可以幫助到我的資料 orz... 我想 目前分兩階段 1.怎跟cdc-wdm溝通(開檔、讀檔,像tty裝置可以echo跟cat) 2.使用qmi_wwan的語法來跟dongle溝通 真的很希望可以遇到大大能分享些什麼 或指引些方向 真的萬分感謝 -- 有種熟悉總在你心裡深處、眼光餘角出現 越是追求越是千里尋不著 日覆一日,漸漸的也就淡忘 實際卻如影隨行、無聲無息的埋藏在潛意識裡‧‧‧ 也許夜深人靜時又會不經意的輕敲你心房 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.177.8.63

09/06 11:20, , 1F
我對driver這塊不懂,但原則上只有 character device 且接
09/06 11:20, 1F

09/06 11:20, , 2F
受 text command 或 escape sequence 才能用 echo 控制,不
09/06 11:20, 2F

09/06 11:21, , 3F
符合的character device和block device是用 ioctl 去控制,
09/06 11:21, 3F

09/06 11:21, , 4F
像stty其實就是把user下的命令轉成ioctl, AT command則是
09/06 11:21, 4F

09/06 11:22, , 5F
modem接受text command
09/06 11:22, 5F

09/06 23:19, , 6F
反覆看了好幾次 好像有比較懂了XDD 也就是說
09/06 23:19, 6F
也就是說 必須是character裝置 並且還要能接受text command或escape sequence才能用echo 其他裝置或不接受text command與escape sequence的,大多就是使用ioctl來存取了 而tty其實也不接受echo 但是tty可以把echo轉成oictl對嗎? (我以為 stty指的就是各種tty設備,不論是被對應到ttyUSB之類的 請問對嗎?) 然後我的dongle又是依AT CMD來工作 所以就是 echo > tty tty骨子裡是把echo轉成ioctl 然後傳送的內容是AT CMD 這樣對嗎?@@" 另外我今天有挖到有人可以把資料傳給/dev/cdc-wdm0了 他用perl來下耶 這網頁這樣 http://lists.openwall.net/netdev/2012/01/20/7 perl -e 'print pack("C*", map { hex } @ARGV)' 1 f 0 0 0 0 0 1 22 0 4 0 1 1 0 1 >/dev/cdc-wdm2 就這樣的把資料傳給cdc-wdm了 而我也試著直接把那句這樣貼出去 真的可以跟cdc-wdm溝通耶 只是我不知道怎去取得cdc-wdm的回應值 所以只能看著cdc-wdm傻傻的往下一個動作走去 但我因為不知道他的回應為何,無法指派他繼續走下去 所以我應該去研究一下perl怎去讀取裝置的資料 更甚至,下一步 我應該使用C語言,用開檔或ioctl的方式 直接丟那些16進位碼給cdc-wdm 然後讀取回應,來完成我希望的工作,不知道有沒有機會 如果更幸運的,搞不好我可以透過LINUX常見的如echo來傳送那串指令碼 就不必去寫C語程了 因為我也是第一次走到這一步xdd 但有所進展,其實還蠻過癮且有趣的 謝謝大大的分享與耐心回應 ※ 編輯: liwmewmew 來自: 180.177.8.63 (09/07 00:47)

09/07 08:45, , 7F
你回的第二段要修正一下, stty 是命令用來設定 tty 的驅動
09/07 08:45, 7F

09/07 08:47, , 8F
程式,這個驅動負責對實際終端設備(看接的是什麼,如vt100或
09/07 08:47, 8F

09/07 08:47, , 9F
modem,不一定),這個驅動程式是要用ioctl去控制,而實際接的
09/07 08:47, 9F

09/07 08:48, , 10F
設備如 vt100是吃escape sequence(如ptt常見的控制碼就是
09/07 08:48, 10F

09/07 08:49, , 11F
這些終端機的legacy),如果接的是modem,它是吃AT command,
09/07 08:49, 11F

09/07 08:49, , 12F
其實escape sequence也是可以看成text command的一種特例
09/07 08:49, 12F

09/07 08:50, , 13F
我用個示意圖 user <-> tty driver <-> vt100/modem
09/07 08:50, 13F

09/07 08:51, , 14F
user輸出的字都直接會到 vt100/modem, 中間的driver不能偷
09/07 08:51, 14F

09/07 08:51, , 15F
吃(到是有可能偷換,例如把CR換成LF或反之),所以user只能用
09/07 08:51, 15F

09/07 08:52, , 16F
ioctl來控制driver,而vt100/modem則可以接受文字來控制
09/07 08:52, 16F
喔喔 所以說真正例如我在操作ttyUSB時 基本上跟stty是無關的 stty只是一個設定tty參數或行為的工具 而stty是透過ioctl來設定tty的參數與行為 至於tty driver怎真的對應到終端設備 則可能是可以直接echo的text command或escape sequence類型的character設備 請問是這樣嗎? 謝謝@@" ※ 編輯: liwmewmew 來自: 180.177.8.63 (09/07 17:40)

09/07 18:37, , 17F
legacy tty driver其實不smart,是user根據實際接什麼設備,
09/07 18:37, 17F

09/07 18:38, , 18F
來決定怎麼設tty driver, tty driver做的事也不多,你去看
09/07 18:38, 18F

09/07 18:39, , 19F
一下stty裏能設的項目就知道除了baud rate之外就是一些和
09/07 18:39, 19F

09/07 18:39, , 20F
傳統終端機有關的細項(要不要echo,CR LF要不要互轉等等)
09/07 18:39, 20F

09/07 18:44, , 21F
如果你真的不瞭解tty driver扮演的角色,你就先把它當透明
09/07 18:44, 21F

09/07 18:44, , 22F
人,等有需要再來看就好
09/07 18:44, 22F

09/07 18:47, , 23F
因為你用的是3G/LTE又走USB,相對傳統走RS-232的終端機來說
09/07 18:47, 23F

09/07 18:47, , 24F
大部分tty的相關設定都不會用到
09/07 18:47, 24F

09/08 15:44, , 25F
好吧 確實是沒設到@@" 非常謝謝你耐心的解釋XD
09/08 15:44, 25F

09/08 15:44, , 26F
讓我知道這之間有這麼多差異 哈哈
09/08 15:44, 26F
文章代碼(AID): #1IAAlvIW (Linux)
文章代碼(AID): #1IAAlvIW (Linux)