知識社群登入
位置: 艾鍗學院 Blog > 專業論壇 > 討論
USB 3g modem in embedded linux
1樓
Hi 我是有上過驅動程式的學員

請教 范老師,目前在做USB 3g modem 驅動程式

一般而言,USB 3g modem 的撥號界面,是要透過 USB-serial 將其掛在 /dev/ttyUSB* 
與 AP 作上網撥號應用。 

有些網卡,插入時會掛載出 /dev/ttyUSB*(USB-serial) 及 /dev/sda(Mass-Storage),
但有些網卡,只有 /dev/sda(Mass-Storage).

我修改 usb/serial/option.c 在結構 usb_device_id[ ]加入vendor id 及 product id,
USB-serial驅動程式註冊,沒發生問題。

插入只有 /dev/sda 的USB 3G 網卡時, 在USB-serial 卻沒有執行 probe() 的動作,
請問老師,可以給個方向嗎?

簡單的來說~ USB bus driver 是OK,但USB tty class driver 無法成功。

謝謝. 
 
 
2樓
  
   
 1. 沒有註冊,所以Platform Device 不會call probe() 
  Note:  kernel opitin enable : CONFIG_USB_ACM
 
 2,  去google 找一下 usb_modeswitch 程式. 
 
 
 
3樓
昨天~我已經解出來了.....USB driver 觀念又進一步

不過,不是用Anonymous的方法~sorry

正本清源~還是修好driver, usb_modeswitch 可以當作輔助啦!

還是~希望 范老師 能給個回應,請多指教^^
4樓
我純粹只是路人也沒修過課,只是工作上很常在嵌入式系統porting 3G dongle USB card

因為有的3G卡,他本身預設只有儲存裝置介面,並且裡面擺著驅動程式
目的是要讓WINDOWS先安裝驅動,安裝完後,WINDOWS在驅動的幫助下就會把他轉為modem 模式了
想必樓主遇到的是這類的3G卡(我遇過的卡大部份都是這類的)

如今要在LINUX上運作,就是要想辦法讓3G卡轉換到modem模式(因為儲存裝置模式下的驅動對LINUX來說沒用處)
要轉換的做法我知道有兩種,基本上都是要先能跟3G卡溝通(那一開始至少有抓到儲存裝置模式)
第一種就是USB_MODESWITCH
第二種則是修改kernel driver中usb/storage的驅動,抓到這個儲存裝置時,會下命令叫這張USB卡轉成modem模式
然後再讓usb/serial的驅動來使用這個3G modem

這兩種方式其實是一樣的
差別只在USB_MODESWITCH這套軟體,他是透過LIBUSB這個LIB套件
把kernel space的usb操作功能提升到user space上
而他做的事一樣也是對儲存裝置的USB卡下指令,要求他更改模式為modem

以上是我所知的,有錯請糾正
也如果 樓主用的是其他方式其他概念的技巧
希望也可以分享一下 謝謝