歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

ZK-ID6USB紅外線成功地用在了Linux中

  相比於集成在各大廠商筆記本中的紅外發射器,這個獨立的 USB 口發射器在 Linux 下驅動起來比較麻煩,不過最終 還是成功了。以下是 IRDA 子系統的工作原理     1)首先,與預先猜測的不同,這款紅外線收發器雖然用了 USB,但卻並不屬於 USB 設備類中規定的類型,因而無法使用 USB 通用驅動。在 Windows 上可以看出它屬於串口類,型號是 MA-620     2)這個收發器內部其實是一個 USB 轉串口線,型號是 PL2303,因此插入電腦後,能被最新的內核識別,並且映射成 USB 串口 /dev/ttyUSB0     3)在這個假冒串口的後面,才接著一個真正的紅外線收發器,它的真正類型是 MA-600,因而可以通用 MA-600 的驅動。     4)因此,驅動這個USB紅外,其實是在USB串口上安裝tty層,其上再裝IRDA協議棧。其圖示如下:     ircomm 等應用層協議   linux-irda-stack      sir-dev      irtty-sir [ma600-sir]      tty-layer      usbserial [pl2303]      usb_hcd [ehci/ohci/uhci]     所使用的模塊如下:   Module Size Used by   ma600_sir 3328 1   irtty_sir 7424 2   sir_dev 17452 2 ma600_sir,irtty_sir   irda 129468 2 ma600_sir,sir_dev   pl2303 16644 1   usbserial 27812 3 pl2303   uhci_hcd 30736 0     5)但是,實際情況總是沒有分析得那麼好。上述方案有以下限制:     首先,在USB轉串口跑tty,在任何一個2.4版的kernel上都有嚴重的向題,會不定期的死鎖     其次,pl2303 驅動在kernel 2.6.3 以前存在著bug,會讓DMA傳輸沖掉堆棧。同時這個版本之前的 ma600 驅動不能正確處理錯誤,無法從出錯狀態中恢復出來     第三,直到最近版本,ma600都無法處理 ma620 的速度轉換請求,一轉速庋就出錯,因此我們只能使用默認的9600這個速度。同時不要嘗試 rmmod pl2303, 2.6.7 以前的內核版本會導致 oops     最後,你必須使用最新的 irda-utils 包 0.9.17-pre3 以上版本,舊版在特定情況下會崩潰     6)OK, 現在下面就是我們啟動紅外功能的腳本:     Start:     #!/bin/sh   #   # Minimal stuff required to get the MA620 USB IRDA dongle recognised by   # the kernel.     modprobe uhci_hcd   modprobe pl2303   modprobe irda   echo 9600 > /proc/sys/net/irda/max_baud_rate   modprobe irtty-sir   modprobe ma600-sir   modprobe ircomm-tty   irattach /dev/usb/ttyUSB0 -d ma600 -s     exit 0     Stop:     #!/bin/sh   #   # Minimal stuff required to stop the MA620 USB IRDA dongle     killall irattach kIrDAd   modprobe -r ircomm-tty   modprobe -r ma600   modprobe -r ma600-sir   modprobe -r irtty-sir   # Not removing pl2303 since it causes a kernel oops     exit 0     將上述2段腳本存成文件,運行 start 開啟 irda, stop 則關閉。啟動後,將紅外設備對准你的收發器,然後輸入 irdadump 命令,如果看見設備被發現了,這就說明紅外已經起來了。通過訪問 /dev/ircomm0 可以訪問紅外串口模擬協議,如果該設備支持,你甚至可以起一個 minicom 來讀寫這個模擬串口。輸入 cat /proc/net/irda/discovery,應該能看到你的設備的名字列在裡面




Copyright © Linux教程網 All Rights Reserved