12.37. 红外端口

 

宁为红毋宁死。

 作者不详

12.37.1. Linux 兼容性检查

要使您的笔记本电脑的 IrDA® 端口在 Linux/IrDA® 下工作,您可以使用标准红外 (SIR) 或快速红外 (FIR)。

12.37.1.1. SIR

高达 115.200bps,红外端口模拟一个串行端口,例如 16550A UART。这将在启动时或当您加载serial模块时被内核串行驱动程序检测到。如果 BIOS 中启用了红外支持,对于大多数笔记本电脑,您将收到类似如下的内核消息

Serial driver version 4.25 with no serial options enabled
ttyS00 at 0x03f8 (irq = 4) is a 16550A     #first serial port /dev/ttyS0
ttyS01 at 0x3000 (irq = 10) is a 16550A    #e.g. infrared port
ttyS02 at 0x0300 (irq = 3) is a 16550A     #e.g. PCMCIA modem port

12.37.1.2. FIR

如果您想使用高达 4Mbps 的速度,您的机器必须配备特定的 FIR 芯片。您需要特定的 Linux/IrDA® 驱动程序来支持此芯片。因此,您需要关于 FIR 芯片的准确信息。您可以通过以下方式之一获取此信息

  1. 阅读机器的规格,尽管您在那里找到足够且可靠的 Linux 可用信息的情况非常罕见。

  2. 尝试找出 FIR 芯片是否是 PCI 设备。执行 cat /proc/pci 命令。适用于 2.2.x 内核的相关文件位于/proc/bus/pci。尽管 PCI 信息通常不完整。您可以在内核文档中找到关于 PCI 设备和供应商编号的最新信息,通常位于/usr/src/linux/DocumentationCraig Hart 的页面。从内核 2.1.82 开始,您也可以使用 pci-utils 包中的 lspci 命令。

  3. 使用 DOS 工具 CTPCI330.EXE,该工具由德国计算机杂志 CT 在 ZIP 格式中提供,您可以在 这里 找到。此程序提供的信息有时比 Linux 工具提供的信息更好。

  4. 尝试获取关于即插即用 (PnP) 设备的信息。虽然我还没有为此目的使用过它们,但 isapnp 工具可能很有用。

  5. 如果您已经安装了 Linux/IrDA® 软件,请加载 FIR 模块并观察 dmesg 的输出,以查看是否检测到 FIR。

  6. 另一种找出方法的方式由 Thomas Davis 解释(WH 修改):“深入挖掘供应商的 FTP 站点,找到 Windows9x FIR 驱动程序,他们有(对于 SMC 芯片)”

    -rw-rw-r--   1 ratbert  ratbert       743 Apr  3  1997 smcirlap.inf 
    -rw-rw-r--   1 ratbert  ratbert     17021 Mar 24  1997 smcirlap.vxd 
    -rw-rw-r--   1 ratbert  ratbert      1903 Jul 18  1997 smcser.inf 
    -rw-rw-r--   1 ratbert  ratbert     31350 Jun  7  1997 smcser.vxd 
    
    如果有疑问,请始终查找 Windows95 的 .inf/.vxd 驱动程序。Windows95 没有附带 _任何_ FIR 驱动程序。(它们都是第三方提供的,主要来自 Counterpoint,该公司已被 ESI 收购)。

  7. 此外,Thomas Davis 还找到了 SMC 制作的一个小型 DOS 实用程序包。该软件包包含 FINDCHIP.EXE。并包含一个 FIRSETUP.EXE 实用程序,该实用程序应该能够设置除芯片地址之外的所有值。此外,它还包含 BIOSDUMP.EXE,它产生以下输出

    示例 1(来自 COMPAQ Armada 1592DT)

    In current devNode:
               Size      = 78
               Handle    = 14
               ID        = 0x1105D041 = 'PNP0511' -- Generic IrDA SIR
    Types:  Base = 0x07, Sub = 0x00,  Interface = 0x02
    Comm. Device, RS-232, 16550-compatible
    Attribute = 0x80
                    CAN be disabled
                    CAN be configured
    BOTH Static & Dynamic configuration
    Allocated Resource Descriptor Block TAG's:
    TAG=0x47, Length=7 I/O Tag, 16-bit Decode
    Min=0x03E8, Max=0x03E8
    Align=0x00, Range=0x08
    TAG=0x22, Length=2 IRQ Tag, Mask=0x0010
    TAG=0x79, Length=1 END Tag, Data=0x2F
    

    结果 1

    Irq 标签,掩码(位映射 - )= 0x0010 = 0000 0000 0000 0001 0000 因此,它是 IRQ 4。(从 0 开始,向上计数...),所以这是一个仅 SIR 设备,位于 IRQ=4,IO=x03e8。

    示例 2(来自未知机器)

    In current devNode:
              Size      = 529
              Handle    = 14
              ID        = 0x10F0A34D = 'SMCF010' -- SMC IrCC
    Types:  Base = 0x07, Sub = 0x00,  Interface = 0x02
    Comm. Device, RS-232, 16550-compatible
    Attribute = 0x80
                   CAN be disabled
                   CAN be configured
    BOTH Static & Dynamic configuration 
    
    Allocated Resource Descriptor Block TAG's:
    TAG=0x47, Length=7 I/O Tag, 16-bit Decode
    Min=0x02F8, Max=0x02F8
    Align=0x00, Range=0x08
    TAG=0x22, Length=2 IRQ Tag, Mask=0x0008
    TAG=0x47, Length=7 I/O Tag, 16-bit Decode
    Min=0x02E8, Max=0x02E8
    Align=0x00, Range=0x08
    TAG=0x2A, Length=2 DMA Tag, Mask=0x02, Info=0x08
    TAG=0x79, Length=1 END Tag, Data=0x00
    

    结果 2

    a) 这是一个 SMC IrCC 芯片

    b) 一部分位于 0x02f8,io 扩展为 8 字节;irq = 3

    c) 另一部分位于 0x02e8,io 扩展为 8 字节;dma = 1 (0x02 =0000 0010)

    Warning

    该软件包不适用于最终用户,并且某些实用程序可能有害。软件包中唯一的文档是 Microsoft Word 格式。Linux 用户可以使用 catdoc 阅读它。

  8. 使用 MicroSoft Windows9x/NT 操作系统的设备管理器

  9. 您也可以使用下面提到的硬件调查

  10. 作为最后的手段,您甚至可以打开笔记本电脑并查看芯片组本身的标记。

