QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4237|回复: 3

力特 ZK-ID6 USB红外线成功地用在了 Linux 下

[复制链接]
发表于 2004-10-26 00:46:27 | 显示全部楼层 |阅读模式


力特牌红外发射器是一个低速红外收发器,属于廉价产品,销售量较大。

相比于集成在各大厂商笔记本中的红外发射器,这个独立的 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,应该能看到你的设备的名字列在里面

最后,所有这些信息都来自于 Linux/IRDA Project: http://sourceforge.net/mailarchive/message.php?msg_id=8875689
发表于 2004-10-26 09:34:43 | 显示全部楼层
好。

希望大家有新硬件都尽量配置看看,然后把心得写出来。
回复

使用道具 举报

发表于 2005-1-28 20:20:06 | 显示全部楼层
太好了!!!我正愁这个!!!
回复

使用道具 举报

 楼主| 发表于 2005-3-21 19:16:11 | 显示全部楼层
为了方便通过红外口和手机和PDA互传照片,我无耻地将网上一个程序,IrCp,改头换面一把,换了个名字叫做 Ircp-Tray,发布了出来。希望对广大移动设备爱好者有帮助。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-13 04:30 , Processed in 0.039585 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表