主要經手了3g路由器專案的usb模式切換模組的開發和維護。3g路由器專案是隨著3g在國內市場的鋪開而上馬的,其中的乙個重點模組就是3g usb modem的模式切換。這個問題之所以存在,是因為市面上的大多數3g usb modem都採用了這樣的工作模式:第一次接到pc上時,表現為乙個cd rom裝置,在這個「偽」cd rom上存有3g usb modem的驅動程式,使用者可以安裝驅動程式,安裝完成之後,3g usb modem自動從「偽」cd rom裝置切換成modem模式,此時就可以正常的撥號上網了。在pc上,windows系統提供了對3g usb modem裝置自動切換裝置模式的支援,但linux並沒有提供自動切換usb裝置工作模式的能力,這就要求我司3g路由器具備自動切換usb裝置模式的功能。
問題是:usb裝置的模式切換,並不是乙個標準的裝置功能,各廠家的3g usb modem實現自動模式切換的方法不一樣,各種各樣的方法都有,因此,儘管不可能做到相容市場上所有的3g usb modem,但至少需要達到的目標是:對市場上主流的3g usb modem,都需要能支援(至少不能比競爭對手能夠支援的3g usb modem數量少)。
另乙個難點是:要找出usb裝置模式切換的途徑,基本上只能通過逆向工程的辦法來完成。這方面,網路上有一些資源可以利用:乙個是sniffusb專案,該專案提供了乙個用於嗅探usb通訊過程的工具;另乙個專案是usb_modeswitch,該項目的目標就是要實現3g usb modem在linux平台下的切換。
補充一點usb的背景:usb匯流排協議的協議層有一點類似有線網路,是通過packet在usb裝置之間完成通訊和控制,這樣,就可以像在網路上使用抓包工具(如wireshark, ethereal, tcpdump)捕捉網路通訊的資料報一樣,也可以通過特殊的工具捕捉usb裝置之間的資料報,並對其進行分析。在3g路由器專案中,使用的usb抓包工具就是前面提到的sniffusb。通過對捕捉到的通訊資料報的分析,可以得到一些有可能是促成usb裝置切換模式的資料報。這個時候,就輪到usb_modeswitch出場了,usb_modeswitch的作用,就是把這些可疑的資料報傳送給指定usb裝置,看裝置是否切換模式,如果發生了,那麼我們也就知道應該如何讓usb裝置切換模式了。
之前已經有同事完成了3g usb modem模組的部分功能,但尚不完整,只能支援國內華為和中興的兩個3g usb modem,我的任務是:學習sniffusb和usb_modeswitch的工作機制,完善**,支援更多的3g usb modem。在此過程中,花了不少時間學習usb協議,並為sniffusb的使用撰寫了使用說明(sniffusb使用起來是比較有挑戰性的,因此需要乙份文件,以便後續接手的同事有所參考)。分析資料報的階段,我一開始是採用人肉分析的方式,一條一條地猜測,效率非常的低,後來,有一些經驗之後,就總結出了一定的規律,為了減輕人工分析的負擔,我編寫了python指令碼以輔助分析。
3GModem開發流程
我從laogu.cublog.cn的一篇文章得到靈感,將自己的3g開發總結一下 linux各分支 1 起步 做3g開發,一般會先得到3g裝置後得到3g文件,在沒有3g文件的情況下,首先只能憑藉裝置硬體的名字和裝置id來進行初步開發。在這一階段可以利用的方法有 lsusb 檢視裝置id 網上搜尋廠商m...
切換夜間模式
先需要新建乙個專案,選擇初始的activity時選擇baseactivity。dependencies修改style name colorprimary color colorprimary colorprimarydark color colorprimarydark coloraccent co...
切換歸檔模式
將資料庫的日誌模式設定切換 archive mode 和no archive mode之間的切換 的步驟和操作如下 1.關閉執行的資料庫例項 svrmgrl shutdown 在進行日誌模式切換之前,必須將執行的資料庫正常關閉。2.備份資料庫 該備份跟以後產生的日誌一起用於將來的災難恢復 很重要,如...