12.37.1.3. 硬件调查

我在 TuxMobil 上做了一个 IrDA 硬件调查。此列表还包含有关此处未提及的红外设备的信息(鼠标、打印机、遥控器、收发器等)。

为了使此列表更有价值,有必要收集更多关于不同硬件中红外设备的信息。您可以通过向我发送一封简短的电子邮件来提供帮助,其中包含您拥有的硬件的确切名称以及使用的红外控制器的类型。

还请告诉我 Linux/IrDA® 的工作情况(它在哪个 tty、端口和中断下工作,以及相应的红外设备,例如打印机、手机)。

您还可以通过提供关于某些红外设备的详细技术信息来提供帮助,这对于开发 Linux 驱动程序是必要的。

12.37.2. 相关文档

  1. Linux-Infrared-HOWTO

12.37.3. IrDA® 配置 - 概述

12.37.3.1. IrDA®

Linux 红外支持仍处于实验阶段,但正在迅速改进。我尝试在一个简短的概述中描述安装过程。请阅读我的 Linux-Infrared-HOWTO 以获取详细信息。并访问 Linux/IrDA 项目

12.37.3.1.1. 内核

  1. Linux/IrDA 项目 获取 2.4.x 内核和最新的 Linux/IrDA 补丁。

  2. 编译它时启用所有 IrDA® 选项。

  3. 还要启用实验性、sysctl、串行和网络支持。

12.37.3.1.2. 软件

  1. Linux IrDA 项目 获取 Linux IrDA® 软件 irda-utils

  2. 解压软件包。

  3. 执行 make depend; make all; make install

12.37.3.1.3. 硬件

  1. 在 BIOS 中启用 IrDA® 支持。

  2. 如上所述,检查 SIR 或 FIR 支持。

  3. 使用 irattach DEVICE -s 1 启动 Linux/IrDA® 服务。

  4. 使用 dmesg 观察内核输出。

12.37.3.2. Linux 红外遥控 - LIRC

Linux 红外遥控 LIRC 是一个软件包,它支持接收和发送最常见的红外遥控器的红外信号。它包含一个用于连接到串行端口的硬件的设备驱动程序、一个使用此设备驱动程序解码和发送红外信号的守护程序、一个将红外信号转换为鼠标移动的鼠标守护程序,以及一些允许您使用遥控器控制计算机的用户程序。我没有关于红外遥控在笔记本电脑红外设备上工作情况的有效信息。