作者liwmewmew (如果大海能够)
看板Linux
标题[闲聊] cdc-wdm装置的用法与3G、LTE的讨论分享
时间Fri Sep 6 00:06:14 2013
各位大大好
小的过去有花了一点时间 在摸索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
1F:→ bitlife:我对driver这块不懂,但原则上只有 character device 且接 09/06 11:20
2F:→ bitlife:受 text command 或 escape sequence 才能用 echo 控制,不 09/06 11:20
3F:→ bitlife:符合的character device和block device是用 ioctl 去控制, 09/06 11:21
4F:→ bitlife:像stty其实就是把user下的命令转成ioctl, AT command则是 09/06 11:21
5F:→ bitlife:modem接受text command 09/06 11:22
6F:→ liwmewmew:反覆看了好几次 好像有比较懂了XDD 也就是说 09/06 23:19
也就是说
必须是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)
7F:→ bitlife:你回的第二段要修正一下, stty 是命令用来设定 tty 的驱动 09/07 08:45
8F:→ bitlife:程式,这个驱动负责对实际终端设备(看接的是什麽,如vt100或 09/07 08:47
9F:→ bitlife:modem,不一定),这个驱动程式是要用ioctl去控制,而实际接的 09/07 08:47
10F:→ bitlife:设备如 vt100是吃escape sequence(如ptt常见的控制码就是 09/07 08:48
11F:→ bitlife:这些终端机的legacy),如果接的是modem,它是吃AT command, 09/07 08:49
12F:→ bitlife:其实escape sequence也是可以看成text command的一种特例 09/07 08:49
13F:→ bitlife:我用个示意图 user <-> tty driver <-> vt100/modem 09/07 08:50
14F:→ bitlife:user输出的字都直接会到 vt100/modem, 中间的driver不能偷 09/07 08:51
15F:→ bitlife:吃(到是有可能偷换,例如把CR换成LF或反之),所以user只能用 09/07 08:51
16F:→ bitlife:ioctl来控制driver,而vt100/modem则可以接受文字来控制 09/07 08:52
喔喔
所以说真正例如我在操作ttyUSB时
基本上跟stty是无关的
stty只是一个设定tty参数或行为的工具
而stty是透过ioctl来设定tty的参数与行为
至於tty driver怎真的对应到终端设备
则可能是可以直接echo的text command或escape sequence类型的character设备
请问是这样吗?
谢谢@@"
※ 编辑: liwmewmew 来自: 180.177.8.63 (09/07 17:40)
17F:→ bitlife:legacy tty driver其实不smart,是user根据实际接什麽设备, 09/07 18:37
18F:→ bitlife:来决定怎麽设tty driver, tty driver做的事也不多,你去看 09/07 18:38
19F:→ bitlife:一下stty里能设的项目就知道除了baud rate之外就是一些和 09/07 18:39
20F:→ bitlife:传统终端机有关的细项(要不要echo,CR LF要不要互转等等) 09/07 18:39
21F:→ bitlife:如果你真的不了解tty driver扮演的角色,你就先把它当透明 09/07 18:44
22F:→ bitlife:人,等有需要再来看就好 09/07 18:44
23F:→ bitlife:因为你用的是3G/LTE又走USB,相对传统走RS-232的终端机来说 09/07 18:47
24F:→ bitlife:大部分tty的相关设定都不会用到 09/07 18:47
25F:→ liwmewmew:好吧 确实是没设到@@" 非常谢谢你耐心的解释XD 09/08 15:44
26F:→ liwmewmew:让我知道这之间有这麽多差异 哈哈 09/08 15:44