• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于Linux下TDM模塊的USB主機端驅動的開發(fā)

      2011-08-09 05:04:22輝,向濤,張
      電視技術 2011年19期
      關鍵詞:驅動程序命令串口

      劉 輝,向 濤,張 杰

      (1.重慶郵電大學重慶信科設計有限公司,重慶 400065;2.重慶郵電大學通信新技術應用研究所,重慶 400065)

      責任編輯:孫 卓

      0 引言

      TDM330是重郵信科通信技術有限公司研發(fā)的TDSCDMA無線模塊。模塊提供了100PIN或者MINIPCI接口,為語音傳輸、短消息和數(shù)據(jù)業(yè)務的開發(fā)提供了接口,支持2.8 Mbit/s的HSDPA數(shù)據(jù)和2.2 Mbit/s的HSUPA傳輸速率。TDM330在硬件上不僅提供了RS-232串口,也提供一種易于使用的高速率數(shù)據(jù)傳輸?shù)腢SB接口。全速USB的速率理論值能達到12 Mbit/s,而RS-232串口速率的理論值只能達到幾百kbit/s。相對于 USB而言,RS-232串口傳輸?shù)乃俣仁艿胶艽蟮南拗疲瑫е略趥鬏斶^程出現(xiàn)嚴重的數(shù)據(jù)丟包現(xiàn)象,因此本文通過開發(fā)USB的主機端驅動來使之開發(fā)板子DM6467與TD無線上網(wǎng)TDM330之間通過USB接口進行傳輸數(shù)據(jù)。同時,TDM芯片主機端的USB驅動將成為TD無線傳輸項目開發(fā)的必要環(huán)節(jié)。

      1 TDM330適配的USB驅動分析

      TDM330設備支持USB接口連接,應用層的數(shù)據(jù)需要通過USB接口與TDM330模塊設備進行交互。根據(jù)USB主機端驅動[1-2]結構圖(見圖1)可以了解到用戶只能和TTY層、字符設備等層之間進行數(shù)據(jù)的交流,而不能直接與USB驅動層進行數(shù)據(jù)的交流。由于TDM330在開發(fā)中僅僅用于數(shù)據(jù)業(yè)務通信,因此可以把USB設備驅動的上層看成TTY層。用戶可以通過TTY層與USB設備驅動層進行通信。所以Linux的用戶需要針對TDM330模塊開發(fā)USB主機端驅動,使之能夠枚舉多個ttyUSB串口(至少2個),使其在使用TDM330模塊設備時,1個串口用于數(shù)據(jù)的傳輸,1個串口用于命令的傳輸。例如1個C口,可以用來進行AT命令交互,如啟動協(xié)議棧(AT^SPSS=0)。C口一般對應設備描述名為/dev/ttyUSB1。1個是D口,用來撥號。D口一般對應設備描述名為/dev/ttyUSB0。

      圖1 Linux主機端的驅動

      由于USB驅動程序綁定在USB接口而不是USB設備,所以TDM330模塊USB驅動只需要實現(xiàn)接口驅動。其針對TDM330模塊開發(fā)USB接口驅動,至少要滿足能夠枚舉出用于命令和數(shù)據(jù)傳輸?shù)?個tty串口的需要,所以TDM330模塊USB主機端的驅動還要負責將USB轉成串口,生成tty串口。

      2 USB轉tty串口分析

      對于本次開發(fā),由于USB設備驅動上層可看成tty設備,不屬于任何USB設備類型,一般USB都可以使用這個usbserial模塊驅動來作為主機端USB設備驅動。因此,TDM330的主機端驅動就以usbserial模塊作為設備驅動程序。根據(jù)圖1可知,由于和應用層交互數(shù)據(jù)的是TTY層,因此,必須用usbserial模塊把USB設備映射成一個tty設備(即在/dev/目錄下為該USB設備創(chuàng)建一個tty設備文件),然后才能用串口與tty設備交互數(shù)據(jù)[3],并通過USB接口與設備端的設備(TDM330)通信。

      2.1 分析usbserial模塊

      分析內核 Linux 2.6.10 的./drivers/usb/serial/makefile為:

      通過以上的makefile可以得出usbserial模塊主要由usb -serial.c,generic.c 和 bus.c 三部分組成:

      1)usb-serial.c就是usbserial模塊的核心,主要用來接收設備端發(fā)來的數(shù)據(jù)并傳送到上層,同時也是接收來自上層應用的數(shù)據(jù),并組裝成urb包發(fā)送發(fā)給設備。

      2)generic.c是對某一設備的單獨操作,相當于設備自己的驅動程序,由于很多設備具有通用性,所以對于沒有特殊要求的設備都可以使用這個驅動作為自己的設備驅動程序。

      3)bus.c每個USB驅動和設備都必須要歸入某一條總線上,即都是歸屬于某條總線的,只有這樣系統(tǒng)才能從特定的某一條總線開始找每個驅動和設備并為之匹配,這個文件是用來模擬一條總線,而usbserial的每個驅動和總線都會注冊到這條總線上來。

      2.2 數(shù)據(jù)在usbserial模塊的通信過程[4]

      對于發(fā)送過程。tty設備文件在獲取了用戶數(shù)據(jù)要求之后傳遞到下層usbserial模塊的核心層,而該模塊核心層就是將數(shù)據(jù)打包成USB格式的數(shù)據(jù),并通過USB主機控制器發(fā)送到USB設備端去。

      對于接收過程。usbserial模塊會在該設備打開時啟動一個URB等待設備發(fā)送數(shù)據(jù)過來,收到數(shù)據(jù)后就調用push函數(shù)把數(shù)據(jù)推到上層的tty設備的緩沖區(qū)去,tty設備收到數(shù)據(jù)以后就直接發(fā)給用戶,或者直接顯示在串口工具上。

      3 內核模塊的加載

      Linux操作系統(tǒng)為了擴展其功能,使用可動態(tài)加載和卸載的內核模塊LKM[5]。Linux 使用insmod/modprobe 來加載內核模塊,使用rmmod命令來卸載內核模塊。LKM的優(yōu)點是可以通過動態(tài)加載和卸載內核模塊來使內核保持很小的尺寸并非常靈活,無須重構整個內核來運行新的內核代碼。

      根據(jù)Linux 2.6的makefile寫法[6]寫 USB轉 serial的usbserial內核模塊的makefile,再進行make編譯生成usbserial.ko,由于開發(fā)板上的usb轉serial芯片被該內核識別為通用芯片,即該內核下的Documentationusbusb-serial文檔沒有提到的一些USB轉串口芯片,并且由于TDM330的vendorID為0x1234,productID為0X0033,因此只需用命令modprobe usbserial vendor=0x1234 product=0x0033動態(tài)加載usbserial.ko時即可,不用加載USB轉serial具體芯片的驅動,卸載模塊命令為rmmod usbserial。

      4 運行結果

      開發(fā)板子上電并通過USB接口插上TDM330模塊,運行加載usbserial模塊命令,命令為modprobe usbserial vendor=0x1234 product=0x0033,加載這個模塊以后,詳細信息如圖2所示。

      圖2 加載模塊后的詳細信息(截圖)

      根據(jù)此結果可以得出,generic converter芯片被檢測到,并且該芯片的驅動掛載到ttyUSB的3個設備文件上,然后用戶就可以像操作tty串口文件一樣的操作該設備文件。運行查看USB設備所映射的串口ttyUSB設備文件的命令ls/dev/ttyUSB*[7],具體如圖3所示。

      圖3 運行命令圖(截圖)

      根據(jù)以上結果可以得出USB設備映射成ttyUSB0,tty-USB1,ttyUSB2三個設備文件。應用程序通過這些文件可對實際的USB進行操作。用串行通信調試工具(SCT)進行串口通信調試。調試步驟為:1)運行命令sct啟動協(xié)議棧;2)通過命令setbuf 1 hex設置buf1的數(shù)據(jù);3)通過命令port/dev/ttyUSB0指定使用的端口;4)通過命令open打開指定的端口;5)通過命令sendrecv 10向打開的端口發(fā)送buf 1的數(shù)據(jù),并把接收的數(shù)據(jù)存到buf 0,同時在終端顯示接收到的數(shù)據(jù)。如圖4所示。

      圖4 顯示結果(截圖)

      根據(jù)以上結果的分析得出,已經(jīng)把USB設備映射為串口設備,相應的驅動已經(jīng)掛載在相應的接口上,并且可以通過串口ttyUSB*來操作USB設備。這樣就可以通過PPP撥號與無線網(wǎng)絡連接在一起,然后應用于TD網(wǎng)絡的無線傳輸。

      [1]夏傳凱,吳乃陵.基于AT91RM9200的USB主機端的linux驅動[J].現(xiàn)代電子技術,2008(12):49-50.

      [2]孫天澤,袁文菊,張海峰,等.嵌入式設計及Linux驅動開發(fā)指南-基于ARM9處理器[M].北京:電子工業(yè)出版社,2007.

      [3]宋寶華.Linux設備驅動開發(fā)詳解[M].北京:人民郵電出版社,2008.

      [4]徐維迪,石紹應,喬建軍.Linux環(huán)境USB轉串口設備的驅動程序開發(fā)[J].空軍雷達學院學報,2008,22(1):65 -67.

      [5]羅苑棠.嵌入式Linux驅動程序和系統(tǒng)開發(fā)實例講解[M].北京:電子工業(yè)出版社,2009.

      [6]陳剛,盧顯斌.基于linux-2.6內核模塊程序設計[J].福建電腦,2004(6):15-16.

      [7]周金和,劉泉華.基于ISP1161的USB攝像頭嵌入式Linux設備驅動[J].電視技術,2006,30(3):81 -84.

      猜你喜歡
      驅動程序命令串口
      只聽主人的命令
      淺談AB PLC串口跟RFID傳感器的通訊應用
      移防命令下達后
      USB接口的多串口數(shù)據(jù)并行接收方法探索
      這是人民的命令
      基于藍牙串口適配器的GPS接收機與AutoCAD的實時無線通信
      地礦測繪(2015年3期)2015-12-22 06:27:26
      基于并行控制的FPGA多串口拓展實現(xiàn)
      藍色命令
      驅動程序更新與推薦
      驅動程序更新與推薦
      邻水| 丹江口市| 瑞昌市| 兴国县| 赣榆县| 民和| 曲阳县| 吉安县| 安义县| 乐东| 马公市| 中阳县| 开封县| 临潭县| 昭苏县| 改则县| 靖远县| 亳州市| 宁德市| 紫阳县| 凤庆县| 弥渡县| 仁化县| 宁强县| 石阡县| 商水县| 泸溪县| 北碚区| 仪征市| 徐州市| 陆河县| 武鸣县| 北流市| 秭归县| 上杭县| 海南省| 贵港市| 江陵县| 会理县| 南京市| 临海市|