Linux 红外 HOWTO

Werner Heuser

Linux 移动版本  版本

版本 3.8

TuxMobil

柏林

$Date: 2011-10-31 15:06:07 $

红外-HOWTO 介绍了 Linux 和红外设备,以及如何使用 Linux/IrDA 项目提供的软件。该软件包使用符合 IrDA(TM) 标准的标准。IrDA(TM) 是一种用于红外无线通信的工业标准,1996 年 1 月之后生产的大多数笔记本电脑都配备了符合 IrDA(TM) 标准的红外收发器。红外端口使您可以与打印机、调制解调器、传真机、局域网以及其他笔记本电脑或 PDA 进行通信。速度范围从 2400bps 到 4Mbps。

Linux/IrDA 协议栈支持 IrLAP、IrLMP、IrIAS、IrIAP、IrLPT、IrCOMM、IrOBEX 和 IrLAN。其中几个协议同时实现了客户端和服务器。还支持通过多个 IrDA(TM) 设备同时进行多个 IrLAP 连接。Linux/IrDA 项目始于 1997 年底,此后经历了一些重大改写。请不要期望每个功能都能立即正常工作。据我所知,Linux/IrDA 是唯一可用的开源 IrDA 实现。

通过红外进行远程控制 (RC) 是 Linux 红外远程控制 - LIRC 项目的目标,本 HOWTO 也对此进行了描述。

版权所有 (c) 2000-2011 Werner Heuser。在 GNU 自由文档许可证 1.1 版或自由软件基金会发布的任何后续版本的条款下,允许复制、分发和/或修改本文档的所有章节;不变部分为“前言”和“致谢”,封面文字为“Linux 红外 HOWTO”,封底文字为“关于文档和作者”部分。题为“GNU 自由文档许可证”的部分包含许可证副本。


目录
前言
1. 关于本文档
2. 文档状态
3. 关于作者
I. IrDA
1. 关于 Linux/IrDA 项目
2. 入门
3. 特定连接和 IrDA - 协议
4. Linux/IrDA 支持的硬件
5. 高级主题
II. 红外远程控制
6. 简介
7. Linux 红外远程控制 - LIRC
8. 乐高 Mindstorm
9. 串行红外遥控器
10. COREL Netwinder PC 的红外工具
11. ir
12. irmctl
13. IRManager
14. irXxD
15. XR3
16. IR 文件选择器
17. IControl
18. jlirc
19. lircemu
20. smartmenu
21. iowlircemu
22. tonto
23. 红外远程控制 ./. IrDA
III. 附录
A. 致谢
B. 修订历史
C. 串行红外端口嗅探器
D. 红外光与眼睛安全
E. 版权、免责声明、商标
图表列表
5-1. IrDA 协议栈

前言

 

与其死亡,不如红色。

 未知作者 Ess

1. 关于本文档

本文档基于 Linux/IrDA 项目主页的文档部分 和 Jean Tourillhes 的 Linux/IrDA 教程。我还收录了 Linux/IrDA 核心团队、Linux/IrDA 邮件列表和其他来源提供的资料。

本文档包含在 LINUX 文档项目 - TLDP 中。

本文档的最新版本可在 TuxMobil-HOWTOs 中找到。

Mathieu Arnold 提供了 法语 IR-HOWTO 的早期版本。Linux Japanese FAQ Project 提供了 v3.4 版本的 日语翻译

如果您对 HOWTO 有任何意见或问题,请随时与我联系。我知道这些资料尚未完成或完美,但我希望您觉得它仍然有用。有关 Linux/IrDA 的其他问题和最新信息,请在 Linux/IrDA 邮件列表中提问,如下所述。

Werner Heuser <wehe_at_tuxmobil.org>


2. 文档状态

我使用的最新内核是 2.4.19,最新的 irda-utils 版本是 0.9.15。我尝试检查所有信息,但我还没有所有必要的红外硬件,所以如果某些东西对您不起作用,请不要责怪我。

Warning

以前的内核和 irda-utils 版本需要完全不同的设置。由于我不建议使用以前的版本,因此本文档中删除了所有对这些设置的引用。您可以在“代码历史”一章中找到一些提示。

我已经包含了所有更改,以便与 2.4.x 内核系列和最新的 Linux/IrDA 开发同步。因此,仍然需要进行一些测试和校对。所以请不要期望任何东西都能开箱即用。


3. 关于作者

自从我在我的第一台笔记本电脑 (HP OmniBook 800CT) 上安装了 Linux 以来,我就沉迷于 Linux 和移动计算机。我编写了 Linux-Mobile-Guide 并创立了 TuxMobil:Linux 与笔记本电脑、上网本、PDA、移动电话和便携式计算机。我还对 升级、维修和改装笔记本电脑或上网本拆卸和重新组装 PDA 和掌上电脑 以及 拆卸和改装移动(蜂窝)电话 感兴趣。2000 年 5 月,我创立了德国供应商 Xtops.DE:Linux、笔记本电脑、上网本、预装 PDA,以赞助 TuxMobil 项目。

我也是 Linux-Ecology-HOWTO 的作者,该文档描述了 Linux 作为拯救我们环境的一种手段,也是 DataConv 数据转换和迁移工具调查 的创始人。


第 1 章 关于 Linux/IrDA 项目

1.1. 项目历史

该项目始于 1997 年底,名称为 Linux/IrDA。由于 IrDA 名称(由 Infrared Data Association IrDA 商标化)存在一些问题,名称更改为 Linux/IR。1998 年底,两者之间的关系变得更好,名称再次更改为 Linux/IrDA。自 1999 年 2 月以来,该项目成为 IrDA 的正式成员。

有兴趣加入这些努力的公司和开发人员应联系 Linux/IrDA 项目或我 <wehe_at_tuxmobil.org>。


1.2. 代码历史

Linux/IrDA 项目对程序代码进行了一些更改,您应该了解这些更改,以便理解一些较旧文档可能造成的混淆,无论如何您都不应该使用这些文档。

Warning

文档中的一些警告是由以下概念、设备名称和参数的更改引起的。我希望我现在已经弄清楚了,它们有时也让我感到困惑。新样式的设置适用于 Kernel 2.2.15 / 2.4.0。Kernel 2.6 中再次进行了一些重要更改,本文档尚未提及所有这些更改,我希望尽快修复。无论如何,我建议不要使用早于 2.6 的任何内核版本。本文档将在适当的位置描述与 kernel 2.4 系列的区别,以便为必须使用 kernel 2.4 的情况提供文档,这种情况希望很少见。您应该始终使用最新的内核、irda-utils 和文档。

  • 对于 2.0.x 内核,Linux/IrDA 支持以完全不同的方式工作(仅用户空间程序),Linux/IrDA 项目不再支持它。自 2.1.131 和 2.2.0 起,它成为内核的一部分。

  • irda 设备的主设备号从 61 更改为 161(据我记得,也存在主设备号 60),此外,还存在不同的且现在已过时的次设备号,请参阅下面的当前设备号列表。

  • irmanager 现在已过时,它的任务现在由 irattach 完成。

  • 模块名称/dev/ircomm_tty更改为/dev/ircomm-tty,但是还有其他模块在其名称中使用“-”或“_”,这可能会造成混淆。

  • 设备名称/dev/irnine/dev/ircomm_new已过时。

  • IrLPT 现在由 IrCOMM 处理。因此,所有对 irlpt_server 的引用都已过时。

  • 从 irda-utils 0.9.15 开始,irattach-s 选项的行为已更改。该选项不再使用参数 1

  • 用于东芝笔记本电脑的 toshoboe 驱动程序已从 2.6 内核中删除。

  • Kernel 2.6 中进行了一些重要更改(例如,模块名称),本文档尚未提及这些更改,我希望尽快修复。


第 2 章 入门

2.1. 软件

irda-utils 软件包提供的命令是获得工作 IrDA 连接的基本工具集。其他工具(e-Squirt、IrNET 等)是可选的。自 0.9.15 版本起,包含手册页。大多数当前手册页位于 TuxMobil


2.1.1. IrDA-Utils

2.1.1.1. 编译

  • 使用 Linux/IrDA 项目提供的最新 irda-utils 源代码。还建议使用最新的 glibc 库。您可以使用 ldd --version 找出当前版本。使用较旧的 libc5 库可能会导致编译错误。

  • 使用 tar xvzf irda-utils<VERSION> 解压软件包。我建议在/usr/src.

  • 中执行此操作。执行 make clean (如果您是第一次编译软件包,则不需要)。

  • 执行 make all 以构建二进制文件。

  • 执行 make install,这会将所有命令放入正确的位置,并将一些配置文件安装到/etc/irda.

  • 中。有时,当您编译 IrDA 协议栈或某些各种 IrDA 软件包时,编译器可能会抱怨未定义诸如 IRLMP_HINT_MASK_SET 或 IRDAPROTO_ULTRA 之类的内容。这是因为与内核头文件以及大多数发行版处理它的方式相关的混乱。如果您有 2.4.X 内核源代码,则修复很简单。只需将头文件 irda.h 从内核复制到您的 include 目录 cp /usr/src/linux/include/linux/irda.h /usr/include/linux


2.1.1.2. 预编译软件包

自 Potato 以来,Debian/GNU Linux 提供了 irda-utils 软件包。Mandrake 自 6.1 起,Redhat 自 6.1 起,SuSE 自 6.1 起也包含 irda-utils 的 RPM 软件包。预编译软件包的一些警告可能是内核版本和适当软件包版本之间存在一些不兼容性。


2.1.1.3. Linux/IrDA-Utils 的内容

2.1.1.3.1. irattach

irattach 使用模块集作为参数;它可以是特定的 FIR 驱动程序:irattach toshoboeircomm (然后它加载别名为“irda0”的模块,在/etc/modules.conf)

中)。如果您是幸运儿之一,拥有受支持的 FIR 芯片组,那么您不再需要使用 irattach。现在您只需 modprobe 驱动程序即可。


2.1.1.3.2. irdadump

一个程序,用于显示在红外链路上发送和接收的所有帧。

将 IrDA 设备驱动程序实现为网络设备驱动程序的一个优势是,您应该能够将嗅探器附加到设备(或实际的数据包类型)。这样,就可以使用一个非常方便的实用程序 irdadump(而不是 tcpdump)。这将使调试变得更容易得多。Linux-2.2 实现了 BPF(Berkeley 数据包过滤器),因此可以过滤掉您想要查看的确切帧。

注意:您可能需要 root 权限才能使用 irdadump 。内核中必须启用 CONFIG_PACKET。如果编译为模块,您可能需要手动加载模块。irdadump 已转换为库,因此也可以从 GUI 应用程序中使用。

这是 Linux 和 Palm III 之间的小会话的示例输出。此日志显示本地 irobex 层未响应,因此 Palm III 发送了一个 disc 帧。

dagbnb /home/dagb/linux/irda-utils/irdadump/ # ./irdadump

20:18:15.305711 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=0
20:18:15.385597 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=1
20:18:15.465568 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=2
20:18:15.545953 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=3
20:18:15.625574 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=4
20:18:15.705575 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=5
20:18:15.785601 xid:cmd:saddr=0x05c589 > daddr=0xffffffff,S=6,s=255,info=Linux
20:18:18.075526 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=0
20:18:18.225498 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=1
20:18:18.375495 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=2
20:18:18.526355 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=3
20:18:18.675614 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=4
20:18:18.676364 xid:rsp:saddr=0x05c589 > daddr=0xb50c14b,S=6,s=4
20:18:18.765506 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=5
20:18:18.927221 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=255,info=Palm III
20:18:18.975796 snrm:cmd,ca=0xfe,pf=1
20:18:18.976534 ua:rsp,ca=0x58,pf=1
20:18:18.977145 ua:rsp,ca=0x58,pf=1
20:18:19.585627 rr:rsp,ca=0x58,nr=0,pf=1
20:18:19.585810 rr:rsp,ca=0x58,nr=0,pf=1
20:18:19.606413 i:cmd,ca=0x58,nr=0,ns=0,pf=1
20:18:19.606582 rr:rsp,ca=0x58,nr=1,pf=1
20:18:19.627708 rr:cmd,ca=0x58,nr=0,pf=1
20:18:19.627871 i:rsp,ca=0x58,nr=1,ns=0,pf=1
20:18:19.650571 disc:cmd,ca=0x58,pf=1
20:18:19.650736 ua:rsp,ca=0x58,pf=1
20:18:21.165524 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=0
20:18:21.315608 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=1
20:18:21.315793 xid:rsp:saddr=0x05c589 > daddr=0xb50c14b,S=6,s=1
20:18:21.395499 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=2
20:18:21.545516 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=3
20:18:21.695500 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=4
20:18:21.845840 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=5
20:18:22.007222 xid:cmd:saddr=0xb50c14b > daddr=0xffffffff,S=6,s=255,info=Palm
III
20:18:22.056143 snrm:cmd,ca=0xfe,pf=1
20:18:22.056310 ua:rsp,ca=0xc8,pf=1
20:18:22.056381 ua:rsp,ca=0xc8,pf=1

37 pacckets received by filter


2.1.1.3.3. irdaping

可以使用 IrDA 测试帧尝试 ping 远程设备。并非所有设备都实现了对测试帧的支持。这是一个类似于 ping(8) 的程序。它发送 IrDA 测试帧,其中包含一些用户数据,这些用户数据包含帧号和发送帧的时间。您还可以使用 -s 选项更改帧的大小。您必须提供 IrDA 设备地址,而不是 IP 地址。您必须能够通过使用 irdadump 获取该设备地址。

这是一个输出示例(ping ACTiSYS IR-100M)

dagbnb /home/dagb/linux/irda-utils/irdaping/ # ./irdaping 0xf7be8388
IrDA ping (0xf7be8388): 32 bytes
32 bytes from 0xf7be8388: irda_seq=0 time=102.466003 ms.
32 bytes from 0xf7be8388: irda_seq=1 time=102.202003 ms.
32 bytes from 0xf7be8388: irda_seq=2 time=102.170998 ms.
32 bytes from 0xf7be8388: irda_seq=3 time=101.633003 ms.

4 packets received by filter

Christian Gennerat “我使用一个不使用任何参数的别名(在 $HOME/.bashrc 中):alias irping="irdaping \`grep daddr /proc/net/irda/discovery|sed s/.*daddr://\`" 当只有一个已发现的客户端时,它工作正常。”


2.1.1.3.4. irkbd

实现对 Tekram IR-660 红外扩展坞使用的鼠标和键盘协议的支持。有关如何将外部键盘与 Linux PDA 一起使用的详细信息,请参见下文。


2.1.1.3.5. findchip

尝试找出您的机器正在使用哪个 FIR IrDA 芯片组。尝试 findchip -v 进行检查。有关检测芯片组的其他方法,请参见下文。


2.1.1.3.6. irsockets

使用 IrDA 套接字的程序集合。


2.1.1.3.7. irpsion5

用于与您的 Psion PDA 交换文件的文件传输程序。


2.1.1.3.8. /etc/irda

此目录包含配置文件irda.conf。例如,您可以为 SIR 驱动程序配置串行端口。对于首次测试,您应该尝试 SIR 驱动程序。


2.1.2. openobex

OpenOBEX 项目的总体目标是制作 Object Exchange (OBEX) 协议的开源实现。OBEX 是一种会话协议,可以最好地描述为二进制 HTTP 协议。OBEX 内置于 PDA(如 Palm Pilot)和移动电话(如 Ericsson R320、西门子 S25、西门子 S45、西门子 ME45、诺基亚 NM207 和诺基亚 9110 Communicator)等设备中。OBEX 针对 Ad-hoc 无线链路进行了优化,可用于交换各种对象,如文件、图片、日历条目 (vCal) 和名片 (vCard)。一个典型的应用是 PalmOS 的“beam”功能。


2.1.3. e-squirt

e-Squirt 是一种通过 IrDA 介质发送 URL 的简单协议。这允许与启用 CoolTown 的设备进行交互。


2.1.4. Linux-IrDA 的 IrNET

IrNET 是一种允许在两个 IrDA 对等方之间以高效方式传输 TCP/IP 流量的协议。它是一个薄层,在 IrTTP 套接字中传递 PPP 数据包。它使用同步模式下的 PPP 以提高效率,并提供许多灵活性和各种功能。IrNET 的主要部分包含在内核 2.4.x 中,并且用户空间守护程序(用于自动化连接)可在网页上找到。


2.1.5. Java - IrDA 接口

Java 红外套接字 API 提供了一种通过 Java 在 Linux 机器上通过红外介质进行通信的方式。因此,Java 应用程序开发人员可以更轻松地开发涉及红外访问的应用程序。该 API 与 java.net.Socket API 非常相似,并且是使用 Linux 红外协议栈实现的。连接导向流(IrSocket 和 IrServerSocket)和无连接 Ultra(UltraSocket、UltraPacket)接口均可用。


2.2. 内核

2.2.1. 前言

请阅读 TLDP 的 Kernel-HOWTO 以获取有关编译过程的更多信息。Thomas Hertweck 编写了另一个有用的 Linux-Kernel-HOWTO (但仅提供德语和意大利语版本)。查看 Linux/IrDA 项目 或 Linux/IrDA 邮件列表存档以获取最新补丁。

您将在以下位置找到 Linux/IrDA 内核代码:

/usr/src/linux/net/irda (协议内容)

/usr/src/linux/drivers/net/irda (设备驱动程序)

/usr/src/linux/include/net/irda (头文件)


2.2.2. 常规参数

确保您使用内核 2.6 源代码。我建议不要使用任何早于 2.6 的内核版本,但本文档将在适当的位置描述与内核 2.4 系列的区别。如果不确定您的内核版本,请尝试 uname -r

对于当前的 2.6 内核,不需要任何补丁。如果 Linux/IrDA 项目或其他地方有内核补丁要应用(例如,对于内核 2.4),请将其放入目录/usr/src或内核源代码所在的任何其他位置,并应用类似(替换patch-2_4.0-irdaXXX为实际文件名)

cd /usr/src
tar xvzf patch-2_4.0-irdaXXX.tar.gz
cd linux
patch -p1 -l < ../patch-2_4.0-irdaXXX
对于最新的驱动程序,必须启用实验性支持 CONFIG_EXPERIMENTAL,至少在内核 2.4 中是这样。

在“常规设置”中启用 sysctl CONFIG_SYSCTL

您应该具有 proc 文件系统支持 CONFIG_PROC_FS

还有 SIR 功能的串行支持 CONFIG_SERIAL

我不确定是否必须有打印机支持才能将打印机与 Linux/IrDA CONFIG_PRINTER 一起使用。但我认为此功能不是必需的。

_必须_ 启用网络支持 CONFIG_NET

确保您的内核中具有模块支持 CONFIG_MODULES!例如,使用 lsmod 测试它。

还有 kerneld 支持 CONFIG_KERNELD。但是 kmod (CONFIG_KMOD) 也有效。单内核似乎也有效。但强烈建议使用模块!

要使用 irdadump,您可能必须设置 CONFIG_PACKET

如果您仅应用 Linux/IrDA 补丁,则不应执行 make clean,这样可以节省您一些时间。我建议您执行类似以下操作:

对于内核 2.4,请使用:make dep && make all && make modules && make install && make modules_install。对于内核 2.6,请使用:make all && make install && make modules_install。如果您遇到非常奇怪的错误,请尝试在 make clean 之后从头开始重建。


2.2.3. IrDA 特定参数

以下内容来自../linux-2.4.3/Documentation/Configure.help(内核 2.4)或../linux-2.6.x/net/irda/Kconfig, ../linux-2.6.x/drivers/net/irda/Kconfig(内核 2.6),并由我进行了一些修改。请查阅最新的可用内核文档以获取当前信息和新驱动程序。


2.2.3.1. IrDA 子系统支持

CONFIG_IRDA 如果要构建对 IrDA (TM) 协议的支持,请在此处选择 Y。红外数据协会 (tm) 规定了无线红外通信标准,并且大多数笔记本电脑和 PDA 都支持该标准。

要使用 Linux 对 IrDA (tm) 协议的支持,您还需要一些用户空间实用程序,例如 irattach。有关更多信息,请参阅文件 Documentation/networking/irda.txt。您还需要阅读红外-HOWTO,可在 TuxMobil 中找到。

此支持也可用作名为 irda.o 的模块。如果要将其编译为模块,请在此处选择 M 并阅读 Documentation/modules.txt。

IrDA 缓存上次 LSAP

CONFIG_IRDA_CACHE_LAST_LSAP 如果您希望 IrLMP 缓存上次使用的 LSAP,请在此处选择 Y。这很有意义,因为大多数帧将在同一连接上发送/接收。启用此选项将为每个帧节省哈希查找。

如果不确定,请选择 Y。

IrDA 快速 RR

CONFIG_IRDA_FAST_RR 如果您希望 IrLAP 在充当主站时发送快速 RR(接收就绪)帧,请在此处选择 Y。这将使 IrLAP 在接收到帧时立即发送 RR 帧(如果其自身的传输队列当前为空)。当接收大量数据时,这将大大提高速度,因为辅助站不必等待最长周转时间才能被允许下次传输。如果辅助站的传输队列也为空,则主站将退避等待更长时间以发送 RR 帧,直到超时达到正常值。启用此选项将使红外二极管消耗更多电量,从而缩短电池寿命。

如果不确定,请选择 N。

IrDA 调试

CONFIG_IRDA_DEBUG 如果您希望 IrDA 子系统将调试信息写入您的 syslog,请在此处选择 Y。您可以在/proc/sys/net/irda/debug

中更改调试级别。如果不确定,请选择 Y(因为它使查找错误更容易)。

IrLAP 压缩支持

CONFIG_IRDA_COMPRESSION 压缩 _不是_ IrDA(tm) 协议规范的一部分,但它运行良好!Linux 是第一个尝试在 IrLAP 层进行压缩支持的系统。这意味着,如果您运行 Linux <-> Linux 配置,您将仅从压缩中受益。

如果您在此处选择 Y,则还需要对下面的压缩协议选择 Y 或 M。

IrLAP Deflate 压缩协议(实验性)

CONFIG_IRDA_DEFLATE 如果要构建对 Deflate 压缩协议的支持,请在此处选择 Y。Deflate 压缩 (GZIP) 与 PPP 协议使用的压缩完全相同。

如果要将此压缩支持编译为模块,请在此处选择 M 并阅读 Documentation/modules.txt。该模块将称为 irda_deflate.o。

IrLAN 协议 但目前 IrLAN 协议不再由 Linux/IrDA 核心团队维护。

CONFIG_IRLAN 如果要构建对 IrLAN 协议的支持,请在此处选择 Y。如果要将其编译为模块 (irlan.o),请在此处选择 M 并阅读 Documentation/modules.txt。IrLAN 模拟以太网,并使使用红外光束建立无线 LAN 成为可能。

IrLAN 协议可用于与红外接入点(如 HP NetbeamIR 或 ESI JetEye NET)通信。您还可以连接到另一个运行 IrLAN 协议的 Linux 机器以进行 Ad-hoc 网络连接!

IrCOMM 协议

CONFIG_IRCOMM 如果要构建对 IrCOMM 协议的支持,请在此处选择 Y。如果要将其编译为模块(您将获得 ircomm.oircomm-tty.o),请在此处选择 M 并阅读 Documentation/modules.txt。IrCOMM 实现串行端口仿真,并使所有现有的应用程序都能够通过红外链路理解 TTY。因此,您应该能够使用 PPP、minicom 等应用程序。启用此选项将创建两个模块,名为ircommircomm-tty.


2.2.3.2. 设备驱动程序

IrTTY IrDA 设备驱动程序

CONFIG_IRTTY_SIR 如果要构建对 IrTTY 行规程的支持,请在此处选择 Y。如果要将其编译为模块 (irtty.o),请在此处选择 M 并阅读 Documentation/modules.txt。IrTTY 使将 Linux 自己的串行驱动程序用于所有 16550 兼容的 IrDA 端口成为可能。大多数 IrDA 芯片都与 16550 兼容,因此您可能应该对此选项选择 Y。但是,使用 IrTTY 会将连接速度限制为 115200 bps (IrDA SIR 模式)

如果不确定,请选择 Y。

IrPORT IrDA 设备驱动程序

CONFIG_IRPORT_SIR 如果您想构建对 IrPORT IrDA 设备驱动程序的支持,请在此处选择 Y。如果您想将其编译为模块 (irport.o),请在此处选择 M 并阅读 Documentation/modules.txt。IrPORT 可以代替 IrTTY 使用,有时会更好。例如,如果您的 IrDA 端口没有回声消除功能,则 IrPORT 可以正常工作,因为此驱动程序仅在半双工模式下工作。您不需要将 irattach 与 IrPORT 一起使用,但您可以像 FIR 驱动程序一样插入它 (insmod irport io=0x3e8 irq=11)。请注意,IrPORT 是一个 SIR 设备驱动程序,这意味着速度限制为 115200 bps。

如果不确定,请选择 Y。

Winbond W83977AF IrDA 设备驱动程序

CONFIG_WINBOND_FIR 如果您想为 Winbond W83977AF 超级 I/O 芯片组构建 IrDA 支持,请在此处选择 Y。此驱动程序应用于 Corel NetWinder 中的 IrDA 芯片组。该驱动程序支持 SIR、MIR 和 FIR (4Mbps) 速度。

如果您想将其编译为模块,请在此处选择 M 并阅读 Documentation/modules.txt。该模块将被称为 w83977af_ir.o。

NSC PC87108 IrDA 设备驱动程序

CONFIG_NSC_FIR 如果您想构建对 NSC PC87108 和 PC87338 IrDA 芯片组的支持,请在此处选择 Y。此驱动程序支持 SIR、MIR 和 FIR (4Mbps) 速度。

如果您想将其编译为模块,请在此处选择 M 并阅读 Documentation/modules.txt。该模块将被称为 nsc-ircc.o。

东芝 Type-O IR 端口设备驱动程序

CONFIG_TOSHIBA_FIR 如果您想构建对东芝 Type-O IR 芯片组的支持,请在此处选择 Y。东芝 Libretto 100CT 和许多其他笔记本电脑都使用此芯片组。如果您想将其编译为模块,请在此处选择 M 并阅读 Documentation/modules.txt。该模块将被称为 toshoboe.o。

SMC IrCC (实验性)

CONFIG_SMC_IRCC_FIR 如果您想构建对 SMC 红外通信控制器的支持,请在此处选择 Y。它用于富士通 Lifebook 635t 和索尼 PCG-505TX。如果您想将其编译为模块,请在此处选择 M 并阅读 Documentation/modules.txt。该模块将被称为 smc-ircc.o。

ALi M5123 FIR 控制器驱动程序 (实验性)

CONFIG_ALI_FIR 如果您想构建对 ALi M5123 FIR 控制器的支持,请在此处选择 Y。ALi M5123 FIR 控制器嵌入在 ALi M1543C、M1535、M1535D、M1535+、M1535D 南桥中。此驱动程序支持 SIR、MIR 和 FIR (4Mbps) 速度。

如果您想将其编译为模块,请在此处选择 M 并阅读 Documentation/modules.txt。该模块将被称为 ali-ircc.o。

串行加密狗支持

CONFIG_DONGLE 如果您的红外设备连接到计算机的串行端口,请在此处选择 Y。这些设备称为加密狗。然后为您的特定加密狗驱动程序选择 Y 或 M。

请注意,此问题的答案不会直接影响内核:选择 N 只会导致此配置脚本跳过所有

ESI JetEye PC 加密狗

CONFIG_ESI_DONGLE 如果您想构建对 Extended Systems JetEye PC 加密狗的支持,请在此处选择 Y。如果您想将其编译为模块,请在此处选择 M 并阅读 Documentation/modules.txt。ESI 加密狗连接到普通的 9 针串行端口连接器,目前只能由 IrTTY 使用。要激活对 ESI 加密狗的支持,您必须像这样启动 irattach:irattach -d esi

ACTiSYS IR-220L 和 IR220L+ 加密狗

CONFIG_ACTISYS_DONGLE 如果您想构建对 ACTiSYS IR-220L 和 IR220L+ 加密狗的支持,请在此处选择 Y。如果您想将其编译为模块,请在此处选择 M 并阅读 Documentation/modules.txt。ACTiSYS 加密狗连接到普通的 9 针串行端口连接器,目前只能由 IrTTY 使用。要激活对 ACTiSYS 加密狗的支持,您必须像这样启动 irattach:irattach -d actisysirattach -d actisys+

Tekram IrMate 210B 加密狗

CONFIG_TEKRAM_DONGLE 如果您想构建对 Tekram IrMate 210B 加密狗的支持,请在此处选择 Y。如果您想将其编译为模块,请在此处选择 M 并阅读 Documentation/modules.txt。Tekram 加密狗连接到普通的 9 针串行端口连接器,目前只能由 IrTTY 使用。要激活对 Tekram 加密狗的支持,您必须像这样启动 irattachirattach -d tekram

Greenwich GIrBIL 加密狗

CONFIG_GIRBIL_DONGLE 如果您想构建对 Greenwich GIrBIL 加密狗的支持,请在此处选择 Y。如果您想将其编译为模块,请在此处选择 M 并阅读 Documentation/modules.txt。Greenwich 加密狗连接到普通的 9 针串行端口连接器,目前只能由 IrTTY 使用。要激活对 Greenwich 加密狗的支持,您必须在 /etc/irda/drivers 脚本中插入 irattach -d girbil

Parallax Litelink 加密狗

CONFIG_LITELINK_DONGLE 如果您想构建对 Parallax Litelink 加密狗的支持,请在此处选择 Y。如果您想将其编译为模块,请在此处选择 M 并阅读 Documentation/modules.txt。Parallax 加密狗连接到普通的 9 针串行端口连接器,目前只能由 IrTTY 使用。要激活对 Parallax 加密狗的支持,您必须像这样启动 irattach irattach -d litelink

旧 Belkin 加密狗

CONFIG_OLD_BELKIN_DONGLE 如果您想构建对 Adaptec Airport 1000 和 2000 加密狗的支持,请在此处选择 Y。如果您想将其编译为模块,请在此处选择 M 并阅读 Documentation/modules.txt。该模块将被称为 old_belkin.o。一些信息包含在 drivers/net/irda/old_belkin.c 顶部的注释中。


2.2.4. 当前内核补丁

注意:donauboetoshoboe 的新版本,具有更好的 FIR 支持和与 lib-irda 的 Donauoboe 芯片的兼容性。注意:toshoboe 驱动程序已从 2.6 内核系列中删除。


2.3. 内核模块选项

此模块选项调查是使用 modinfo 命令生成的。

actisys.o
Dag Brattli <dagb_at_cs.uit.no> - Jean Tourrilhes <jt_at_hpl.hp.com>
ACTiSYS IR-220L and IR-220L+ dongle driver

ali-ircc.o
Benjamin Kong <benjamin_kong_at_ali.com.tw>
ALi FIR Controller Driver
io int array (min = 1, max = 4), description "Base I/O addresses"
irq int array (min = 1, max = 4), description "IRQ lines"
dma int array (min = 1, max = 4), description "DMA channels"

esi.o
Dag Brattli <dagb_at_cs.uit.no>
Extended Systems JetEye PC dongle driver

girbil.o
Dag Brattli <dagb_at_cs.uit.no>
Greenwich GIrBIL dongle driver

irport.o
Dag Brattli <dagb_at_cs.uit.no>
Half duplex serial driver for IrDA SIR mode
io int array (min = 1, max = 4), description "Base I/O adresses"
irq int array (min = 1, max = 4), description "IRQ lines"

irtty.o
Dag Brattli <dagb_at_cs.uit.no>
IrDA TTY device driver
qos_mtt_bits int, description "Minimum Turn Time"

litelink.o
Dag Brattli <dagb_at_cs.uit.no>
Parallax Litelink dongle driver

nsc-ircc.o
Dag Brattli <dagb_at_cs.uit.no>
NSC IrDA Device Driver
qos_mtt_bits int, description "Minimum Turn Time"
io int array (min = 1, max = 4), description "Base I/O addresses"
irq int array (min = 1, max = 4), description "IRQ lines"
dma int array (min = 1, max = 4), description "DMA channels"
dongle_id int, description "Type-id of used dongle"

old_belkin.o
Jean Tourrilhes <jt_at_hpl.hp.com>
Belkin (old) SmartBeam dongle driver

smc-ircc.o
Thomas Davis <tadavis_at_jps.net>
SMC IrCC controller driver
ircc_dma int, description "DMA channel"
ircc_irq int, description "IRQ line"

tekram.o
Dag Brattli <dagb_at_cs.uit.no>
Tekram IrMate IR-210B dongle driver

toshoboe.o
James McKenzie <james_at_fishsoup.dhs.org>
Toshiba OBOE IrDA Device Driver
max_baud int

w83977af_ir.o
Dag Brattli <dagb_at_cs.uit.no>
Winbond W83977AF IrDA Device Driver
qos_mtt_bits int, description "Mimimum Turn Time"
io int array (min = 1, max = 4), description "Base I/O addresses"
irq int array (min = 1, max = 4), description "IRQ lines"

irda.o
Dag Brattli <dagb_at_cs.uit.no>
The Linux IrDA Protocol Subsystem
irda_debug_R07c03e02 long

irlan.o
Dag Brattli <dagb_at_cs.uit.no>
The Linux IrDA LAN protocol
eth int, description "Name devices ethX (0) or irlanX (1)"
access int, description "Access type DIRECT=1, PEER=2, HOSTED=3"

   But currently the IrLAN protocol is no longer maintained
   by the Linux/IrDA core team.

ircomm-tty.o
Dag Brattli <dagb_at_cs.uit.no>
IrCOMM serial TTY driver

ircomm.o
Dag Brattli <dag_at_brattli.net>
IrCOMM protocol

irnet.o
<none>
<none>


2.4. 配置

2.4.1. 设备编号

mknod /dev/ircomm0 c 161 0
mknod /dev/ircomm1 c 161 1
mknod /dev/irlpt0 c 161 16
mknod /dev/irlpt1 c 161 17
mknod /dev/irnet c 10 187
chmod 666 /dev/ir*
如果您想使用 irkbd 功能,可能需要一些其他设备编号。您可以在以下位置找到最新的设备编号../src/linux/Documentation/devices.txt.


2.4.2. 设备排列

首先,您应该将您的 IrDA 设备放在范围内。虽然 Linux/IrDA 服务可能会自动检测到每个新设备,但我只有在配置过程中设备在范围内时才有良好的体验。

将您的红外设备保持在彼此一米以内和 30 度角范围内。它们之间必须有直接的视线。如果这不可能,您可以使用镜子(未使用的 M$ CD 应该效果不错)。


2.4.3. /etc/modules.conf

将以下行添加到您的/etc/modprobe.conf(对于内核 2.4/etc/modules.conf) 文件(注意:实际文件名可能取决于您的 Linux 发行版)

# IrDA over a normal serial port, or a serial port compatible IrDA port (SIR)
alias tty-ldisc-11 irtty

# IrCOMM (for printing, PPP, Minicom etc)
alias char-major-161 ircomm-tty     # if you want IrCOMM support

# IRLAN
# But currently the IrLAN protocol is no longer maintained
# by the Linux/IrDA core team.
alias irlan0 irlan

# To be able to attach some serial dongles
# These values are hard-coded in irattach (not instance order)
alias irda-dongle-0  tekram             # Tekram IrMate IR-210B
alias irda-dongle-1  esi                # ESI JetEye
alias irda-dongle-2  actisys            # Actisys IR-220L
alias irda-dongle-3  actisys            # Actisys IR-220L+
alias irda-dongle-4  girbil             # Greenwich GIrBIL
alias irda-dongle-5  litelink           # Parallax LiteLink/ESI JetEye
alias irda-dongle-6  airport            # Adaptec Airport 1000 and 2000
alias irda-dongle-7  old_belkin         # Belkin (old) SmartBeam dongle
alias irda-dongle-8  ep7211_ir          # Cirrus Logic EP7211 Processor (ARM)
alias irda-dongle-9  mcp2120            # MCP2120 (Microchip) based
alias irda-dongle-10 act200l            # ACTiSYS Ir-200L
alias irda-dongle-11 ma600              # Mobile Action ma600

# To use the FIR driver. This applies only to the specific device!!!

#options nsc-ircc dongle_id=0x09	# NSC driver on a IBM Thinkpad laptop
#options nsc-ircc dongle_id=0x08	# HP Omnibook 6000
#alias irda0 nsc-ircc

# options smc-ircc ircc_irq= ircc_dma=
# alias irda0 smc-ircc

# options toshoboe max_baud=
# alias irda0 toshoboe

# options w83977af_ir io= io2= irq= qos_mtt_bits=
# alias irda0 w83977af_ir

# IrNET module...
alias char-major-10-187 irnet       # Official allocation of IrNET
然后执行 depmod -a 以更新,然后当您需要它们时,所有 IrDA 模块都应该自动加载。请注意,出于测试原因,您可以手动加载它们,但请确保不要加载两次。如果您想使用 irkbd 功能或 USB 加密狗,可能需要其他一些条目。irda-utils 软件包中包含一个模板文件。

注意:但是,对于 Debian GNU/Linux,您不应编辑/etc/modules.conf直接,而是将行放在/etc/modutils/irda-utils中,并在之后运行 update-modules。对于 2.6 内核,运行 update-modules 似乎已过时。


2.4.4. /etc/irda

查看以下文件中的内容/etc/irda。编辑它们以反映您的设置。


2.4.5. BIOS 配置

确保您的红外端口在 BIOS 中已启用,并检查它使用的中断和端口地址。对于某些笔记本电脑,似乎需要安装 Microsoft-Windows 才能设置 BIOS 参数。

我收到报告,在某些笔记本电脑上,当连接到扩展坞时,红外端口被禁用。


2.4.6. 串行端口

请首先决定您是想在 SIR 模式还是 FIR 模式下设置 Irda。建议从 SIR 开始。


2.4.6.1. SIR

根据您的 SIR 端口选择 ttySx。提示:dmesg | grep tty(有关详细信息,请参阅下面的“启动 IrDA 堆栈”章节)。

要获取 SIR“串行”设备,请查看 BIOS。然后运行 dmesg | grep tty 以获取您的机器支持的 tty 设备概览。现在尝试选择可能是 IrDA 设备的那个。


2.4.6.2. FIR

如果您使用 SIR 失败(这似乎很少见),您可以尝试 FIR。首先查看 BIOS。为避免与串行设备发生冲突,您应该执行 setserial /dev/ttySx uart none。注意:在 SIR 模式下设置 IrDA 时,切勿使用 setserial /dev/ttySx uart none

来自 Florian Lohoff 您还应该设置“port 0x0 irq 0”,否则如果突然出现不同的 S1(例如,通过插入调制解调器 PCMCIA 卡),您将看到有趣的效果。串行驱动程序将访问旧端口,而没有获取这些端口,这将导致 irda 崩溃/挂起。这是一个我尚未在串行驱动程序中找到的错误,但它确实存在(在 serial_out serial_in 内容中放置一个 printk)。


2.4.7. 资源冲突:IRQ、IO

在某些情况下,可能会发生 IRQ 冲突,特别是已报告与声音、PCMCIA 或热插拔系统的冲突。检查 cat /proc/interrupts 以获取有关您的机器上 IRQ 使用情况的一些信息。


2.4.8. 启动 IrDA

最重要的是,您必须同步您的磁盘!!!也许您必须重新启动您的机器。您是否已阅读免责声明?

有三种低级驱动程序:SIR、FIR 和用于没有内置红外端口的机器的加密狗。要开始使用 Linux/IrDA,我建议使用 SIR 方法。

加载模块 modprobe irda irttyirattach /dev/ttyS1 -s 以将 IrDA 设备附加到 IrDA 服务。检查 lsmoddmesg

irdadump 现在应该显示范围内的所有可用 IrDA 设备。提示:如果您要连接不同的 Linux 机器,您可以使用 hostname YOUR_HOSTNAME 为每台计算机设置唯一的主机名。

在“服务器”端执行 pppd /dev/ircomm0 LOCAL_IP:REMOTE_IP 在“客户端”端执行 pppd /dev/ircomm0 .

您现在可以使用 ping 测试连接。现在可以使用各种网络连接(ssh、NFS、...)。


第 3 章。特定连接和 IrDA - 协议

3.1. 启动 IrDA 堆栈

有三种低级驱动程序:SIR、FIR 和加密狗。


3.1.1. 标准红外 - SIR

  • 尝试找出 IR 设备使用的串行端口。您可以通过观看 dmesg 的输出来做到这一点。如果串行支持是模块化的,请首先执行 modprobe serial。查找如下条目

    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
    
    如果不是这种情况,则要么您在 BIOS 中未启用红外支持,要么内核未检测到您的红外设备的 SIR 模式。目前,我只知道两款具有此效果的笔记本电脑型号,即 HP OmniBook 800 和东芝 Libretto 型号。我不确定 PnP 支持是否影响 IR 端口的检测。如果您不确定,请尝试一下并告诉我结果。如果 SIR 不起作用,也许您可以使用 FIR 模式。

  • 在某些情况下,您可能必须使用 setserial /dev/ttyS<0-2> port 0xNNNN irq M 为您的红外串行端口设置值,特别是当红外端口是单独的串行线路时。您通常不需要更改这些值!有关更多信息,请查看下面的 FAQ 部分。

  • 如果您不使用 kerneldkmod,请使用 modprobe irda 插入 irda 模块。

  • 执行 lsmod。现在它应该显示模块 irda 和 irtty。

  • 查看 /var/log/messages 应该会显示条目“Serial connection established”。

  • irattach 一些时间,例如七秒,以检测其他 IR 设备。然后观察您希望在 /var/log/messages 中获得的内核输出。它应该如下所示(我删除了一些与 Linux/IrDA 无关的行)

    Jan  2 12:57:26 japh kernel: ttyS00 at 0x03f8 (irq = 4) is a 16550A
    Jan  2 12:57:26 japh kernel: ttyS02 at 0x03e8 (irq = 4) is a 16550A
    Jan  2 12:57:26 japh kernel: Linux Support for the IrDA (tm) protocols (Dag Bra
    ttli)
    Jan  2 12:59:09 japh syslog: executing: 'echo 1 > /proc/sys/net/irda/discovery'
    Jan  2 12:59:09 japh syslog: Setting discovery to 1 exited with status 1
    Jan  2 12:59:09 japh syslog: + 0.1 Fri Jul 25 11:45:26 1997 Dag Brattli
    Jan  2 12:59:09 japh syslog: + 0.1 Fri Jul 25 11:45:26 1997 Dag Brattli
    Jan  2 12:59:09 japh syslog: Serial connection established.
    Jan  2 12:59:09 japh kernel: IrDA irda_device irda0 registered.
    Jan  2 13:01:22 japh syslog: executing: './drivers start '
    Jan  2 13:01:22 japh syslog: Serial connection established.
    Jan  2 13:01:42 japh syslogd: Printing partial message
    Jan  2 13:01:42 japh 0.1 Fri Jul 25 11:45:26 1997 Dag Brattli
    Jan  2 13:02:49 japh kernel: IrDA Discovered: japh
    Jan  2 13:02:49 japh kernel:     Services: Computer
    

  • 您可以使用 cat /proc/net/irda/discovery 获得更多信息。


3.1.2. 快速红外 - FIR

IrDA(TM) 标准知道三种速度

  • SIR = 标准 IrDA,高达 115kbps IrDA,

  • MIR = 中速 IrDA,

  • FIR = 快速 IrDA (4Mbps),

  • VFIR = 超快速 IrDA(16Mbps),似乎正在成为未来的标准

高达 115.200bps (SIR) 的许多(可能所有)红外控制器都像串行端口一样工作,并使用 RZI(归零,反转)调制。并非每个红外控制器都支持 4Mps (FIR),高达 4Mbps 的速度,它们必须使用 4PPM(4 脉冲位置)调制技术。支持的 FIR 芯片列表包含在/usr/src/linux/drivers/net/irda/Kconfig中。您可以通过加载相应的模块来启动 FIR 服务。然后 Linux/IrDA 将探测您的硬件。更多驱动程序正在开发中。

那么您期望获得什么速度?使用 SIR,您应该能够获得大约 10 Kbytes/s 的速度。使用 FIR (4Mbps),如果您幸运的话,您可以获得超过 300 Kbytes/s 的速度。


3.1.3. 加密狗连接 - 用于串行端口的红外适配器

支持的加密狗概览包含在/usr/src/linux/drivers/net/irda/Kconfig.

Dag Brattli 写道(wh 修改):“要使用加密狗,您必须执行类似以下的操作

modprobe tekram         # or esi or actisys
irattach -d tekram      # or -d esi or -d actisys
如果/etc/modules.conf正确,则不需要 modprobe。如您所见,您仍然必须将 -d 选项与 irattach 一起使用,因为有可能同时有两个串行端口使用不同的加密狗(因此您要绑定的 tty 必须知道它应该使用哪个加密狗)。因此,如果您有两个加密狗和两个串行端口,您可以执行类似以下的操作
modprobe tekram
modprobe esi
irattach /dev/ttyS0 -d esi &
irattach /dev/ttyS1 -d tekram &
PS:我不会尝试将两个加密狗相互对立,因为我真的不知道堆栈会如何反应 :-) ... 由于我没有任何这些新的 ACTiSYS 220L+ 加密狗,所以我无法对其进行测试。由于新加密狗支持一个额外的速度 (38400bps),您必须使用 irattach 以不同的方式指定加密狗,以便内核知道您正在使用哪个加密狗(以及可以使用什么 QoS)
irattach /dev/ttyS0 -d actisys     # for the 220L dongle
irattach /dev/ttyS0 -d actisys+    # for the 220L+ dongle
当前加密狗支持的实现没有任何与之关联的状态,因此目前不可能同时使用两个 ACTiSYS 加密狗(220L 和 220L+)(连接到两个串行端口)。如果有人需要能够这样做,请给我(Dag Brattli)发邮件,我会考虑一下!”

注意:当我尝试使用连接到我的笔记本电脑的红外调制解调器(Swissmod 56Ki,由 Telelink AG 制造)(由于非标准硬件,IrDA 仅适用于 Microsoft-Window$95)时,我必须删除 BIOS 中的红外支持才能使其工作!

Dag Brattli:“现在可以使用 irport 代替 irtty 了!我已经将所有加密狗的东西从 irtty 移到了 irda_device 中,因此也可以将加密狗附加到 irport。但是,需要创建一个小的用户空间实用程序 dongle_attach,该实用程序可用于将加密狗附加到特定的驱动程序实例。顺便说一句:irattach 仍然像以前一样工作,即使将加密狗附加到 irtty,您也不会注意到差异(我只是将加密狗 ioctl 重定向到 irda_device)。Irport 可能很有趣,因为您可以避免一个软件中断 (bh) 级别,并且它也被迫在半双工模式下工作,因此如果 irda 端口本身没有回声消除功能(Girbil 加密狗和 HP-4000 等),您就不会得到任何回声 ... 要使用它,您必须像这样向 modprobe 提供参数:modprobe irport io=0x3f8 irq=4,或您使用的任何值。您也可以将这些参数添加到/etc/modprobe.conf(内核 2.6) 或/etc/modules.conf(内核 2.4),如下所示:options irport io=0x3f8 irq=4,但然后您必须记住执行 depmod -a 并使用 modprobe irport 而不是 modprobe。”

Alvin Loh:“任何拥有 ESI 9680C 的人都可以使用 parallax 和 ESI 的信号方案,这意味着他们可以使用 Parallax 的驱动程序与 ESI9680C 一起工作。”


3.1.4. 加密狗连接 - 用于 USB 端口的红外适配器

并非每个 USB 加密狗都有效。有关详细信息,请参阅下面的 IrDA 和 USB 专用章节。


3.1.5. 加密狗连接 - 红外主板适配器

已实现对例如 ACTiSYS IR2000 加密狗的支持。

来自 James,我有关于设置硬件的描述:有两种配置,一种是五针直插式连接器,另一种是 6 针 DIL(在 18 针 DIL 接头的末端)。基本上,任何 IrDA 兼容收发器都可以工作(我有一堆旧的 IRM3001,这些现在已经过时了),您需要在收发器附近的 5V 和 0V 之间连接一个电容器(使用大约 ~1uF 的钽电容),然后连接所有其他东西(RX->RX、TX->TX、5V->5V 和 0V-0V)。如果您不喜欢烙铁,许多公司都销售用于 5 针连接器的 IR 模块,这些模块可以安装到您机箱上的孔中。


3.2. 打印机连接

如上所述准备 Linux/IrDA。特别是检查是否存在/dev/irlpt*(如果不存在,请以 root 身份执行 mknod /dev/irlpt0 c 161 16)。现在您可以执行第一个简单的测试。尝试将一个小文件写入/dev/irlpt0通过 cat FILE >/dev/irlpt0。不要对格式错误感到奇怪(线条形成某种阶梯),这只是第一次检查。如果这不起作用,请检查/dev/irlpt0的权限。观察您的打印机的连接指示灯是否显示活动,例如 HP 6P/MP 的红外端口上方的绿灯亮起(左下角,靠近纸盒)。

cat 命令不会产生格式化的输出,但对于测试很有用。如果它有效,您可以根据您的打印机系统设置支持 IrDA 的打印机。有关详细信息,请参阅文档,例如 LinuxPrinting.org 的 Printing-HOWTO。

对于 通用 Unix 打印系统 - CUPS,例如与 HP LaserJet 2100 一起使用

lpadmin -p IRDA_PRINTER_NAME -v parallel:/dev/irlpt0 -E -m de/hp2100_6.ppd.gz
要获取 ppd 文件的路径列表,请使用 lpinfo -m

当然,其他打印系统也可以工作,例如,您可以编辑/etc/printcap并包含irlpt0作为打印机设备。

更好的方法是更改您的/etc/printcap以使用/dev/irlpt0除了/dev/lp1.

之外或代替它。为了方便打印机设置,您可以使用打印软件,如 APSFILTER、MagicFilter EZ-Magic(对于 RedHat,也应该有一个用于此目的的 GUI)。制作一份/etc/printcap的副本。

APSFILTER 与 HP 6P(非 Postscript,HP 6MP 是 Postscript)的示例。两个相关问题是:“您有一个 (s) 串行还是 (p) 并行打印机接口?” 回答“p”“您的并行打印机接口的设备名称是什么?” 回答“/dev/irlpt0”

使用 kill -HUP <lpd 的 PID> 重新启动打印守护程序。如果您使用另一个打印守护程序,请选择相应的命令。


3.3. LAN 连接 - IrLAN

您可以使用 IrLAN 将您的 Linux 机器连接到另一个网络设备,例如具有 IrLAN 的 Linux 机器、HP NetBeamer 或具有红外网络设备支持的 Microsoft-Windows95 机器。但是此协议不再由 Linux/IrDA 核心团队维护。


3.4. HP NetBeamer 连接

据我所知,此设备使用 IrLAN。但是目前此协议不再由 Linux/IrDA 核心团队维护。


3.5. Palm III 连接 - IrCOMM

  • PPP Rui Oliveira 写道:“这只是为了让您知道,使用 Takahide Higuchi 的最新 IrCOMM 补丁 (050998),我成功地在我的 Palm III 和我的 Linux 机器之间进行了 HotSync 并建立了 PPP 连接。我正在使用 IRLink(来自 IsComplete)将串行端口重定向到 ir。与 pilot-xfer(可从 kpilot 的“pilot-link”软件包获得)的通信工作完美无缺。虽然我能够建立 PPP 连接,但我仍然无法获取邮件和进行 Web 浏览。这可能是由于连接超时。我正在检查这一点。有关 PPP 的更多信息,请参阅 PPP-HOWTO。我成功地在我的 Linux 机器和 Palm III 之间建立了一个明显的稳健连接。我使用的 pppd 调用如下

       /usr/sbin/pppd /dev/ircomm0 57600 192.168.2.10:192.168.2.11
       proxyarp passive silent persist noauth local nodetach
    
    在 PPP 连接上,我使用了 pingssh 和 HTTP。然而,奇怪的是,必须启用发现(可能已过时)。否则,即使在 IrCOMM 连接处于活动状态时,链接也会由于 IrLAP 断开连接而断开。pilot-link 工具(用于 Linux/Palm 同步)也可以通过/dev/ircomm0在 IrCOMM 上完美运行。” 还有关于 kpilot 的报告,尽管不如 pilot-xfer 那样完美运行。

  • IrCOMM Jon Howell 写道:“我想我应该尝试 IrCOMM,因为 Palm III 可以被制成将串行信息重定向到 IR 端口(使用来自 IS/Complete 的 IrLink,可在 PalmCentral 获得),然后您可以通过 IrDA 运行终端程序(如串行模式下的 PalmTelnet)。我只能假设它使用的是 IrCOMM 协议。我已经测试过两个 Palm Pilot 之间的这种配置,但我当然不知道 IR 上运行的协议是什么。” (1) 在您的 Palm 上启动 HotSync。您需要 Palm 的 IrDA 升级才能获得 IrCOMM 支持 (2) 将 Palm 放在加密狗前面。(3) 启动 pilot-xfer -p /dev/ircomm0 -s <sync-dir>。如果您幸运的话,它将开始同步。如果您在 Pilot 上启动 HotSync 之前启动 pilot-xfer,您将_不会_幸运!也许像 PalmTerm 这样的终端程序或 MiniTerm(本 HOWTO 的先前版本将其称为 MTerm)也很有用。

Wessel de Roode 写道:Palmpilot 默认锁定在 57k。但是,如果您为 Pilot 编写自己的软件,则可以使用 115k 线路设置。我引用了 irlib.h 中的一部分

---------- irlib.h from the SDK 3.0 from palmpilot -----
// Options values for IrOpen
#define irOpenOptBackground     0x80000000   // Unsupported background task use
#define irOpenOptSpeed115200    0x0000003F   // sets max negotiated baud rate
#define irOpenOptSpeed57600     0x0000001F   // default is 57600
#define irOpenOptSpeed9600      0x00000003
Peter Pregler 报告:如果 Palm 进入 irda-device 的范围,则会出现一个弹出窗口,其中包含文本“传输:等待发送方”

Ron Choy 回答:有一个名为 ShutupIR 的软件应该可以帮助解决这个恼人的弹出窗口问题,我还没有尝试过,但它看起来可以解决您的问题。


3.6. Palm(Handspring Visor)上通过 IR 的 Linux 终端

Chris Morris 在 Linux/IrDA 列表上写道:除了使用 IrDA 来热同步我的 Handspring Visor 之外,我昨晚还让我的 Handspring visor 通过红外线作为 Linux 文本终端工作。我的电脑是一台 Dell Inspiron 3800(顺便说一句,我绞尽脑汁数周才让 IR 工作。整个问题是由于 Linux 在 ttyS3 上查看错误的 IRQ 引起的。)。我正在使用 Hacker Dude-san 的 Beam Sync for Visor V1.0b2 Hacker Dude-san(日语)和 Shigeyuki Seko 的 MiniTerm(本 HOWTO 的先前版本将其称为 MTerm)。在笔记本电脑上,我将 IrDA 设置为 SIR 模式,并通过 BIOS 设置 COM 3。我必须在启动时通过 setserial /dev/ttyS3 irq 3/dev/ttyS3设置为 IRQ3。启动后,我执行

/sbin/modprobe irda
/sbin/modprobe irtty
/sbin/modprobe ircomm
/sbin/ircomm-tty
/usr/sbin/irattach /dev/ttyS3 -s
cat /proc/net/irda/discovery 显示 visor 为 IrComm 现在 /etc/mgetty+fax/mgetty.conf 必须具有以下选项:port ttyS3 direct y speed 9600,可能可以更快,但到目前为止只有 9600 对我有效 toggle-dtr n 然后在 /etc/inittab 中:palm:235:respawn: /sbin/mgetty ircomm0 完成所有这些操作后,我可以启动 MiniTerm,发出“/sbin/init q”,然后从 Visor 发送几个 <CR>,我就可以获得文本终端登录。在撰写此电子邮件时,我找到了一个以前未被发现的网站,该网站似乎非常有帮助:palm-ppp-mini


3.7. Psion 5 连接

Andrew Chadwick 写道:如果您有 Psion Series 5,检查 SIR 的波特率是否设置正确的巧妙方法是将 S5 指向您的 Linux 机器的 IR 窗口,并尝试传输文件。当 beamer 对话框在屏幕上时,S5 将尝试建立 IrDA 连接(即使它声称找不到另一台 IR 机器)。您应该能够执行 cat > /dev/ttyS3,如果两台机器上的串行参数都正确,您应该看到“Symbian EPOC”(机器标识)字样在 spew 中滚动。

Fons Botman 写道:“也许有 Psion 5 的人想测试这个程序。它模拟了 Psion 5 IR 发送和接收 Linux 上文件的命令的协议。您现在可以使用简单的命令交换文件。对于大文件,115KB SIR 链接上的传输速率为 9.7 KBytes/秒,这还不错。它是 beta 版,因此请务必先备份 Psion,我确实进行过一次软重置(没有数据丢失)。;-)” 我已将源代码放入附录中。


3.8. 从 Linux 连接到 WinCE 2.11

由 Linuxcare Inc. 的 Arthur Tyde 和 Bryan Abshier 提交。

这将告诉您如何通过 IrDA 从 WinCE 到基于 Linux 的笔记本电脑设置伪装的 PPP 连接。一旦您连接了 IP,其余的就取决于您了。我们将此组合在一起作为索尼笔记本电脑用户与卡西欧 E-100/105 PDA 的指南,尽管该过程应该适用于任何具有红外功能的 WinCE 2.11 设备与任何笔记本电脑通信。以 root 身份登录进行所有 Linux 端测试,标准警告适用。

配置 WinCE 为您的 WinCE 设备配置网络连接。进入“连接”并创建“直接连接”,将其命名为有意义的名称,对于设备,选择“红外端口”。进入设置并将波特率更改为 115200,这是 WinCE 的最大值。转到 TCP/IP 设置并选中“使用服务器分配的 IP 地址”和“使用软件压缩”和“使用 IP 标头压缩”确保未选中“使用 Slip”。对于名称服务器,确保选中“使用服务器分配的地址”。转到开始、设置、通信、标识,然后为设备名称输入一些内容。(我使用了“cetoy”)如果您已使用 Activesynch 与 Win9x 桌面同步,则很可能已设置这些值。

配置 Linux/IrDA 在您的笔记本电脑上设置 IrDA 支持(在其他地方描述),并使其达到您的笔记本电脑将发现符合 IrDA 标准的设备的程度。当您执行 ifconfig 时,irda0 设备将显示出来,这是一个好兆头。它将没有 IP 地址,这没关系。

设置连接 通过将 IrDA 设备设置在您的 IR 端口范围内来测试发现,等待 5 秒,然后;

cat /proc/net/irda/discovery

例如,启用 IR 端口的爱立信 I888 World Phone 应该立即显示如下内容;

"name:I 888 WORLD   ,hint:0x9104,saddr:0x838470e5,daddr:0x152dceaa"
除非您的 WinCE 机器正在主动查找连接,否则不会被发现。因此,如果您想使用 WinCE 进行测试,请放置您的设备并双击您在步骤 2 中创建的网络图标,您应该会看到类似的内容

"name:mytoy,hint:0x8204,saddr:0x838470e5,daddr:0x00000b72"
显示的名称将是您在“开始”、“设置”、“通信”、“标识”中作为设备名称输入的任何值。此时,在基本 IrDA 功能正常的情况下,我们可以继续为 WinCE 建立 PPP 连接。这些脚本也可以用于串行电缆连接。创建以下文件并将它们复制到指示的目录中。

/usr/sbin/cebox.sh - 使其可执行

#!/bin/sh
pppd call cebox
由于 Microsoft 喜欢破坏标准,因此您需要以下聊天脚本。这将向 WinCE 提供它想要的正确的 ASCII 关键字,然后才允许 PPP 连接。

/etc/ppp/cebox.chat

TIMEOUT 3600
"CLIENT"    "CLIENT\c"
""      "SERVER\c"
以下文件将允许您指定 IP 地址、IR(或使用电缆时的串行端口)设备、DNS 等等。我不建议您更改下面的 192.IP 地址。WinCE 真的对 192.168.55.100 有好感,因为所有 MS 同步工具似乎都对其进行了硬编码。DNS 可以是您通常使用的任何 DNS。

/etc/ppp/peers/cebox

/dev/ircomm0 115200 crtscts
connect '/usr/sbin/chat -v -f /etc/ppp/cebox.chat'
noauth
local
192.168.55.101:192.168.55.100
ms-dns 10.2.0.1

测试连接 好的,现在您可以测试连接以确保一切正常。重新启动您的机器,运行 irattach /dev/ttyS2 -s(/dev/ttyS2 是您的 BIOS 将 IR 设备视为的串行端口,如果 irattach 未运行,请启动它)对齐 IR 端口,在 Linux 命令提示符下键入 /usr/sbin/cebox.sh,并同时按回车键以启动 cebox 并双击 WinCE 中的连接图标。您应该会收到来自 WinCE 的快乐消息,报告“正在连接到主机”、“设备已连接”、“正在验证用户”、“用户已验证”,最后“已连接”。连接后,您应该看到如下内容

irda0     Link encap:IrLAP  HWaddr 06:89:d0:58
      UP RUNNING NOARP  MTU:2048  Metric:1
      RX packets:246 errors:0 dropped:0 overruns:0 frame:0
      TX packets:251 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:8

ppp0      Link encap:Point-to-Point Protocol
      inet addr:192.168.55.101 P-t-P:192.168.55.100 Mask:255.255.255.255
      UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
      RX packets:10 errors:0 dropped:0 overruns:0 frame:0
      TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:10
以下脚本设置 IrDA,建立与 WinCE 的 ppp 连接,然后设置 IP 伪装。它作为如何将所有这些联系在一起的示例提供。这或多或少是一种手动方法。您可以发挥创造力,在启动时启动 irattach 并在 inittab 中添加一行以不断查找 IR 端口上的 WinCE 连接。但是,这将耗尽您的电池电量并限制您访问其他 IR 小工具的能力。我只是使用下面的脚本。放置设备,在脚本告诉您时运行 wince 并启动 PDA 上的通信。

/usr/local/bin/wince- 使其可执行

#!/usr/bin/perl
use strict;
#
# Enable IrDA, start ppp0 and set up WinCE masquerading
# A. Tyde - Linuxcare Inc.
#
print "\n-> Setting up IR infrastructure...\n";
system("killall irattach 2>/dev/null");
sleep 1;
system("/usr/sbin/cebox.sh");
print "   Start WinCE Serial or IR networking now!\n";
open(ECHO,">/proc/sys/net/ipv4/ip_forward") or die "Can not open /proc/sys/net/
ipv4/ip_forward";
print ECHO "1";
close (ECHO);
print "   Serving 192.168.55.100 to WinCE device...\n\n";
system("ipchains -F");
sleep 5;
system("ipchains -P forward DENY");
system("ipchains -A forward -s 192.168.55.100/32 -j MASQ");
exit 0;


3.9. 从 Linux 连接到 WinCE 3.0(又名 PocketPC)

本章由 Stanislav Sokolov 提供。

本节介绍如何将 PocketPC 设备连接到 Linux 机器。“从 Linux 连接到 WinCE”部分(也可在 CEwindows 找到)中提供的信息不适用于 PocketPC,因为 Microsoft 在其一个更明智的时刻从 WinCE 3.0 版本中删除了对直接 IrDA 连接的支持。我使用了文档“Linux to Windows CE Connection”(可在 The Gadgeteer 找到)作为起点,但不得不修改和简化几个方面。本节将尽可能地介绍 PocketPC 和 Linux 之间的 ping。您应该能够在 PDAcentralCAMWinCEcity 找到许多网络应用程序。

这是我使用的系统

  • 带有 PocketPC 版本 3.0.9348 的 Compaq iPAQ(我不知道这是否适用于 PocketPC 2002,因为 Microsoft 喜欢从版本到版本更改标准)。

  • 在 Linux 端,是一台运行 Slackware Linux 7.1 的 Compaq LTE5250 笔记本电脑。

  • 内核 2.4.19

  • PPP 2.4.1 (当与内核 2.4.x 一起使用时,PPP 版本不得低于 2.4.0)

在 PocketPC 端,转到“开始” -> “设置” -> “连接” -> “调制解调器”。新建一个连接,取一个有意义的名字(我用 Linux-m),选择“通用 IrDA 调制解调器”,设置波特率为 115200。点击“高级”。在“端口设置”中,选择 8-N-1-硬件,并勾选“手动输入拨号命令”。这样做是为了防止 PocketPC 尝试拨打电话号码,因为我们不需要它拨号。其他两个框应保持未选中状态。在 TCP/IP 中,选择“使用服务器分配的 IP 地址”,取消勾选“使用 Slip”,但勾选“使用软件压缩”和“使用 IP 报头压缩”。在“名称服务器”中,选择“使用服务器分配的地址”。点击“确定”和“下一步”。不应要求您输入电话号码(如果要求您输入,只需输入 1,并仔细检查您是否在高级部分中实际选择了手动拨号命令框)。确保“取消呼叫...”和“等待拨号音...”框未被选中。现在我们完成了 PocketPC 部分。

在 Linux 上,我们必须首先确保所有必要的模块都已加载。以下是在成功通信会话期间加载和使用的模块

Module                  Size  Used by    Not tainted
ircomm-tty             31040   2
ircomm                 13448   0  [ircomm-tty]
irtty                   7616   2
ppp_async               6688   1
ppp_generic            15740   3  [ppp_async]
slhc                    4592   1  [ppp_generic]
确保 ls -la /dev/ircomm* 产生类似的输出
crw-------   1 root     root     161,   0 Nov 25 15:09 /dev/ircomm0
crw-r--r--   1 root     root     161,   1 Nov 22 19:30 /dev/ircomm1
启动 irattach irattach /dev/ttyS2 -s

现在我们必须在 IrDA 端口上启用登录终端。我为此目的使用了 agetty (或您喜欢的 getty 变体)。将以下行添加到您的/etc/inittab:

s3:2345:respawn:/sbin/agetty ircomm0 115200 vt100
保存文件并通过重启 init 激活它
init 2; sleep 3 ; init 3
还要准备以下 shell 脚本,它将执行连接的第二阶段
#!/bin/sh
/usr/sbin/pppd -detach noauth local lock 192.168.55.1:192.168.55.2 ircomm0 115200 &

现在是连接本身:对齐红外端口,并在 PocketPC 上转到“开始” -> “程序” -> “连接”,然后点击您创建的连接(Linux-m)。在弹出的“连接到”对话框中,所有内容都保持未填写状态,只需点击“连接”。将出现“手动拨号终端”。您应该在那里看到 Linux-box 的登录提示符(如果登录提示符没有立即出现,请调出虚拟键盘并点击“回车”键)。您无需登录(虽然这是一个额外的好处 - 考虑到终极遥控器 :))

在 Linux-box 上,一旦 PocketPC 的终端中出现一些“乱码”,立即执行 pppd 命令,点击“文件” -> “继续”。pppd 应该会出现以下消息

Using interface ppp0
Connect: ppp0 <--> /dev/ircomm0
Cannot determine ethernet address for proxy ARP
local  IP address 192.168.55.1
remote IP address 192.168.55.2
PocketPC 应该会显示一个对话框,其中显示“状态:已连接”。您可以运行 ifconfig 来检查 ppp0 接口是否已启动并正在运行。ping 192.168.55.2 应该会产生类似的结果
PING 192.168.55.2 (192.168.55.2): 56 data bytes
64 bytes from 192.168.55.2: icmp_seq=0 ttl=32 time=62.5 ms
64 bytes from 192.168.55.2: icmp_seq=1 ttl=32 time=310.0 ms
64 bytes from 192.168.55.2: icmp_seq=2 ttl=32 time=59.9 ms
64 bytes from 192.168.55.2: icmp_seq=3 ttl=32 time=59.8 ms
64 bytes from 192.168.55.2: icmp_seq=4 ttl=32 time=60.0 ms

--- 192.168.55.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 59.8/110.4/310.0 ms
RTT 将取决于距离和照明条件。当您点击“断开连接”时,将显示类似的结果
LCP terminated by peer
Modem hangup
Connection terminated.
Connect time 2.6 minutes.
Sent 1336 bytes, received 1274 bytes.

现在,如果一切并非顺利进行,请检查以下内容

  • getty 已启动。如果没有/dev/ircomm0配置,它将不会启动。也就是说,在调用 getty 之前,应该先出现 modprobe ircomm-tty

  • “手动输入拨号命令”已选中。PocketPC 不应尝试拨打任何号码!

  • 您的内核中具有异步 PPP 支持。modprobe ppp_async 成功加载,或者您没有将 PPP 异步编译到内核中。否则,您将收到“无法将 tty 设置为 PPP 协议:无效参数”错误消息。

  • pppd 应该被设置为 setuid root:chmod u+s /usr/sbin/pppd


3.10. 蜂窝电话连接

据我所知,一些蜂窝电话使用 IrCOMM 标准,例如 Ericsson SH888 和 NOKIA 6110(我不确定 NOKIA 8110)。一些蜂窝电话(Ericsson T68)使用 IrOBEX 标准或 IrMC。有关 Linux 和手机的更多通用信息,请参阅 TuxMobil 。您可以使用 IrCOMM 设置 PPP 调制解调器连接,并使用 OpenOBEX 发送或检索文件(例如,地址簿条目、徽标、铃声)。


3.10.1. 通用说明

本章介绍如何通过 IrDA 将您的手机与 Linux 计算机连接。它基于 Matthias Schmidt 的报告。已使用以下手机进行测试

  • Ericsson T39m

  • Siemens S25

  • Siemens S35i

  • Siemens ME45

  • Nokia 6110

  • Nokia 6210

按照上述说明配置 IrDA 基础知识(内核配置、/etc/modules.conf、irattach、PPP)(有关 PPP 的详细信息,另请参阅 PPP-HOWTO。现在检查是否找到了您的手机

# irdadump
xid:rsp be1eb736 > 08666644 S=6 s=4 SIEMENS S35 hint=9024 [ Modem IrCOMM IrOBEX ] (28)
# irdadump
xid:rsp be1eb736 > 35450000 S=6 s=4 Nokia 6100 hint=8101 [ PnP Telephony ] (28)
# irdadump
xid:rsp be1eb736 > 04489982 S=6 s=5 SIEMENS ME45 hint=b124 [ PnP Modem Fax IrCOMM IrOBEX ] (29)


3.10.1.1. PPP 拨号软件

3.10.1.1.1. minicom

有几种连接到 ISP 的方法。最简单(有时也是唯一)的方法是使用像 minicom 这样的终端程序。


3.10.1.1.2. wvdial

如果您喜欢更舒适的方式,可以使用 wvdial。它易于配置,并且适用于许多漫游提供商和德国 Tante T。gh0st 和我昨天做了一些测试,我们无法使用 wvdial 连接到 HRZ 的拨入服务器。wvdial 总是因“密码错误”而失败,因为服务器响应速度比手机软调制解调器发送登录名和密码字符串的速度更快。请参阅下面的标准 ppp 配置。/etc/wvdial.conf:

[Dialer Defaults]
Modem = /dev/ircomm0
Baud = 9600
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Password = internet
Username = internet
Phone = 00393492002800
ISDN = 0
Modem Type = Analog Modem

[Dialer shh]
Init3 = ATM0


3.10.1.1.3. PPP 工具

wvdial 出现问题(见上面的解释)?恕我直言,最好的方法是使用标准的 PPP 工具 。您可以通过 pppconfig 配置它们,使用 pon 启动,并使用 poff 停止连接。

名为的连接的 PPP 示例文件irda: /etc/ppp/pap-secrets

# username	connection-name	password
test	irda		test
/etc/ppp/peers/irda
hide-password
noauth
connect "/usr/sbin/chat -v -f /etc/chatscripts/irda"
debug
/dev/ircomm0
9600
defaultroute
noipdefault
user test
remotename irda
ipparam irda
usepeerdns
/etc/chatscripts/irda
ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE' 
ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT DELAYED
'' ATZ
# dial-in number of the ISP
OK-AT-OK ATDT<YOUR_ISP_PHONE_NUMBER>
CONNECT \d\c


3.10.1.2. 徽标、声音、SMS,...

如果您的手机通过红外线工作,您可以对其进行一些有趣的操作。您可以保存您的电话簿或 SMS,发送 SMS,在其上放置新的徽标(BMP 格式),将旧徽标保存到您的硬盘,并对您的铃声(MIDI)执行相同的操作。要完成所有这些有趣的事情,您需要以下内容

  • 支持 OBEX 的手机,例如 Siemens 手机

  • 正常工作的红外连接

  • scmxx 工具

  • gscmxx(可选)

将您的手机绑定到 IrDA 服务

 
# irattach /dev/ttyS1 -s
IrDA: Registered device irda0

检查连接

# irdadump
xid:cmd 9d5dcefa < ffffffff S=6 s=3 (14)
xid:cmd 9d5dcefa < ffffffff S=6 s=4 (14)
xid:rsp 9d5dcefa > 08666644 S=6 s=3 SIEMENS S35 hint=9024 [ Modem IrCOMM IrOBEX ] (28)

显示有关您手机的常规信息

# scmxx -i
Accessing device /dev/ircomm0
OK, a modem device is present.
Vendor:         SIEMENS
Model:          S35i
Revision:       20
Serial (Phone): xxxxxxxxxxxxxxx
Serial (SIM):   xxxxxxxxxxxxxxx
SIM-ID:         xxxxxxxxxxxxxxxxxxxxx
Operator:       D2
SMS Server:     +491722270333
Charset:        GSM
Battery:        40%
Signal/BER:     -79 dBm/?
Time:           02/10/07,11:48:49
Readable Slots: bmp: 0-1, mid: 0, vcs: 1-30
Phonebooks:     FD, SM, ON, ME, LD, MC, RC, OW, MS, CD, BL, RD, CS
SMS storages:   SM

将您的电话簿保存到磁盘

# scmxx -g -PSM -f phonebook
Accessing device /dev/ircomm0
OK, a modem device is present.
Detected SIEMENS S35i
phonebook created.
Receiving: 1 2 3 4 5 6 7 8 9 [...] 
Received all gettable entries

显示您的 SMS(此处在插槽 3 中)

# scmxx -g -S3 -f -
Accessing device /dev/ircomm0
OK, a modem device is present.
Detected SIEMENS S35i
Looking for SMS of specified type...
Receiving incoming, read SMS from slot 3.
Slot: 3
From: xxxxxxxxxxxxxx
Date: 2002-10-03 23:11:47 (GMT+0)
SMSC number: xxxxxxxxxxxxxxxx
PDU type: SMS-DELIVER MMS
Data Coding Scheme: 7bit-GSM
Message length: 160
Message:
	xxxxxxxxxxxxxxxxxxxxxxxxxx

将您当前的徽标保存到磁盘

# scmxx -g -B0 -f logo.bmp
Accessing device /dev/ircomm0
OK, a modem device is present.
Detected SIEMENS S35i
Slot 0...
Receiving packet 1 of 5...
logo.bmp created.
Receiving packet 2 of 5...
Receiving packet 3 of 5...
Receiving packet 4 of 5...
Receiving packet 5 of 5...
File transfer complete.

将您当前的铃声保存到磁盘

# scmxx -g -M0 -f sound.mid
Accessing device /dev/ircomm0
OK, a modem device is present.
Detected SIEMENS S35i
Slot 0...
Receiving packet 1 of 1...
sound.mid created.
File transfer complete.


3.10.2. OBEX 连接

请参阅下面的 OpenOBEX 章节。有关与手机的 OBEX 连接的详细信息,希望很快就会发布。另请参阅 Palm III 部分,了解有关设置连接的信息。


3.10.3. 特定手机

3.10.3.1. Motorola

Michael McConnell 在 他的网站 上发布了关于使 Motorola Timeport GSM 手机和 Linux-IrDA 通信的初始指南版本。


3.10.3.2. Ericsson

T39 用户(也可能是 T300)的注意事项。请查看 Jean Tourrilhes 的网页,您将需要应用内核补丁并调整/proc/sys/net/irda/max_tx_window

1. 配置 要启动与/dev/ircomm0的通信会话,例如,假设

dip -t
> port ircomm0
> term
您可能也可以使用 cuxc 代替 dip,例如 cu -l /dev/ircomm0xc -l /dev/ircomm0。还有一些关于 Ericsson GF768 和 IR Modem DI 27 方面努力的报告。

Benny Amorsen 写道:当您使用串行电缆连接 SH888 时,它会模拟一个 IRDA 端口。我无法理解为什么有人会想出如此奇怪的东西,但这确实是您在 Windows 中使其工作的方式。尽管如此,我从未设法在 Windows 中使其工作。

Ales Dryak 发送了这份调查(看起来像 Debian/GNU Linux 发行版,请相应地修改您的配置)。手机 Ericsson SH888 ati1 = 980408 1035 PRGCXC125101

mknod /dev/ircomm0 c 161 0
mknod /dev/ircomm1 c 161 1
2. /etc/conf.modules
alias tty-ldisc-11 irtty
alias char-major-161 ircomm-tty
3. /etc/irda/drivers:irattach /dev/ttyS0 -s # (SIR 模式下的 IrDA 端口) 4. /etc/chatscripts/sh888
<ABORT stuff>
"" \d\d\d\d\d\dATZE0
OK ATD<phone number to call)
CONNECT \d\c
5. /etc/ppp/peers/sh888
noauth
connect "/usr/sbin/chat -v -f /etc/chatscripts/sh888"
/dev/ircomm
115200
defaultroute
noipdefault
user <your username> # don't forget to add your password to chap secrets or chat script

在执行 pppd call sh888 几秒钟(大约 30 秒)后,我连接到我们的内网/互联网,具有完整的 IP 连接(已测试 telnet、ftp、www、icmp)。此外,我可以连接到/dev/ircomm使用 minicom 并使用 AT 命令进行操作。太棒了!而且看起来很稳定!


3.10.3.2.1. 工具

Gerhard Gonter 报告:列表中的几位成员正在成功地将 Ericsson 手机 SH888 与 Linux-IrDA 软件一起使用,通常将其用作调制解调器。该软件对于使用 AT 命令访问手机的其他部分也非常有用。内置电话簿是一个有趣的目标。

在快速研究互联网(FreshMeat、Deja、YAHOO)之后,我没有找到任何适用于 Linux(或其他 Unix)的电话簿工具。为了解决这个问题,我编写了一个小的 Perl 脚本和一个相关的模块。由于现在它对我来说运行良好,因此我决定将其打包并在开发的早期阶段发布。tarball 可以从 此处 检索。

在邮件列表中,也推荐了 gsmlib ,尽管...我无法通过红外线使用它,也无法与我的 sh888 连接。Florian Lohoff 报告:适用于 S25(某种程度上)。我需要更改一个 ifdef,因为 S25 似乎没有用 CR LF 响应。但是设置从 /dev/mobilephone -> /dev/ircomm 的链接让我可以通过 S25 发送 SMS,没有任何问题。电话簿备份不起作用,因为 S25 对可能为空的电话簿做出了一些愚蠢的响应。

SMS 消息和电话簿的规范可以免费下载(免费,不是 FSF 免费 ;-) 来自 ETSI。搜索 GSM 07.07(您可能还需要 GSM 07.05)。您必须先注册才能下载。这些标准是 Acrobat PDF 格式。S25 支持的命令可在 Siemens 网站上以 PDF 格式免费获得。

SH888 的 AT 命令调查可在 Ericsson 找到。


3.10.3.3. NOKIA

Carlos Vidal 写道:如果我错了请纠正我,但在我看来,Nokia 电话似乎不包含真正的硬件调制解调器,而是一些在原理上类似于 PC 的 WinModem 的东西。每当 Nokia 谈到调制解调器通信时,他们都使用“Windows 软件调制解调器”这个名称(或类似的名称)。这实际上得到了使用特殊的 Nokia Windows 软件(称为 Nokia Cellular Data Suite)的支持。

Joonas Lehtinen 写道:对于 61xx 型号是这样。型号:8810、9000(i) 和 9110 应该可以正常工作。(它们具有内置调制解调器)。我的 Nokia 9000 使用 linux 报告 IrCOMM。

Carlos Vidal carlos_at_tarkus.se 的一些建议:“我正在做一些测试,试图看看我的 Nokia 6110 在 Linux 上能走多远。我刚刚编译了 gnokii-0.2.4 [ gnokii 是一个用于通过串行电缆连接的 Nokia 手机的 Linux/*BSD 工具集,WH],但它不起作用 [请检查当前的 gnokii ,行为应该已经改进,还有关于手机 IrDA 连接的有用文档,WH]。由于我有 Nokia Data Suite,我进行了以下连接

Nokia 6110 <-- Nokia 电缆 --> PC/Linux <-- 空调制解调器电缆 --> PC/W95

在 PC/Linux 中,我运行了程序 snooper(由 Jun-ichiro itojun Itoh 编写,抱歉找不到 URL,也许其他 sniffer 也可以,例如 sniffit,另请参阅关于串行 sniffer 的附录,WH),并进行了一些修改以正确配置串行端口。

通常,如果 snooper 具有正确的波特率,则手机和 PC/W95 应该像之间没有 snooper 一样进行通信。当我破解我的 Minolta 相机的协议时,这效果很好。这里的问题是手机不应答或在一段时间后挂起。

似乎时序在通信的初始阶段非常重要。我获得的日志是

0>1: UUUUUUUUUUUUUUUUUUUUUUUU
line 0: LE *DTR *RTS ST SR CTS CD RI *DSR
line 1: LE *DTR *RTS ST SR CTS CD RI *DSR
0>1: UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
UUUUUUUUUUUUUUU\x1e\x00\x0c\x02\x00\x09\x00\x01\x00\x0d\x00\x00\x02\x01@\x00P\x
06
1>0: \x18\x00\x00\x00\xfc\x18\x00\x00\x00\x00\x00\x00\xc0\xf0
0>1: \x1e\x00\x0c\x02\x00\x09\x00\x01\x00\x0d\x00\x00\x02\x01@\x00P\x06
1>0: \x18\x00\x00\x00\x18\x00\x00\xc0\xf0\x18\x00\x00\x00\x00\x00\x00\xc0\xf0
0>1: \x1e\x00\x0cd\x00\x06\x00\x01\x00\x10\x01`\x13\x13
1>0: \x18\x00\x00\xf0\x00\x00\xfc
0>1: \x1e\x00\x0cd\x00\x06\x00\x01\x00\x10\x01`\x13\x13
0 是 PC/95,1 是手机。通信以一连串的 'U' (0x55) 和 DSR/DTR 打开开始。手机以 '0x18 0x00 ...' 应答。此对话持续一段时间,仿佛两者都是聋子,最后手机崩溃,唯一的重置方法是取出电池!

我猜发生的事情是手机正在尝试找到正确的波特率,但由于 snooper 引入的延迟而失败。这可能与也用于红外连接的某些 IrDA 协议有关。”

Wessel de Roode “我设法获得了 Discovery IR 提示位(使用我的 Palm Pilot)

Discover:
0:xxxxxxxx:81.01
    01  IR_HINT_PNP     01  IR_HINT_TELEPHONY (IrMC ?)
    80  IR_HINT_EXT

Device info query:
\006Device\012DeviceName
    4e 6f 6b 69 61 20 36 31 30 30       Nokia 6100
我还设法查询了 Nokia 的 PNP 设备。它有一个 PNP 设备。它是 PNPC100,相当于 9600 波特调制解调器。我删除了查询,如果有人可以给我提示来恢复它。类似 IrDA:<dunno>:PNP:Comp#01。使用 IrDA:<dunno>:PNP:CompCnt 的相同查询给出了 Nokia 中可用的 PNP 设备数量。这里只有一个。”

还有关于 gsmlib 用于发送和接收短信、更新地址簿等的报告)。这些功能正在工作,除了轻微的字符集问题。


3.10.3.3.1. 推荐工具

gnokii 是一个 Linux/Unix 工具套件,很快将成为 Nokia (GSM) 手机的调制解调器/传真驱动程序。支持的手机包括 3110、3810、8110、5110、6110 及其衍生产品。


3.10.3.4. Siemens

Florian Lohoff 的配置:“逐步进行 - 使您的 irda 工作 irattach /dev/ttySx 等。然后查看/proc/net/irda/discovery是否找到类似这样的内容

(flo@paradigm)~# cat /proc/net/irda/discovery
IrLMP: Discovery log:
nickname: SIEMENS S25, hint: 0x9024, saddr: 0x4286ce23, daddr: 0x04295741
现在加载 ircomm 和 ircomm-tty,通常(tm)您应该能够连接到正确的 /dev/ircomm,并且您可以轻松地拨号和加载/备份电话簿等”,例如使用 minicom。

Timo Felbinger 描述了 Toshiba 和 Siemens S25 之间的连接

  • 内核 2.2.12 和 patch-2.2.12-irda3,内核中的 IrDA 支持,ircomm 和 ircomm-tty 作为模块

  • mknod /dev/ircomm0 c 161 0

  • modprobe ircommmodprobe ircomm-tty

  • 使用 modprobe toshoboe 在 /etc/irda/drivers 的启动部分启动 irattach。注意:不要在 irattach 之前加载 toshoboe,这可能会导致设备或资源繁忙

  • dip -t 和命令端口 ircomm0 之后,S25 显示连接。注意:当然必须激活 S25 的 IR 端口,两个设备之间的距离似乎并不重要。

  • 在 term 之后,S25 的行为类似于通常的 Hayes 调制解调器,并且可以与 AT 命令一起使用。

  • 使用 pppd 拨出可以直接使用。


3.10.3.4.1. 推荐工具

SCMxx 可以将文件复制到 Siemens 手机和从 Siemens 手机复制文件,还可以删除存储的文件。文件可以从给定文件或通过 stdin 读取,并存储到给定文件或 stdout。SMS 也可以直接发送或接收,而无需存储在手机中。SCMxx 已经过 Siemens 制造的几款手机的测试(仅限 S25 及更高版本)。


3.10.4. 德国 e-plus

给德国 e-plus 用户的注意事项

每个 e-plus 合同(Free&Easy 除外)都包含与 WWW 的 PPP 连接(无需单独注册)。此服务在德国各地通过电话号码 123100 提供。这也可以直接使用。

pppd 配置

/dev/ircomm0
defaultroute
netmask 255.255.255.0
debug
mtu 552
crtscts
noauth
connect '/usr/sbin/chat -v -f /etc/ppp/eplus.chat'
chat script /etc/ppp/eplus.chat:

ABORT "BUSY"
ABORT "ERROR"
ABORT "NO CARRIER"
ABORT "NO DIALTONE"
ABORT "NO ANSWER"
SAY "initializing modem..."
"" "AT"
"OK" "ATZ"
SAY "dialing..."
"OK" "ATDT123100"
SAY "waiting for CONNECT..."
"CONNECT" ""
SAY "connected!"
SAY ""
对于名称服务器,您可以使用 192.76.144.66。用户名或密码不是必需的。


3.11. 数码相机连接

Markus Schill 写道:“很高兴也有其他人对在 linux 下使用 SONY DSC-F1 IR 适配器感兴趣。到目前为止,我只玩过 linux-irda 软件和相机附带的 PuMa Technologies 串行 IR 适配器。这是当前状态。我正在使用 linux 2.0.33 和最新的 linux-irda... 如果我使用

modprobe irda
modprobe irtty
irattach /dev/ircomm0
适配器开始与相机对话。/var/log/messages 说找到了 SONY-DSC-F1,但没有启动任何服务。(请注意,这可能不适用于 Linux/IrDA 的 2.2.x 内核版本,[WH])。

有两个可用于 linux 的程序,可以用于通过电缆与相机通信:(1)chotplay 和(2)stillgrab。它们都将 tty 作为命令行选项,所以我猜如果协议栈的 irtty 层工作正常,它们应该可以工作... 我还没有看过 linux-irda 代码中的任何内容!)。我不确定我是否理解协议栈,但 irtty 不应该使它看起来像一个普通的 tty 吗?应该启动什么服务?”

Dag Brattli 写道:“我不确定相机使用哪个应用层协议,但它可能实现了 IrDA(TM) 红外传输图片规范 (IrTran-P)。如果您查看 IrTran 协议 ,您将看到它是一个在 IrCOMM(而不是 IrTTY!)之上实现的协议。IrTTY 是我们用来与 Linux 串行驱动程序对话的东西。”

David Burley 的 Kodak-Digital-Camera-HOWTO 现在描述了如何使 IrDA 工作并实现通信以及将 DigitalOS 相机与 Linux 和 IrDA 一起使用。


3.12. Microsoft-Windows 和 Linux/IrDA

3.12.1. 简介

为什么这样做?不幸的是,Linux 用户并非总是获得必要的硬件信息。有时可以在 Microsoft-Windows 中查看此信息。有时甚至将两者连接起来也很有用。Linux 还可以为顺便拜访的朋友的 Microsoft-Windows 笔记本电脑提供临时的接入点服务。

从哪里获取?在 MicroSoft 的目录中/Windows95/downloads/contents/WURecommended/S_WUCommunications/W95IrDA/您将找到一个支持包 Infrared Transfer 2.0。它是一个自解压存档 W95IR.EXE,大小为 331KB。注意:Microsoft 似乎会随机更改此文件(和其他文件)的位置,以前的 URL 是 Microsoft Windows95 IrDA - Old

Microsoft(tm) 有三个版本的 Windows95 IrDA 支持。版本号可以在控制面板中的“软件”图标和文件infrared.inf.

中找到。版本 1.0 仍然随某些硬件一起交付。

版本 2.0 是他们当前在其网站上提供的版本。它在自解压文件 W95IR.EXE 中。我上次查看时(1999-02-21),它是 434KB,并且在 http://support.microsoft.com/download/support/mslfiles/W95IR.EXE 找到,但该链接现在已失效。他们的网站经常更改,因此如果发现该文件(也)在另一个位置或根本不存在,请不要感到惊讶。

版本 3.0 可以在其可下载的红外开发工具包 IRDDK30 中找到/可能找到,但主要对开发人员有用。它在内部与 2.0 不同,它基于“微端口”网络驱动程序,就像 Linux 版本一样。它已经存在一段时间了,并且对 NT 有一些支持,但它显然没有进入主流 NT4.0 发行版。对于 95,您可能最好使用 2.0。选择可能取决于您随特定硬件获得的驱动程序的文档。

Microsoft 网站过去也包含一个不错的实用程序 IrXfer,包含在存档 IRXFER.EXE 中。这是红外传输实用程序,我认为它使用 IrOBEX 变体,它在 IrOBEX 协议描述中被引用。该实用程序可以免费下载,但我上次没有找到它。它是一个不错的图形实用程序,可用于在计算机之间通过 IrDA 传输文件。

对于某些机器,例如 HP Omnibook 800,有必要使用此软件包的供应商特定版本(对于 HP Omnibook 800,您可以在恢复 CD 上找到它)。

特别是..\windows\inf\*.inf文件和设备管理器对于查找配置详细信息很有用。

据我所知,Window$NT 不支持 IrDA(TM)。关于 Window$98,我听说还没有 IrDA(TM) 支持。 Countersys 声称销售用于 NT4.0 的 IrDA 解决方案以支持其 JetBeam 产品,Microsoft 将其推荐给他们。

据我所知

  • Windows95:使用 2.0

  • Windows98:随附 3.0 和 IrXfer(与 Linux/IrDA、IrOBEX 配合使用?)

  • WindowsNT4.0:系统直接不支持 IrDA

  • Windows2000:3.0(+?) MicroSoft

    还有一些非 M$ 产品可用。注意:其中一些使用专有的红外协议

  • CounterPoint:QuickBeam 1.15(与 Linux/IrDA、IrOBEX 配合使用?)

  • LapLink 7.5

  • CarbonCopy 32 4.0

  • pc ANYWHERE 7.5

  • Puma Technology:TRANXIT pro 4.0


3.12.2. Linux/IrDA 和 MS-Windows95 IrDA(TM) 之间的连接

您可以使用 IrNET


3.12.3. MS-Windows98 和 Linux 之间的通信

Ha Duong Minh:今天我很高兴地报告,来自 OpenOBEX 项目ircp 可以像魅力一样工作,以在我的 Linux 计算机及其 Microsoft-Windows98 表弟之间传输文件。它再简单不过了:ircp file1, file2, ... 发送文件,或 ircp -r [DEST] 通过 IrDA 接收文件。


3.12.4. MS-Windows2000/XP 和 Linux 之间的通信

IrCOMM2k 是 Jan Kiszka 为 Windows 2000 和 XP 编写的驱动程序。它模拟一个串行端口,可用于与移动设备交换数据。例如,一些蜂窝电话能够充当调制解调器或传真设备。具有红外接口的 PDA 可以与 PC 同步。IrCOMM2k 是一个根据 GPL 条款的开源项目。


3.13. Linux 到 Linux 连接

3.13.1. 连接方法

应该有四种方法可以通过 Linux/IrDA 连接两台 Linux 机器。

  • Dag Brattli 写了关于 IrOBEX 支持的文章:“觉醒的读者可能会想知道是什么阻止了从 Linux 到 Linux 的文件传输?嗯,什么都没有!!(但我还没有尝试过)。这意味着我们现在有一种“简单”的方式在 Linux 笔记本电脑之间传输文件。我认为这可能是我们一直在等待的“杀手级应用”!”尝试在两端都“加载 misc irobex”,然后在其中一台机器上尝试“irobex_app get”,在另一台机器上尝试“irobex_app put <file>”。

  • 通过 Linux/IrDA 网络连接。但是 IrLAN 协议不再由 Linux/IrDA 核心团队维护。

  • 通过 IrCOMM 支持,换句话说,通过串行线路,这可能意味着 minicom、pppd 等。如果您现在只想在 Linux 计算机之间使用 IrCOMM,请将此行添加到 _一台_ 计算机的 /etc/conf.modules 中

    # set ircomm protocol engine to client-only mode
    options ircomm ircomm_cs=1
    
    注意:不要将其添加到两台计算机中,否则它们将无法相互接受传入连接!但由于 2.2.7 之后,不再需要在 /etc/conf.modules 中添加 options ircomm ircomm_cs=1。如果您正在使用它,请将其删除。

  • IrNET


3.13.2. 压缩

请注意,此功能仍处于实验阶段!Dag Brattli 写道:“只是想让您知道,我刚刚向 IrLAP 添加了压缩支持!您可能知道,这不是 IrDA(TM) 标准的一部分,但 Linux 现在可以与其对等方协商并检查它是否具有相同的压缩能力)。因此,很明显,如果您与 Win95、Palm III 或其他设备通话,您将_不会_获得压缩!!!据我所知,这是 Linux 独有的!IrDA(TM) 标准规定设备应忽略协商标头中的未知字段,因此我们仍然“兼容” IrDA(TM)(只是借用了一个未使用的标头值)。

如果您想尝试使用压缩代码(Linux <-> Linux),您必须在实际建立连接之前的某个时间插入 irda_deflate 模块。我在 irattach 之前执行此操作。

我添加的压缩标准是 zlib 库使用的 deflate 格式,该格式在 RFC(请求评论)1950 至 1952 中描述,文件为 ftp://ds.internic.net/rfc/rfc1950.txt (zlib 格式)、rfc1951.txt (deflate 格式) 和 rfc1952.txt (gzip 格式)。

压缩接口类似于 PPP,因此您可以根据需要添加任意数量的不同压缩器。目前仅支持 GZIP,但稍后将添加 BSD 压缩。... 刚刚以 4Mbps 的速度测试了 GZIP 压缩。这是一个非常糟糕的主意!压缩帧需要花费太多时间,以至于性能实际上比不使用压缩时更差。结论是压缩应该仅用于 SIR 速度,..."


3.14. 多个实例

Dag Brattli 写道:“IrLAP 层已得到增强,允许更多实例(因此我可以在内置 ir-port 上使用 IrLAN,并同时通过 IrDA 加密狗与 Pilot 通信)... 那么如何建立两个 Linux/IrDA 连接?好吧,您只需为您拥有的每个 IrDA 端口启动 irattach ,如下所示

irattach /dev/ttyS0         # (my ESI dongle)
irattach /dev/ttyS2         # (my builtin IrDA port)
也适用于 FIR 设备,如下所示
irattach irda0 -s
irattach irda1 -s
如果您在同一台机器上运行它们,它们将看不到彼此,因为它们将完全同时启动发现。但是,您应该能够将它们用于其他两台笔记本电脑。我可以同时运行一个加密狗、内置 IrDA 端口和一个 IrDA PCMCIA 卡,而与其他三个 IrDA 设备没有任何问题。

您应该注意到,如果设备可以相互干扰,则可能难以建立连接,因为如果介质繁忙,则不允许设备传输。我有时不得不在它们之间放一本书。”


3.15. 连接到扩展坞

Dag Brattli:“连接到 Tekram IRDocking IR-660 。此设备是具有 LAN 访问、打印机、鼠标和键盘的扩展坞。您也可以同时使用它们和内部鼠标和键盘!只需启动 gpm -t ps2 /dev/irkbd ,笔记本电脑将与 IR-660 建立键盘/鼠标连接。现在我只需要让 gpm 读取 /dev/psaux 和 /dev/irkbd,然后让 X11 读取 /dev/gpmdata,我就应该配置好它了!”

... 一个问题:gpm 可以处理多个鼠标,但 Linux 无法处理多个不同的键盘。因此,如果您有一个挪威键盘和一个远程美国键盘(就像我一样),那么事情会有点混乱。我从 Alan Cox 那里获得了一个关于一个项目的提示,该项目正在实现对多个键盘的真正支持,所以我将对其进行检查。

... 好的,我算是弄清楚了。通过在 /dev/console 上使用 TIOCSTI,您可以将扫描码直接插入 tty 队列。对于期望接收一些已翻译和已处理的键码的虚拟控制台来说,这可能是一个问题,但 X 恰好喜欢原始扫描码,因此当使用 X 时,这将非常好用,但不适用于其他虚拟控制台。无论如何,这对我就足够了,因此我不会花费大量时间将扫描码转换为键码并使用某些键盘映射对其进行索引,只是为了使其与仅文本虚拟控制台一起工作。在我看来,irkbd 驱动程序现在已成功移植到用户空间 :-)

... Tekram IR-660 设备除了可以连接键盘和鼠标外,还可以使用 IrTTP 进行打印(它可以使用 IrLPT 进行打印,但这没什么意义,因为它需要独占使用 IrLMP,并且您不想停止网络、鼠标和键盘只是为了打印文档)。我将尝试看看是否可以使用 fifo 使 IrTTP 打印工作。

... Tekram 除了数据通道外,还添加了一个控制通道,以便您可以获得有关正在发生的事情的一些状态信息。他们自己的协议名称是 P1248。它通过“P1248”类和“IrDA:TinyTP:LsapSel”LM-IAS 条目发布,因此您可以尝试找到它。

... Canon 正在使用 P1248 协议,他们的打印机监视程序 BrintBuddy2(日文版)现在正在使用此协议。我不知道他们使用什么数据通道。也许除了其他方法外,他们还直接支持 TinyTP。您可以尝试在 LM-IAS 中查找具有“IrDA:TinyTP:LsapSel”的“IrLPT”类,看看是否可以找到它。”


3.16. 连接到键盘

Linux/IrDA 键盘驱动程序现在位于用户空间中。请参阅上面的“连接到扩展坞”章节。

Lichen Wang:“所谓的 IrDA-D 标准旨在传输数据。它不适用于 IR 键盘。IrDA-D 是 Dag 移植到 Linux OS 的,也是 MS 移植到 Windows OS 的。

所谓的 IrDA-C(控制)专为键盘、操纵杆等设计。我不知道市场上是否有任何产品正在使用它。

IrDA-D 无法与 IrDA-C 通信。IrDA-C 也无法与 IrDA-D 通信。物理编码/解码和软件协议都非常不同。

在同一设备中同时实现 IrDA-D 和 IrDA-C 是可能的。Sharp 表示 IrDA-D 和 IrDA-C 可以共存 - 只要它们不同时在同一 IR 空间中使用。这对我来说听起来很有趣。根据此定义,任何东西都可以与任何东西共存,只要您在此过程中不会永久摧毁宇宙 ;-)

认真地说,SHARP 所说的是他们可以定制 IrDA-D,以便在协商的最大周转时间和实际传输之间存在一些未使用的时间。然后他们将 IrDA-C 帧挤入这些未使用的时间。IrDA-D Primary 和 IrDA-C Master 必须在同一设备中实现。键盘将工作,但鼠标和操纵杆有时可能会反应迟钝。”

有关将外部键盘与 Linux PDA 一起使用的详细信息,请参阅下面的 PDA 章节。


3.17. 通过串行电缆连接

由于某些原因,通过串行电缆连接而不是使用真正的红外链路可能很有用。Bjorn Hanson 写道:“使用电缆,我设法通过我的 Ericsson SH888 建立了 PPP 连接。我做了以下操作(可能有些步骤是错误的,但它们对我来说有效 :-))

  • alias tty-ldisc-11 irtty 添加到/etc/conf.modules

  • 编辑 /etc/irda/drivers 为 irattach /dev/ttyS0

  • 使用 modprobe 手动插入 irda 和 irtty 模块

  • 启动 irattach

  • 运行 kppp,使用 /dev/ircomm0 (通过符号链接 /dev/modem)

  • 执行了 stty < /dev/ircomm0

  • ping 主机

  • ifconfig irda0 down

Ping 和 ssh (执行了几次 ls -l) 一切正常,但是当我尝试通过 PPP 发送邮件 (Netscape) 时,计算机hang住了。重启后,我尝试了 Netscape 和 lynx。两者都能够建立连接,但是都无法获取任何数据。"

Claudiu Costin 提供的另一种方法

  • 带有 IrDA 模块编译的 Linux 2.2.5

  • 因为 irattach 不会自动使内核加载 IrDA 堆栈,所以让我们输入 modprobe actisys

  • 现在,irattach /dev/ttyS1 -d actisys,其中 COM2 用于空链接

  • ping <address> 工作良好!

这需要在两台机器上都完成。

请注意,这不是连接两台机器的推荐方法。请改用 PPP。虽然我不明白这种方法有什么用,但我还是把它包括进来了,因为它有时会在邮件列表中被问到。


3.18. Null Modem 电缆连接

您可以使用串行 null modem 电缆建立连接,而无需支持 IrDA 的硬件。只需将 IrDA 端口连接到串行端口,例如,在两台机器上都执行 irattach /dev/ttyS0 -s


3.19. 对等模式 / 直接模式

IrCOMM 和 IrLAN 在两种模式下都可以工作,但是目前我没有关于这些模式之间差异以及如何设置它们的更多信息。此外,Linux/IrDA 核心团队目前不再维护 IrLAN 协议。


3.20. 带有 Toshiba 笔记本电脑的 Linux/IrDA

Guenther Wieser 编写了一份关于 Toshiba 和 IrDA 的 HOWTO 文档 。 这些笔记本电脑需要 toshoboe Linux/IrDA 驱动程序。


3.21. 台式电脑中的 IrDA 卡

一些最新的主板配备了 IrDA 芯片,在某些情况下,您还需要额外的 IrDA LED。您可以在 Andreas Gohr 描述的工作示例中找到更多信息。


第 4 章。Linux/IrDA 支持的硬件

4.1. 获取笔记本电脑红外端口的信息

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


4.1.1. SIR

高达 115.200bps,红外端口模拟一个类似 16550A UART 的串行端口。这将在启动时或加载串行模块时被内核串行驱动程序检测到。如果在 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


4.1.2. FIR

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

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

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

  3. 使用由 德国计算机杂志 CT 以 ZIP 格式提供的 DOS 工具 CTPCI330.EXE。此程序提供的信息有时比 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 还找到了一个由 SMSC 制作的 小型 DOS 实用程序 包。查看 IR_UTILS.ZIP 该软件包包含 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 Tag, Mask (位图 - ) = 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 格式。

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

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

  10. 作为最后的手段,您甚至可以打开笔记本电脑并查看芯片本身的铭文。这是一个可能不完整的制造商列表:Chrystal、Hewlett Packard (HP,芯片组标记为 HSDL)、Hitachi、IBM、National Semi Conductor (NSC)、NEC、Philips、Sharp、Standard Micro Systems Corporation (SMC/SMSC)、Texas Instruments (TI)、VLSI、Winbond。作为应用电路的示例,HSDL-7001(来自 HP 手册,由 WH 修改)

        LEDs    Encode/Decode    SIR/FIR
    
       HSDL-1001    HSDL-7001      UART 16550/
                      MicroController
       ______      ______________      ____________
      |      |    |              |    |            |
    (||   TXD|<---|IR_TXD     TXD|<---|SOUT        |
      |      |    |              |    |            |
      |      |    |           RCV|--->|SIN        |
      |      |    |              |    |            |
    (||   RCV|--->|IR_RCV  16XCLK|<---|BAUDOUT     |
      |      |    |          NRST|-+  |            |
       ------      --------------  |   ------------
                                   V
    


4.2. 硬件调查

在万维网上有一些关于 Linux 和支持红外的设备的调查。

  • Linux/IrDA 项目 - 硬件调查

  • 我在 TuxMobil 上建立了一个 IrDA 硬件调查 。此列表还包含此处未提及的支持红外的设备的信息(鼠标、打印机、遥控器、收发器等)。为了使这项硬件调查更有价值,有必要收集更多关于不同硬件中红外设备的信息。您可以通过向我发送一封简短的电子邮件来帮助我,其中包含您拥有的硬件的确切名称以及所使用的红外控制器的类型。还请告诉我 Linux/IrDA 的工作情况如何,它在哪个 tty、端口和中断下工作,以及您使用的相应红外设备(例如打印机、手机)。您还可以通过贡献关于某些红外设备的详细技术信息来提供帮助,这对于为 Linux 开发相应的驱动程序是必要的。


4.3. 大端

虽然大端机器曾经存在一些问题,但 Linux/IrDA 现在可以成功运行。例如,我收到一份关于 Apple PowerBook G4 (AlBook 第二代) 与 STir USB 加密狗一起工作的报告。


4.4. SMP

Jean Tourrilhes:“在 SMP 机器上使用多个加密狗测试了 IrSock、IrNET 和 OpenObex。工作正常。但是,代码尚未完全 SMP 安全,所以你永远不知道……”


4.5. IrDA 硬件

  • SIR

  • FIR

  • 串行加密狗

  • USB 加密狗

  • PCMCIA 卡

  • PCI 卡

您可以在 TuxMobil 上找到 Linux/IrDA 支持的设备调查。


4.6. IrDA 和 USB

IrDA USB 驱动程序包含在最新的 2.4 内核中。它不如其他 FIR 硬件高效,但至少受到支持并且相对容易工作。此外,目前所有产品都基于相同的硬件,我们知道它的大部分错误。

据我所知,Actisys 2000U 和 Extended System ESI-9685 加密狗似乎都基于相同的硬件。这两种 USB 加密狗都可以在 Linux 驱动程序下正常工作。可以在一个盒子里安装多个 USB 加密狗(目前最多 4 个)。

最新版本的驱动程序已经过 usb-uhciusb-ohci 的测试。另请参阅 src 中的驱动程序信息,例如 USB 2.0

有一个 Rev 0.9B 的 USB IrDA 桥接设备规范,它正在被采纳为 USB 类规范。您可以在 USB.org 的 0.9 类规范标题下找到它。

最近,市场上出现了一种来自 SigmaTel 的新型 USB 加密狗,它_不_符合 IrDA-USB 规范,因此无法与此驱动程序一起工作。另一方面,SigmaTel 提供了 完整的技术规范 ,因此为它编写驱动程序是可能的。


4.6.1. 环境

我已在此环境下检查了本章:ACTiSYS ACT-IR2000U FIR-USB 适配器(但它应该适用于除上述加密狗之外的任何其他 USB 加密狗)、Kernel 2.4.19、irda-utils 0.9.14 和 Debian GNU/Linux 3.0 Woody。


4.6.2. 前提条件

您需要一个具有适当 IrDA 和 USB 支持的内核,以及以下标准条目/etc/modprobe.conf(内核 2.6)/etc/modules.conf(内核 2.4) 以及以下设备/dev/ir*如以上章节所述。以及第二个 IrDA 设备,无论是否内置 Linux,例如笔记本电脑、打印机或带有 IrDA 端口的手机。

您需要一个工作的 USB 控制器。使用 lsmod 检查是否已插入相应的模块。如果没有,您可以使用 modprobe usb-uhci (用于 Intel/Via USB 控制器) 或 modprobe usb-ohci (用于其他 USB 控制器) 插入它

注意:此驱动程序尚未通过 usb-ehci 驱动程序(用于 USB 2.0 控制器)的测试。此驱动程序_不能_与 uhci 驱动程序(用于 Intel/Via USB 控制器的备用/JE 驱动程序)一起工作。

Warning

请注意,还有另一个 USB IrDA 驱动程序(由 Linux USB 项目 提供)用于这些设备,称为 ir-usb。此模块与 IrDA 堆栈_不_兼容,并且与 irda-usb 冲突。因为它总是首先加载,所以您必须完全删除 ir-usb

如果您不熟悉路由问题,我建议在首次设置期间使用 ifconfig 关闭所有外部网络接口。然后使用 route -n 进行检查。网络过滤 (iptables) 也可能导致问题,因此如果您未连接到网络,则可以禁用它。

我已经详细描述了该过程,以使每个注意事项尽可能清晰。实际配置要短得多且更容易。在配置期间,我将选择打开三个不同的终端窗口来查看来自不同程序的日志消息。


4.6.3. 插入加密狗

现在插入加密狗并使用 dmesg 检查内核消息

hub.c: USB new device connect on bus1/1, assigned device number 2
usb.c: USB device 2 (vend/prod 0x50f/0x180) is not claimed by any active driver.
usb.c: registered new driver irda-usb
IRDA-USB found at address 2, Vendor: 50f, Product: 180
irda_usb_parse_endpoints(), And our endpoints are : in=02, out=01 (64), int=03
irda_usb_init_qos(), dongle says speed=0x13E, size=0x20, window=0x2, bofs=0x4, turn=0x2
IrDA: Registered device irda1
USB IrDA support registered

如果您已经在 PC 上配置了一些其他 IrDA 硬件,则驱动程序将不会加载为irda0,因此检查如上所示的消息日志很重要(该驱动程序可以管理每台 PC 最多 4 个 IrDA-USB 加密狗,这可以在源代码中增加)。

在此示例中,设备是irda1。您也可以使用 ifconfig 检查这一点

irda1     Link encap:IrLAP  HWaddr 2c:52:61:ec
          EtherTalk Phase 2 addr:140/191
          UP RUNNING NOARP  MTU:2048  Metric:1
          RX packets:2278 errors:0 dropped:0 overruns:0 frame:0
          TX packets:844 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0
          RX bytes:33848 (33.0 KiB)  TX bytes:15116 (14.7 KiB)


4.6.4. 附加驱动程序

现在您可以使用 irattach irda1 -s 将 Linux/IrDA 服务附加到加密狗(请注意上一步中的设备名称)。

适配器上的绿色 LED 现在应该开始闪烁,大约每三秒一次。使用 dmesg,您可能会看到此消息

irlap_change_speed(), setting speed to 9600
irlap_recv_discovery_xid_cmd(), discovery frame to short!

现在启动 irdadump,您应该看到范围内的所有 IrDA 设备。或者至少看到这个,这里是 “japh”(本示例中的另一个 IrDA 设备名为 “Olga”)。为了诊断目的,请保持 irdadump 在此终端窗口中运行,并切换到另一个窗口进行下一步。

07:58:40.889590 xid:cmd ffffffff < 4fe026d8 S=6 s=3 (14)
07:58:40.979575 xid:cmd ffffffff < 4fe026d8 S=6 s=4 (14)
07:58:40.979679 xid:rsp 2c5261ec > 4fe026d8 S=6 s=4 japh hint=0400 [ Computer ] (20)
07:58:41.069571 xid:cmd ffffffff < 4fe026d8 S=6 s=5 (14)
07:58:41.166552 xid:cmd ffffffff < 4fe026d8 S=6 s=* Olga hint=0400 [ Computer ] (20)
07:58:43.620104 xid:cmd ffffffff < 4fe026d8 S=6 s=0 (14)
07:58:43.709078 xid:cmd ffffffff < 4fe026d8 S=6 s=1 (14)


4.6.5. 加载 IrCOMM 模块

现在加载 IrCOMM 模块(请注意,如果您通过 IrDA 启动 PPP 或打印,这通常由内核守护程序 kmod 自动完成,但对于第一次,我们手动执行操作)。因此,执行 modprobe ircommmodprobe ircomm-tty

dmesg 现在将显示

IrCOMM protocol (Dag Brattli)
ircomm_open_lsap()
ircomm_tty_attach_cable()
ircomm_tty_ias_register()
ircomm_tty_close()
ircomm_tty_shutdown()
ircomm_tty_detach_cable()
ircomm_close()

使用 lsmod,您可能会看到

Module                  Size  Used by    Tainted: P  
ircomm-tty             30080   0  (autoclean)
ircomm                 13164   0  (autoclean) [ircomm-tty]
irda-usb               13776   1 
...
irtty                   7264   0  (autoclean)
irda                  141648   1  (autoclean) [ircomm-tty ircomm irda-usb irtty]


4.6.6. 设置网络 (PPP)

您可以使用命令行选项启动 pppd,但对我来说,拥有一个配置文件更方便/etc/ppp/peers/irda.

connect /bin/true
noauth
persist
debug
kdebug 7
nodetach
115200
local
/dev/ircomm0
192.168.0.2:192.168.0.3

关于配置的一些注意事项:是的,设备名称是正确的,这里不要选择 USB 设备。如果另一个 IrDA 设备是 Linux 笔记本电脑,您可以使用相同的配置文件和相同的 PPP 选项,而无需最后一行,最后一行设置了本地和远程 IP 地址。以下条目用于调试目的,当一切正常工作时可以注释掉

persist
debug
kdebug 7
nodetach

现在使用 pppd call irda 启动 PPP。为了诊断目的,请保持消息在此终端窗口中运行,并切换到另一个窗口进行下一步。

Serial connection established.
using channel 3
Using interface ppp0
Connect: ppp0 <--> /dev/ircomm0
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x4592a46e> <pcomp> <accomp>]
sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x4592a46e> <pcomp> <accomp>]
...

现在在远程 IrDA 设备上启动 PPP,您应该看到

sent [LCP EchoReq id=0x0 magic=0x3c8803b1]
sent [IPCP ConfReq id=0x1 <addr 192.168.0.2> <compress VJ 0f 01>]
sent [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x3c8803b1> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x3c8803b1> <pcomp> <accomp>]
rcvd [LCP EchoReq id=0x0 magic=0xa922f0e8]
sent [LCP EchoRep id=0x0 magic=0x3c8803b1]
rcvd [IPCP ConfReq id=0x1 <addr 0.0.0.0> <compress VJ 0f 01>]
sent [IPCP ConfNak id=0x1 <addr 192.168.0.3>]
rcvd [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
sent [CCP ConfAck id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
rcvd [LCP EchoRep id=0x0 magic=0xa922f0e8]
rcvd [IPCP ConfAck id=0x1 <addr 192.168.0.2> <compress VJ 0f 01>]
rcvd [CCP ConfAck id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
Deflate (15) compression enabled
rcvd [IPCP ConfReq id=0x2 <addr 192.168.0.3> <compress VJ 0f 01>]
sent [IPCP ConfAck id=0x2 <addr 192.168.0.3> <compress VJ 0f 01>]
Cannot determine ethernet address for proxy ARP
local  IP address 192.168.0.2
remote IP address 192.168.0.3
Script /etc/ppp/ip-up started (pid 3975)
Script /etc/ppp/ip-up finished (pid 3975), status = 0x1

在运行 irdadump 的窗口中,您会看到 IrDA 流量

08:17:11.179260 i:rsp  > ca=08 pf=1 nr=1 ns=2 LM slsap=00 dlsap=19 CONN_RSP (6)
08:17:11.199127 i:cmd  < ca=08 pf=1 nr=3 ns=1 LM slsap=00 dlsap=1d CONN_RSP (6)
08:17:11.199226 i:rsp  > ca=08 pf=1 nr=2 ns=3 LM slsap=1d dlsap=00 GET_VALUE_BY_CLASS: "IrLPT" "IrDA:IrLMP:LsapSel" (30)
08:17:11.219123 i:cmd  < ca=08 pf=1 nr=4 ns=2 LM slsap=00 dlsap=1c CONN_RSP (6)
08:17:11.219207 i:rsp  > ca=08 pf=1 nr=3 ns=4 LM slsap=1c dlsap=00 GET_VALUE_BY_CLASS: "IrDA:IrCOMM" "Parameters" (28)
08:17:11.241117 i:cmd  < ca=08 pf=1 nr=5 ns=3 LM slsap=19 dlsap=00 GET_VALUE_BY_CLASS: "IrDA:IrCOMM" "Parameters" (28)
08:17:11.241213 i:rsp  > ca=08 pf=1 nr=4 ns=5 LM slsap=00 dlsap=19 GET_VALUE_BY_CLASS: Success N/A (19)
08:17:11.259114 i:cmd  < ca=08 pf=1 nr=6 ns=4 LM slsap=00 dlsap=1d GET_VALUE_BY_CLASS: No such class (11)
08:17:11.259216 i:rsp  > ca=08 pf=1 nr=5 ns=6 LM slsap=1d dlsap=00 DISC (6)
08:17:11.280107 i:cmd  < ca=08 pf=1 nr=7 ns=5 LM slsap=00 dlsap=1c GET_VALUE_BY_CLASS: Success N/A (19)
08:17:11.280281 i:rsp  > ca=08 pf=0 nr=6 ns=7 LM slsap=1c dlsap=00 DISC (6)
08:17:11.282124 i:rsp  > ca=08 pf=1 nr=6 ns=0 LM slsap=1e dlsap=00 CONN_CMD (6)
08:17:11.299104 i:cmd  < ca=08 pf=1 nr=1 ns=6 LM slsap=19 dlsap=00 DISC (6)
08:17:11.299204 rr:rsp > ca=08 pf=1 nr=7 (2)
08:17:11.319102 i:cmd  < ca=08 pf=1 nr=1 ns=7 LM slsap=1a dlsap=00 CONN_CMD (6)
08:17:11.319209 i:rsp  > ca=08 pf=1 nr=0 ns=1 LM slsap=00 dlsap=1a CONN_RSP (6)
08:17:11.339100 i:cmd  < ca=08 pf=1 nr=2 ns=0 LM slsap=00 dlsap=1e CONN_RSP (6)
08:17:11.339197 i:rsp  > ca=08 pf=1 nr=1 ns=2 LM slsap=1e dlsap=00 GET_VALUE_BY_CLASS: "IrDA:IrCOMM" "IrDA:TinyTP:LsapSel" (37)
08:17:11.361096 i:cmd  < ca=08 pf=1 nr=3 ns=1 LM slsap=1a dlsap=00 GET_VALUE_BY_CLASS: "IrDA:IrCOMM" "IrDA:TinyTP:LsapSel" (37)
08:17:11.361191 i:rsp  > ca=08 pf=1 nr=2 ns=3 LM slsap=00 dlsap=1a GET_VALUE_BY_CLASS: Success Integer: 14 (15)
08:17:11.380092 i:cmd  < ca=08 pf=1 nr=4 ns=2 LM slsap=00 dlsap=1e GET_VALUE_BY_CLASS: Success Integer: 14 (15)
08:17:11.380214 i:rsp  > ca=08 pf=0 nr=3 ns=4 LM slsap=1e dlsap=00 DISC (6)
08:17:11.382104 i:rsp  > ca=08 pf=1 nr=3 ns=5 LM slsap=14 dlsap=14 CONN_CMD TTP credits=0(7)
08:17:11.399090 i:cmd  < ca=08 pf=1 nr=6 ns=3 LM slsap=1a dlsap=00 DISC (6)
08:17:11.399190 rr:rsp > ca=08 pf=1 nr=4 (2)
08:17:11.419082 i:cmd  < ca=08 pf=1 nr=6 ns=4 LM slsap=14 dlsap=14 CONN_CMD TTP credits=0(7)
08:17:11.419159 rr:rsp > ca=08 pf=1 nr=5 (2)
08:17:11.438080 rr:cmd < ca=08 pf=1 nr=6 (2)

切换到另一个终端并使用 ifconfig 检查 PPP 设备

ppp0      Link encap:Point-to-Point Protocol
          inet addr:192.168.0.2  P-t-P:192.168.0.3  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:9 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0
          RX bytes:318 (318.0 b)  TX bytes:708 (708.0 b)

使用 ps aux | grep irda,您现在应该看到这些进程

root      3534  0.0  0.2  1272  464 ?        S    06:51   0:00 irattach irda1 -s
root      3579  0.3  0.2  1400  476 tty1     S    06:55   0:06 irdadump
root      4312  0.1  0.4  2088  948 tty2     S    07:18   0:00 pppd call irda

使用 route -n,您现在可能会看到此 PPP 设备

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.0.3     0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
0.0.0.0         192.168.0.3     0.0.0.0         UG    0      0        0 ppp0

并且应该可以对远程主机执行 ping 192.168.0.3

PING 192.168.0.3 (192.168.0.3): 56 data bytes
64 bytes from 192.168.0.3: icmp_seq=0 ttl=64 time=290.7 ms
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=146.6 ms

现在您可以使用 TCP/IP 应用程序。例如 ssh (请注意,建立连接需要一些时间,请耐心等待)

ssh -v USER@192.168.0.3


4.6.7. 设置打印机连接 (IrLPT)

除了使用 TCP/IP 连接之外,加密狗也适用于打印机连接。设备名称是/dev/irlpt0。有关 IrDA 打印机连接的详细信息,请参见上面的相应章节。


4.6.8. 清理

您现在可以微调您的设置,例如解决路由问题。也可以设置更高的速度,但我还没有尝试过。如果一切正常,您现在可以选择使配置永久生效。您可以编辑/etc/irda.conf并配置 system V init 脚本(用于 IrDA、网络等)。但是正确执行此操作的方式取决于您的 Linux 发行版。


4.6.9. 遗留问题

我遇到了一个奇怪的问题。当插入 IrDA-USB 加密狗时,我从蜂鸣器中听到轻微且持续的噪音。


4.7. Linux PDA:Agenda、iPAQ、Yopy、Zaurus

目前最知名的 Linux PDA 是 AgendaComputing 的 Agenda VR3 (已停产)、COMPAQ 的 iPAQ、SHARP 的 Zaurus SL-5000/5500 和 Samsung 的 Yopy。所有这些都具有红外端口。有不同的 Linux 发行版可用于 Linux PDA,例如:QT Embedded (预装在 SHARP Zaurus 上)、OpieFamiliar 等等。您可以在 Zaurus 软件索引 - ZSIipkgfind 中找到下面提到的软件 IPK 包。有关 PDA 上和 PDA 中 Linux 的更多信息,请参见 TuxMobil

以下内容基于我在 SHARP Zaurus SL-5500G 上的经验,使用原始 SHARP romimage 2.38G 和 Kernel 2.4.6-rmk1-np2-embedix#1,但可以根据具体情况应用于其他 Linux PDA。Zaurus 附带书面手册,其中使用 GUI (例如 FileManager、Settings) 解释了文件传输和 PPP 连接。在这里,我将尝试涵盖可以从命令行完成的操作以及官方 SHARP 手册和 Opie 用户手册 中均未包含的主题。红外功能似乎是 StrongARM SA1110 CPU 的一部分,IrDA 驱动程序模块名为 sa1110_ir (在库存 Zaurus 上,IrDA 支持似乎已内置到内核中)。从 irda-utils 中,只有 irattach 可用。IrDA 支持通过 irattach /dev/ttyS2 -s 1 附加(请注意,“-s 1” 将在新版本中替换为 “-s”)。因此,看起来使用了 SIR,我尚不了解 FIR 支持的信息。要获得 irdadump 的某些功能并检测范围内的其他 IrDA 设备或调试 IrDA,您可以使用 cat /proc/net/irda/discovery 以及/proc文件系统或其他文件,或者自行编译用于 ARM 架构的 irda-utils,也可以使用预编译的二进制文件。从设备文件中,只有/dev/ircomm(请注意,它不是/dev/ircomm0) 默认情况下创建。文件modules.conf似乎不存在。使用 irrecv,您可以启动红外 GUI 设置。IrOBEX 支持可用,但缺少来自 OpenOBEX 的适当工具,但您可以从 GUI 将文件传输到 Palm PDA、手机或另一台 Linux 计算机或 Microsoft-Windows 计算机。IrDA 启动脚本位于/home/etc/rc.d/init.d/irda。有关红外遥控支持,请参见下文。使用来自另一台 Linux 计算机的 irdadump,Zaurus 标识为(查看第二行)

10:56:48.652982 xid:cmd b03cbbb9 > ffffffff S=6 s=5 (14)
10:56:48.652963 xid:rsp b03cbbb9 < b7960e8f S=6 s=4 localhost hint=8420 [ Computer IrOBEX ] (26)
10:56:48.742992 xid:cmd b03cbbb9 > ffffffff S=6 s=* japh hint=0400 [ Computer ] (20)
10:56:51.203002 xid:cmd b03cbbb9 > ffffffff S=6 s=0 (14)


4.7.1. PPP

通过 PPP,您可以通过手机或另一台计算机获得网络连接。有关详细信息,请参见 PPP-HOWTO。有关通过 NAT 通过另一台 Linux 计算机转发数据包的信息,请参见 IPTABLES-Tutorial

您可以使用命令行选项启动 pppd,但对我来说,拥有一个配置文件更方便/etc/ppp/peers/irda。这是一个首次测试的示例

connect /bin/true
noauth
persist
debug
kdebug 7
nodetach
115200
local
/dev/ircomm
192.168.0.2:192.168.0.3

如果另一个 IrDA 设备是 Linux 笔记本电脑,您可以使用相同的配置文件名和相同的 PPP 选项,而无需最后一行,最后一行设置了本地和远程 IP 地址。还要注意正确的设备名称,例如/dev/ircomm0。以下条目用于调试目的,当一切正常工作时可以注释掉

persist
debug
kdebug 7
nodetach

现在在两台机器上都使用 pppd call irda 启动 PPP。为了诊断目的,请保持消息在此终端窗口中运行,并切换到另一个窗口进行下一步。您现在可以使用 ifconfigping 检查网络连接。有关连接到手机的信息,请参见上面的手机连接章节。


4.7.2. 传输文件 - OpenOBEX

OBEX 的优势通常在于集成。通过 OBEX 发送约会事件,Zaurus 很可能会像 Palm 一样自动将其集成到内置日历中。名片也是如此。IrOBEX 协议提供了一种通过红外线将文件传输到另一台 PDA、手机或计算机的简便方法。Linux 工具由 OpenOBEX 提供。通过 GUI 在两台 Zaurus PDA 之间或与 Palm PDA 之间传输文件可能会起作用。但是目前我无法从我的 Linux 笔记本电脑发送或接收文件。当尝试通过 ircp FILE 发送文件时,我收到此 irdadump 消息

11:11:03.943005 i:cmd  > ca=8a pf=1 nr=0 ns=0 LM slsap=12 dlsap=00 CONN_CMD (6)
11:11:03.972964 i:rsp  < ca=8a pf=1 nr=1 ns=0 LM slsap=00 dlsap=12 CONN_RSP (6)
11:11:03.973010 i:cmd  > ca=8a pf=1 nr=1 ns=1 LM slsap=12 dlsap=00 GET_VALUE_BY_CLASS: "OBEX:IrXfer" "IrDA:TinyTP:LsapSel" (37)
11:11:04.002973 i:rsp  < ca=8a pf=1 nr=2 ns=1 LM slsap=00 dlsap=12 GET_VALUE_BY_CLASS: No such class (11)
11:11:04.003015 i:cmd  > ca=8a pf=1 nr=2 ns=2 LM slsap=12 dlsap=00 DISC (6)

当尝试通过 ircp -r 接收文件时,我收到此 irdadump 消息

11:15:08.682979 i:cmd  < ca=8a pf=1 nr=4 ns=5 LM slsap=53 dlsap=00 CONN_CMD (6)
11:15:08.683063 i:rsp  > ca=8a pf=1 nr=6 ns=4 LM slsap=00 dlsap=53 CONN_RSP (6)
11:15:08.712970 i:cmd  < ca=8a pf=1 nr=5 ns=6 LM slsap=53 dlsap=00 GET_VALUE_BY_CLASS: "OBEX" "IrDA:TinyTP:LsapSel" (30)
11:15:08.713035 i:rsp  > ca=8a pf=1 nr=7 ns=5 LM slsap=00 dlsap=53 GET_VALUE_BY_CLASS: No such class (11)
11:15:08.732976 i:cmd  < ca=8a pf=1 nr=6 ns=7 LM slsap=53 dlsap=00 DISC (6)

Jean Tourrilhes 建议了以下解决方案:“Zaurus 不支持 “OBEX:IrXfer” 服务,它可能只支持 “OBEX” 服务,请使用 cat /proc/net/irda/irias 进行验证。因此,要么您在 Zaurus 上启动 “OBEX:IrXfer” 服务的服务器 (ircp_server - 为 Zaurus 交叉编译),要么您在笔记本电脑上使用使用 “OBEX” 服务的客户端 (irobex_palm3)。”


4.7.2.1. 工具

Beamster 是一个小型的 Gtk/python 实用程序,用于帮助 IrDA 传输,尤其是在 Linux PDA 之间进行传输 (ftp://ftp.handhelds.org/pub/linux/dists/familiar/feeds/unstable/packages/armv4l/)。它可以与大多数使用 IrDA 对象交换协议 (OBEX) 的手持设备/笔记本电脑/打印机通信,实际上,任何已经与 openobex 软件包一起工作的设备都将与此实用程序一起工作。它应该非常直观易用。确保 IrDA 为 “On”,放置两个设备,等待状态栏显示已发现新对等设备,选择传输模式(PalmOS 对等设备使用 “Palm3”,其他所有设备使用 “Windows”),然后根据需要按 “beam” 或 “receive”。请注意,“receive” 会在开和关之间切换。已测试与以下 IrDA 设备之间的传输:旧的 Palm3、Psion 5MX、Windows 98 ThinkPad 和带有 Actisys L220+ 加密狗的 Linux 桌面。

ObexFTP 实现 flexmem 直接访问 Flex.Memory。我通过 sersniff 管道传输了一个 S45 数据资源管理器 (windows) 会话。日志看起来大致像通过电缆的 OBEX。事实上,旧的 Open OBEX 正在与 Siemens S45 手机一起工作。已确认它与 Siemens S45/ME45 和类似的手机配合良好。您可以通过 IrDA 或串行连接访问 Siemens 移动设备上的 Flex Memory。


4.7.3. 打印

要直接打印到支持 IrDA 的打印机,您需要设备文件/dev/irlpt0。如果它不可用,请使用 mknod /dev/irlpt0 c 161 16 创建它。现在您可以执行第一个简单的测试。尝试将一个小文件写入/dev/irlpt0通过 cat FILE >/dev/irlpt0。使用 SHARP 的库存内核这不起作用,但使用自定义内核可以正常工作。不要对格式不佳感到奇怪(线条形成类似阶梯的形状),这只是第一次检查。要获得漂亮的打印格式,您可能需要编写一个过滤器,如 LinuxPrinting.org 的 Printing-HOWTO 中所述。有关从移动 Linux 设备打印的更多信息,您可以在 Linux-Mobile-Guide 中找到。


4.7.4. 遥控 - LIRC

通过为适当的内核版本安装 lirc-modules-KERNEL 和 LIRC,可以在 Linux PDA 上实现消费红外 - CIR 又名红外遥控。有关更多详细信息,请参见 HandHelds.org-WiKiOpie-Remote 页面。Opie-Remote 是 Compaq iPAQ 和 SHARP Zaurus 的遥控器模拟器。


4.7.5. 为 IrDA 编程 QT Embedded

在 SHARP Zaurus 开发者站点,您可以找到 Zaurus-IrDA-HOWTO ,其中解释了如何在 Zaurus 上利用 IrDA 端口。Werner Schulte 的 iPAQ Help - iPAQ and Zaurus development using QPE 描述了如何总体上开发 Qtopia 应用程序。


4.7.6. 键盘和扫描仪

对于 iPAQ,有一个模块h3600_microkbd,它支持 MicroInnovations IR 键盘。似乎有可用的光学条形码阅读器,它们使用某种红光来读取数据。但我怀疑这与 IrDA 或消费红外 - CIR 有任何关系。

IRK 允许您将外部红外键盘与 Zaurus 一起使用。它将 LIRC 驱动程序连接到 Qtopia 环境。目前仅支持 Chicony KB-9820 键盘(德语版本)。


第 5 章。高级主题

5.1. 故障排除

5.1.1. 一般信息

如果您遇到问题。请尝试以下操作

  • 阅读下面的 FAQ 部分。

  • 查看 /var/log/messages 和/或 /var/log/kern。

  • 执行 dmesg

  • 查看以下目录中的不同文件/proc/irda.


5.1.2. 已知错误

如果您发现错误,请将错误报告发送到邮件列表,包括 dmesg 输出以及您正在使用的 Linux 版本和硬件。谢谢!

有时 IrCOMM 连接失败,尤其是在两个设备相互发现时。您可以使用 echo 0 >/proc/sys/net/irda/discovery 禁用发现。

CR(回车符)字符无法通过 IrCOMM 在两台 Linux 计算机之间使用 cat file >/dev/ircomm0cat /dev/ircomm0 传输。它会导致奇怪的事情并冻结您的 Linux 计算机。

IrOBEX 可能会在接收时丢失一些数据。该错误很可能在 IrOBEX 的用户空间端。


5.1.3. 故障排除技巧

虽然我不是一个黑客高手,但我收集了一些技巧来跟踪 Linux/IrDA 软件中的错误或 bug。

  • 您可以在以下位置设置调试级别/proc/sys/net/irda/debug为 1、2、3、4。

  • 使用以下目录中的文件/proc/sys/net/irda尝试不同的参数,例如 echo 0 > /proc/sys/net/irda/discovery。以下/proc/*/irda文件是

    root@duckman:~# ls /proc/sys/net/irda/* /proc/net/irda/*
    /proc/net/irda/discovery
    /proc/net/irda/irlmp
    /proc/net/irda/irda_device
    /proc/net/irda/irttp
    /proc/net/irda/irias
    /proc/net/irda/irlap
    /proc/sys/net/irda/devname
    /proc/sys/net/irda/discovery
    /proc/sys/net/irda/compression
    /proc/sys/net/irda/debug
    

  • 也可以调试代码。但我不知道如何做到这一点。如果您想使用 SKB 调试代码,您可以编辑 irda.h 并更改 /include/linux/skbuff.h (请参阅快照 10-2-98 的修订历史)。

  • 对于 irda 模块的问题,模块包中的实用程序 kdstat 可能会有所帮助。但我无法尝试这一点。

  • “您现在可以更改在 /proc/sys/net/irda 中使用的发现数据包的数量(1、6、8 或 16)以及发送它们之间的超时时间(2-8 * 10 毫秒)。如果您在发现设备时遇到问题,请进行实验。我的 Palm III 似乎喜欢 16 个 discovery_slots 和 8 个 (*10 毫秒) 的 slot_timeout。”……“可靠发现 IR-610 的绝对最小值似乎是 9。” 另一份声明:……Palm III 不喜欢连续 8 个发现帧,但 6 个可以。使用 8 个时,它会在 6-10 次中回答 1 次,使用 6 个时,它每次都会回答。我真的不知道这是 Linux-IrDA 还是 Palm III 的问题。解决此问题的一种方法是为每次发现循环使用一些不同的发现方法,如下所示:发现 1:发送 8 个 xid 帧,间隔 80 毫秒。如果有答案,则保持相同的配置,如果没有答案,则尝试下一个配置。发现 2:发送 6 个 xid 帧,间隔 80 毫秒。发现 3:发送 8 个 xid 帧,间隔 90 毫秒。发现 4:发送 6 个 xid 帧,间隔 90 毫秒。发现 5。返回 1。或某些其他模式,甚至更多组合。也许这有时会实现,因此如果 /proc/sys/net/irda/discovery_slots 设置为 0,则会启用它。

  • 如果有人遇到内核 Oops,请将其提供给../linux/scripts/ksymoops/ksymoops程序,以便我们可以找出哪里出错了。只需从 syslog 中剪切出 Oops 行,将其保存到文件中,然后运行 ksymoops <file>

  • Dag Brattli 写道:我发现 cs4232 声卡每秒给我数百次中断!我从内核中删除了声音相关的东西,现在机器的速度通常快了 4 倍!如果您在机器上运行 esound 服务器 (esd),Linux/IrDA 可能会遇到问题。我的两台机器,一台 166Mhz Pentium 笔记本电脑和一台 200Mhz Pentium Pro 在 esd 运行时都无法运行 Linux/IrDA。原因是 esd 使声卡每秒产生 300 多次中断,这会导致串行驱动程序在接收时溢出。这是因为串行驱动程序现在在 Linux-2.2 中使用慢速中断(2.2 中的所有内容都是慢速中断),因此中断处理程序会在退出时进行调度。慢速中断的好处是数据包的传递速度更快,因为您无需等待下一个计时器滴答。唯一的例外是 pc87108 驱动程序,由于它使用 DMA 并且每个数据包只会产生几次中断,因此它可以正常工作。

  • 还有一些用户空间工具 irdapingirdadump 用于检查 Linux/IrDA 连接。

  • 据我所知,可以使用 IrCOMM,可以通过红外设备或通过串行电缆。也许这也提供了一些调试的可能性。

  • 1) 您可以编辑 /etc/conf.modules,添加以下行:option irda irda_debug=3 2) 确保 irda 模块已完全删除。3) 编辑 /etc/syslog.conf,添加以下行

    */*         -/var/log/all
    
    4) 执行 killall -1 syslogd 命令。 5) 打印,或者执行任何导致 irlpt 出现问题的操作。 6) 检查 /var/log/ 目录下的所有文件。

对于某些 ThinkPad 型号,您必须重启进入预装的 M$ 操作系统,并使用 Thinkpad 工具激活 IrDA 端口。目前没有 Linux 工具可以实现这一点。这将禁用您的内部串口 (ttyS0)!DOS 工具是 PS2.EXE,据我所知,tpctl 无法实现此功能。使用此 DOS 程序来启用 IrDA 非常重要。使用 Microsoft-Windows 工具不起作用。如果没有这样做,驱动程序会正确加载,一切看起来都正常,但 LED 灯的亮度不够。


5.1.4. PCI 设备号

Daniel R. Risacher (magnus_at_alum.mit.edu) 写道:为了使我的 Palm III 与运行 2.2.17 的 Tecra 8100 同步,我需要编辑 /usr/src/linux/include/net/irda/toshoboe.h 文件。我将 "#define PCI_DEVICE_ID_FIR701 0x0701" 更改为 "#define PCI_DEVICE_ID_FIR701 0x0D01"


5.1.5. scanport

scanport 可以用来获取芯片的正确设备 ID。它是 hwtools 软件包的一部分(在 Debian 上,其他地方可能也一样)。您只需输入它,它就会扫描从 0x100 到 0x400 的 I/O 端口 - 这是通常的 ISA 范围。0x400 以上是 0x400 以下设备的阴影,再往上是 PCI 设备,所以默认情况下不扫描 0x400 以上。“无论如何,我必须手动使用 inb 进行扫描才能找到我的芯片的 I/O。幸运的是,我不需要走太远就能找到它。(较新的声卡通常位于 0x530 附近,而 0x220 保留用于传统兼容模式)通常,如果您知道某个设备的位置,您只需将驱动程序指向它,驱动程序就会探测以查看它是否是驱动程序期望的设备。这并非完全安全,但比每个驱动程序都探测每个 I/O 端口寻找它认为可以理解的东西要安全得多。scanport 只进行读取操作,这通常是安全的。”


5.2. 邮件列表

欢迎您使用 Linux-IrDA 邮件列表来发布关于 Linux-IrDA 的问题、答案、错误报告、补丁、建议和评论。请注意,邮件列表不接受来自非订阅者的邮件。这是为了提供高信噪比并避免垃圾邮件。要订阅和取消订阅,请将您的浏览器指向 irda-users,在这里您将找到 Linux-IrDA 邮件列表控制页面。阅读“Subscribing to Linux-IrDA”部分,填写电子邮件地址字段和密码字段(两次)。然后按“Subscribe”按钮。

要向所有列表成员发布消息,请发送电子邮件至 <irda-users@lists.sourceforge.net>。在提问之前,请将其视为最后的手段,在阅读文档并搜索 Google 或您选择的搜索引擎之后再提问。也请检查存档以查找您问题的答案。如果您提供一些信息,我们将更容易更快地帮助您。请包括以下命令的输出:

uname -a
cat /proc/net/irda/discovery
setserial -g -a /dev/ttyS*
findchip
irdadump
当然还有任何错误消息,以及 dmesg 的相关部分。还请确保您提供一些关于 BIOS 中 IrDA 支持以及您正在使用的 Linux 发行版的信息。


5.3. GUI:Gnome, KDE

Gnome IrDA applet 是一个 GNOME IrDA 小程序,用于监控 IrDA 设备。

Beamster 是一个小型的 Gtk/python 实用程序,用于帮助 IrDA 传输,尤其是在 Linux PDA 之间进行传输 (ftp://ftp.handhelds.org/pub/linux/dists/familiar/feeds/unstable/packages/armv4l/)。它可以与大多数使用 IrDA 对象交换协议 (OBEX) 的手持设备/笔记本电脑/打印机通信,实际上,任何已经与 openobex 软件包一起工作的设备都将与此实用程序一起工作。它应该非常直观易用。确保 IrDA 为 “On”,放置两个设备,等待状态栏显示已发现新对等设备,选择传输模式(PalmOS 对等设备使用 “Palm3”,其他所有设备使用 “Windows”),然后根据需要按 “beam” 或 “receive”。请注意,“receive” 会在开和关之间切换。已测试与以下 IrDA 设备之间的传输:旧的 Palm3、Psion 5MX、Windows 98 ThinkPad 和带有 Actisys L220+ 加密狗的 Linux 桌面。


5.4. 如何使红外光可见

 

看不到的东西会伤害你。

 未知作者 Ess

如果您有一个支持 IrDA 的打印机,您可以将手机指向它,您应该看到 IR 端口附近的指示灯亮起或闪烁。如果您有一个带 IR 的 Palm 掌上电脑,请将其指向手机。如果手机上的 IR 处于发现模式,您应该在 Palm 上看到“Waiting for Sender”对话框弹出。

有一个 Palm 程序名为 “IRMonitor”,它可以测量红外辐射。您可以从 EuroCool 或 PilotZone 获取它。您运行该程序,将您的 Palm 指向您认为红外光束应该来自的位置,如果该端口有任何辐射,它们将显示为 IrMonitor 滚动图上的尖峰。我强烈向任何玩弄或使用 IR 设备的人推荐这个程序。

您也可以使用摄像机来检测红外光。但我还没有检查过这一点。

本节的大部分内容摘自 “The Armadillo with the Mask” 在 Linux/IrDA 列表上的帖子。


5.5. 节能

在我的 HP OmniBook 800 的规格中,建议在不使用 IR 端口时将其关闭,因为它可能会消耗高达 10% 的电池时间。

如有必要,您也可以尝试禁用内核 IrDA 部分中的快速 RRs 功能。此选项将为您提供更好的延迟,但会消耗更多电量。


5.6. 超越 IrDA

5.6.1. 扩展传输距离

根据 IrDA 规范,范围可达 1 米。惠普 的 “IrDA Data Link Design Guide” 第 20 页:“在某些情况下,可能需要将链路距离扩展到 IrDA 保证的 1 米以上。有两种方法可以做到这一点:增加发射光强度,或提高接收器灵敏度。为了扩展链路距离,IR 链路两端的灵敏度和强度都必须提高。如果希望与可能具有最小发射器强度的标准 IrDA 设备通信,则必须提高接收器强度。标准 IrDA 设备也可能具有最小接收器灵敏度,因此发射器强度也必须提高。”

Andreas Butz 写道:“这可能是一个愚蠢的问题,但有没有人知道整个 IrDA 协议栈是否真的依赖于双向连接,或者其中是否有某些部分可以被滥用为单向连接,理想情况下用于不可靠的数据?我们正在尝试修改一些 IR 加密狗,以便将信息广播到几米远的 Palm 掌上电脑(覆盖整个房间),并且由于我们不想修改掌上电脑本身,并且增加接收器侧的灵敏度似乎不太可能奏效,我们陷入了单向链路。”。请参阅邮件列表存档以了解讨论的详细信息。

Marc Bury 发送:“... 刚刚听说飞利浦的一些遥控器新方案:他们称之为 IRDA - Control。据称这是双向的,数据速率为 75 kbps,支持多个同时设备(最多 8 个),最小范围为 6 米!” 更多信息请访问 IrDA.org

德国杂志 ELEKTOR 发布了一份构建远程 IrDA 加密狗(20 米,RS232,IrDA 1.0)的指南,ELEKTOR 5/97 页。

“主要问题是您通常必须使接收器更灵敏。基本物理学定律是平方反比定律:强度随距离的平方下降,因此从 1 米到 5 米需要 25 倍的功率(以及便携式设备的电池消耗),或 25 倍的灵敏度(和动态范围 - 它仍然必须能够在 3 英寸处工作)。如果您想在另一端这样做,它不仅需要灵敏度提高 25 倍,而且还必须在荧光灯、屏幕保护程序、移动阴影的干草堆中拾取微小的 IrDA 脉冲针...”

K-H. Eischer 也推荐了激光二极管(可脉冲):但它们更昂贵。而且如果激光二极管的功率超过 1 mW,它们也很危险。更好的解决方案是使用透镜来聚焦光束。空气中的吸收最小(我不知道正确的频率),您应该使用具有此频率的 IR 二极管。

James 写道:“对于任何想要使用 IrDA 进行远距离传输的人来说,我们以前尝试过。最好的方法是

  • wavelan - 购买网卡,但不要购买天线,您可以自己制作与他们在这里销售的 9000 美元类型增益相等的天线。

  • 微波 - 您可以拿起 X 波段多普勒雷达模块,稍微调整它们之间的距离,并使用您当地的 TX 作为输入 RX 的 LO,整个东西的行为类似于以太网,您可以将其连接到 AUI 端口,这现在可能是非法的。

  • 红外 - 许多人出售通过红外传输视频的套件,它们配有您需要的大型菲涅尔透镜,它们可以管理大约 4MHz 的 b/w,距离超过 100 米。

  • 激光二极管 - 当我们研究这些时,它们很麻烦,我认为 elantec 制造了不错的驱动器,但调制它们很麻烦,Steve Carcia 写了一系列关于调制 He-Ne 激光器的文章,但要小心,它们内部有很多伏特电压想要跑出来杀死你。

无论您选择什么,考虑到 IrDA 是少数几个可以明智地处理单工的协议之一,IrDA 很可能是一个不错的选择。”

这里有一些链接指向 自制红外 (IrDA) 设备,可用于您的笔记本电脑、PDA 或手机。


5.6.2. 即将到来的标准(蓝牙和 IrDA)

“越来越多的人现在认为 IrDA 和蓝牙将和平共处,而蓝牙作为 IrDA 杀手的想法不再奏效。IrDA 在性价比方面仍然是无与伦比的,并且随着 AIR 和 VFIR 等标准系列的新增功能,很高兴看到 IrDA 正朝着正确的方向发展。”


5.7. IrDA 网络邻居

5.7.1. 笔记本电脑-打印机-PDA

您可以快速浏览一下 拖放内容,这样您就可以将文件拖放到您的 PDA(使用 IrOBEX)或将文件拖放到您的打印机(使用 IrLPT)等。


5.7.2. 桥接/路由

James 写道:“... 有一种更好的桥接方法,那就是路由。这完全是用户空间的操作,不需要内核补丁。但是 Linux/IrDA 核心团队不再维护 IrLAN 协议。

它分为两个部分(您可能只需要一个,您的里程可能会有所不同...),第一个称为 irdaipcfg,它执行以下操作:

1) 第一部分作为 irdaipcfg ifeth ifirlan 执行,守护进程化,然后在 ifirlan 上查找 ARP 数据包,检查 arp 是否不是由运行它的机器生成的。arp 包含 irlan 另一端机器的 ip 地址(它是由 irlan 代码中的无偿 arp 生成的)。然后程序通过 ifirlan 设置到此 ip 地址的主机路由,为 ifeth 添加代理 arp,并在 ifeth 上生成无偿 arp。它将客户端的 ip 地址写入 /var/run/host.ifirlan,以便您可以轻松地从脚本中撤消所有这些操作。

2) 第二部分作为 gratarp ifirlan 执行。有时无偿 arp 似乎在管道工作中丢失,gratarp 守护进程化并喷出一连串的东西...

我按如下方式使用它们:(您可以随意使用它们做任何您想做的事情)

在我的主机(连接到本地网络的机器)上,irlanx 通过我的 ifup 脚本从 /etc/irda/network 通过 irattach 启动为 10.192.0.1,子网掩码为 255.255.255.255,广播地址为 10.192.0.1。然后 /etc/irda/network 运行 irdaipcfg eth0 irlanx,这会执行路由。

来自 /etc/irda/network

"start")
    echo 1 >/proc/sys/net/ipv4/conf/all/forwarding
    ./ifup ifcfg-${device}
    /sbin/irdaipcfg ${localnet} ${device}
    ;;
"stop")
    host=`cat /var/run/host.${device}`
    if [ .$host != . ]; then
      /sbin/arp -d ${host} dev ${localnet}
      /sbin/route delete ${host} dev ${device}
    fi
    ./ifdown ifcfg-${device}
    /sbin/ifconfig ${device} down
    ;;
在客户端上,我将 IrLAN 设置为使用我的正常子网 10.32.32.51 上的地址,但子网掩码为 255.255.255.255(不是我通常的子网掩码)。我有一些静态路由,它们是主机 10.192.0.1 dev irlan,以及网络默认网关 10.192.0.1 dev irlan。我从 /etc/irda/network 运行 gratarp,我可以绕着我的房子走动,而不会丢失 telnet 和 ssh 会话...”


5.7.3. IPv6

据我所知,IPv6 具有邻居发现机制,但我没有关于 Linux/IrDA 与 IPv6 一起使用的信息。请参阅邮件列表存档,了解主题为:“patch-2.2.7-ac1-irda4” 的讨论。


5.7.4. DHCP

我收到报告称可以使用 dhcpcd 与 IrLAN。请使用最新的 DHCP 软件。但目前 Linux/IrDA 核心团队不再维护 IrLAN 协议。


5.8. Linux/IrDA 和 APM

Fons Botman 写道:“当我休眠我的 HP OmniBook 2000CT 时(Fn-12 磁盘映像写入磁盘,机器完全关闭),irtty 处于活动状态,然后再次打开它,irda 不工作。我可以看到它尝试回复来自 windows 盒子的发现帧,在 OmniBook 上使用 irdadump。但 windows PC 没有看到回复。如果我只是杀死 irattach 并删除 irtty 和 serial,然后再次启动 irattach,它又开始工作了。这是否也发生在其他 linux 笔记本电脑上?是串行设备驱动程序中的问题吗?” Pedro Figueiredo 也报告了 Fujitsu LifeBook 735DX 的这个问题。

Dag Brattli 的回答:“你们都可以检查一下,当您使用 PPP(而不是使用 IrDA)时,是否也发生同样的事情。我猜 APM 组件关闭了串口,因此驱动程序需要在再次唤醒时重新初始化它。这在一些我所知的 PCMCIA 驱动程序中得到了正确实现,但我真的不认为串行驱动程序从 APM 系统接收到任何事件。

所以这里您有自己的小型内核项目。开始向 irport 添加 APM 支持,这将是最容易的事情(以及 FIR 驱动程序),然后您可以开始向串行驱动程序添加补丁(如果需要)。再次,我认为 PCMCIA 子系统可能是如何正确修复它的一个很好的来源。”


5.9. 性能测试

netperf 是一个基准测试程序,可以用来测量许多不同类型的网络性能,包括 Unix 域套接字和通过 BSD 套接字的 TCP 和 UDP。它为单向吞吐量和端到端延迟提供测试。Netperf 页面。

bing 由 Pierre Beyssac 开发,通过发送 ICMP ECHO_REQUEST 数据包并测量链路两端不同数据包大小的往返时间来确定点对点链路上的带宽。


5.10. IrDA 协议

5.10.1. IrDA 协议栈

图 5-1. IrDA 协议栈

IrDA 协议栈。


5.10.2. 现有的 IrDA 协议实现

我从 Lichen Wang 那里获得了这些评论:

IrLAP、IrLMP 和 TinyTP 现在非常稳定。但是各种个别的实现仍然可能存在怪癖。

IrCOMM 被广泛使用,但微软发誓要放弃它,只使用 IrSocket。

IrObex、IrMC、IrTran-P 等正在各种设备中出现。PC 上的支持是分段的,有时非常糟糕。

新的 IrDA 协议开发 AIR 主要由 IBM 推动。您可以获得更宽的角度和更远的距离(10 米?),但数据速率可能会更低。您还可以对这个已经很慢的通道进行时分复用。在我看来,对用户的好处微乎其微。AIR 硬件和软件的更改成本很高。我认为您将不得不等待很长时间,甚至永远,才能看到任何使用 AIR 的产品。

IrBUS 主要由 Sharp 推动。它的目标是遥控器、IR 键盘等,而不是用于数据通信。我认为如果 Sharp 成功,您可能会在机顶盒、网络电视等中看到 IrBUS。如果这些设备达到临界规模,一些 PC 可能会集成 IrBUS 以控制这些设备。

VFIR 是最新的。好处是更高的数据速率 (16 Mbps)。与 AIR 和 IrBUS 不同,VFIR 的软件更改是最小的。更改主要在硬件方面。

总而言之,我认为我们不需要期待新的 IrDA 协议。易于安装且稳定的现有 IrDA 协议的实现才是最前沿的!


5.11. FAQ

  • Q0 - 问题:irport 和 irtty 之间有什么区别?

  • 答案:我从未使用过 irport,因为 irtty 对我来说有效,但您使用哪个底层驱动程序应该无关紧要。我成功使用了 irtty、nsc-ircc 和 irda-usb(取决于我的硬件)。

  • Q1 - 问题:我对端口和 irq 一无所知。我该怎么办?

  • 答案:A 部分:硬件设置 - 1 查看您的硬件规格!!!如果不可用,请查看您的供应商的支持页面,或联系支持热线。您也可能在上面提到的硬件调查之一中找到信息。B 部分:如何告诉内核关于硬件设置 -4 cat /proc/ioports 查看哪些端口已被使用。 -5 cat /proc/interrupts 查看哪些中断已被使用。 -6 使端口和中断可用于 IR 设备,例如停止 PCMCIA 服务或在 /etc/sysconfig/pcmcia 中包含如下行:PCIC_OPTS="irq_list=3,4,5,7,9,10,12,14,15" -7 现在尝试猜测正确的中断和端口是什么。使用 setserial /dev/ttySx irq M port 0xNNNN 告诉内核。如果有多于一个可能的选项,请全部尝试(注意:如 Serial-HOWTO 中所述,您不应尝试 irq 0、1、6、8、13、14)。 -8 如果您成功了,请将这些参数发送给作者,因为我想将它们包含在红外硬件调查中。 -9 祝你好运。也可能需要使用 setserial 微调 IR 串口,例如,setserial /dev/ttyS0 spd_vhi (速度 115200)。

  • Q3 - 问题:我收到一条类似 tcsetattr read/write error 在 /var/log/messages 中的消息。

  • 答案:可能是由错误的 /dev/ttyS* 或错误的中断或端口引起的。

  • Q4 - 问题:每个设置看起来都正常,因为我收到了相应的消息。但它仍然不工作。

  • 答案:将设备移动到 0.5 米(1.5 英尺)以内。检查是否只有一个应用程序正在使用红外端口。检查两个设备是否都使用相同的协议,例如 IrOBEX 或 IrCOMM。

  • Q7 - Ho Chin Keong 提问:除了在两台笔记本电脑之间设置 LAN 路由之外,还有没有其他方法设置两台笔记本电脑之间的通信?

  • Dag Brattli 回答:是也不是!IrDA 标准之一 IrCOMM 允许您在两台笔记本电脑之间模拟串行电缆,因此您可以使用为串行端口编写的任何应用程序(终端、PPP、slip 等)。但这尚未在 Linux/IrDA 中实现。IrLPT(打印机)支持实际上是 IrCOMM 的一个子集,因此它的一部分正在工作!

  • Q8 - Ho Chin Keong 提问:如果我故意阻止红外路径超过 10 秒,则连接无法重新建立。我必须杀死 irattach 并重新启动整个过程才能启动红外路由。但是,如果阻止时间少于 10 秒,则可以保持连接。这是设计的一部分还是一个错误?有没有办法可以将此时间限制从 10 秒延长到更长或无限?

  • Thomas Davis 回答:这似乎是 IrLAP/IrLMP 代码主端的一个错误。它似乎没有将重置/断开连接通知一直发送回堆栈。当您尝试与打印机通信时,您会注意到它,而当它握手时您断开/中断了它,IrLPT 卡在了查询模式中。(现在,它出现在 IrLAN 部分中)

  • Q11 - BSD 是否有任何 IrDA 支持?

  • 答案:Linux/IrDA 似乎是目前唯一可用的 GPL 源代码。

  • Q12 - Rui Oliveira 提问:我在将 PalmIII 连接到带有 Actisys 220L 适配器的 Linux 机器时遇到问题。使用主板适配器(没有品牌,但我想,类似于 Actisys 210L),我只需将 pilot 同步工具 (pilot-xfer) 重定向到连接了 ir 适配器的 /dev/ttyS1,并使用 SIR 模式下的 IrLink,我可以让 Linux 机器与 PalmIII 通信。尝试通过带有串行 irda Actisys 220L 适配器的串行端口进行上述操作,我无法使其工作。我的问题是:如果只是将数据扔到带有 irda 适配器的串行端口中会发生什么?

  • Lichen Wang 回答:在硬件方面,IrDA SIR 需要一个串行化器-解串器、一个编码器-解码器和一个收发器。驱动任何 PC 的 COM 端口的 UART 都是一个串行化器-解串器。在某些 PC 中,还有一个编码器-解码器,可以通过 BIOS 启用或禁用。当禁用它时,COM 端口可用作旧的 COM 端口。当启用编码器-解码器时,通常 COM 端口不再可用,但 IrDA 端口现在可用。Actisys IR-210 是一个 SIR 收发器,因此如果 PC 具有这种带有 IrDA 编码器-解码器的 UART 并且 BIOS 已启用它,则可以使用它。在这种硬件配置下,您需要告诉 Windows 安装程序您有“标准红外设备”和“笔记本电脑或台式机上的内置红外端口”。另一方面,Actisys IR-220 包括编码器-解码器和收发器。它旨在与常规 UART 一起使用。如果 PC 中的 UART 也内置了编码器-解码器,您必须使用 BIOS 禁用它。在任何一种硬件配置下,您都需要告诉 Windows 安装程序您有一个 “ACTiSYS” 制造的 “ACT-IR220L Infrared Wireless Interface”。要回答您的问题:除了将数据扔到串行端口之外,您还需要告诉 UART 和编码器-解码器要使用的数据速率。在使用内置编码器-解码器的情况下,当您设置 UART 的数据速率时,编码器-解码器也会被正确设置。在使用单独的编码器-解码器的情况下,您需要分别告诉它们两者的数据速率。

  • Q13 - 如果我尝试建立连接,比如 telnet,登录提示符出现的时间会非常长。

  • Renaud Baldura、Dag Brattli 和 Hee Thong 的答案:... 这是一个 DNS 问题。解析器超时,试图反向解析您的传入连接的 IP 地址。我认为只需将 /etc/resolv.conf 重命名为其他名称即可解决问题。... 或者在 /etc/hosts 中为您要访问的 ad-hoc 网络中的机器添加一些静态绑定。这应该可以避免 DNS 查找。... 如果两台机器都在私有测试环境中,请在 /etc/host.conf 中放入以下行,order hosts, bind。这将使机器在执行 DNS 查找之前检查 /etc/host 文件。记住更新两台机器上的 host 文件,以反映两台机器的 IP 和主机名。

  • Q14 - David LaPorte 提问:我想知道是否有人成功地使 Toshiba Tecra 740cdt 上的 irda 端口工作。... 我读到它应该显示在 IRQ 11,ttyS2。好吧,我有一个 PCMCIA 调制解调器,它占用了 ttyS2,而 PCMCIA 控制器占用了 IRQ 11。有人有什么建议吗?

  • Dag Brattli 回答:如果您的机器上仍然有 Win95,您应该转到设备管理器并更改 IrDA 端口的 PnP 设置(与您已经使用的东西不同的东西)。例如,您可以移走 ttyS1(在 Win95 中),使其使用 PCMCIA 卡将要占用的值,然后使用 ttyS1 的设置用于 ttyS2。

    dagbnb ~/linux/test/ > cat /etc/sysconfig/pcmcia
    PCMCIA=yes
    PCIC=i82365
    PCIC_OPTS="irq_list=7,9,10"
    CORE_OPTS=
    
    ... 应该确保 PCMCIA 控制器远离 irq 11。还要确保在 Win95 中启用了 IrDA 端口,因为它默认是禁用的。


第 6 章. 介绍

通过红外线进行遥控不是 Linux/IrDA 项目的目标,但包含在本 HOWTO 中是为了更完整地涵盖 “Linux 和红外线”。我发现一些项目正在研究这个主题。您可以在 TuxMobil 找到一些指向当前信息的链接。


第 7 章. Linux 红外遥控 - LIRC

LIRC 是一个软件包,支持接收和发送最常见的 IR 遥控器的 IR 信号。它包含一个连接到串口的硬件的设备驱动程序、一个使用此设备驱动程序解码和发送 IR 信号的守护程序、一个将 IR 信号转换为鼠标移动的鼠标守护程序以及几个允许您使用遥控器控制计算机的用户程序。IR 硬件可以是自制的,也可以从各种商业解决方案中选择。Takahide Higuchi 评价 LIRC:“它很棒,而且看起来几乎是完整的解决方案,但似乎市场上几乎没有支持硬件的产品(或者需要焊接一些特殊的电路... 这对很多人来说是艰苦的工作)。我相信,如果消费者 IR 支持在 FastIR 驱动程序中实现,并且制定一些通用的 API(例如,原始 IrSocket 和通用的 ioctls),LIRC 将会更受欢迎!”。


第 8 章. Lego Mindstorm

引用 Luis Villa 撰写的 Lego Mindstorm with Linux Mini-HOWTO:“如果您不知道,Lego Mindstorms Kit 是 Lego Group 出品的机器人套件,零售价约为 200 美元。为此,您将获得大量的 Lego 积木、一个包含 CPU、LCD 和一些连接器(称为 RCX)的大型积木、几个电机以及一些允许您与外部世界交互的光线和触摸传感器。...“

“与 RCX 的所有通信都是通过 IR tower 完成的,IR tower 通过串口连接到机器。因此,如果您没有串口连接,除非您可以购买适配器,否则您将无法使用 RCX。此外,在某些情况下,可能会出现 IRQ 或串口冲突。如果您的调制解调器使用,则尤其可能出现这种情况/dev/ttyS0."


第 9 章. 串行红外遥控器

这是一个简单、廉价的设备,可以连接到任何串口,以控制大多数具有红外遥控器的组件。它是在无焊面包板上设计和构建的,最终设计为 PC 板。您可以在 这里 找到这个软件包。


第 10 章. COREL Netwinder PC 的红外工具

Ryan Shillington 编写了一些工具来通过红外线控制 COREL Netwinder,例如

Corel Palm Administrator 的服务器端(守护程序)。它依赖于已安装并运行的 ir-simple。使用此工具,您可以检查和更改 IP 地址、网关地址、设置 eth1 等。您还可以运行简单的命令,并且可以检查温度、内存、负载平均值等。

Corel Palm Administrator 的客户端。您还可以运行简单的命令,并且可以检查温度、内存、负载平均值等。

一个非常基本的红外设备驱动程序。这不支持 IrDA(仅支持不可靠的传输)。它专门查找遥控器信号(和键盘等)。它的阻塞和传递数据的方式非常不同。

您应该在 Netwinder 项目中获取这些工具。


第 11 章. ir

irChris Dodge's RedRat 2 红外控制器的接口程序,用于向/从消费设备(如电视、录像机、有线电视盒和立体声音响)发送和接收红外信号。它是用 Perl 编写的。它仅使用基本的 Perl 结构,没有外部软件包,因此它应该可以在任何支持 Perl 和串行通信的平台上工作。可以通过命令行或 cron、作为电子邮件处理程序(通过别名)或作为 cgi 脚本访问它,cgi 脚本将自动生成包含所有可能代码的表单。它具有宏功能,因此一个命令可以发送一系列 IR 信号。使用 X-10 的 IR543,它也可以用于控制 X10 设备。请从 这里 下载。


第 12 章. irmctl

irmctl 是一个实用程序守护程序,用于控制您喜欢的非 IRDA 红外接收器。目前,仅支持 irman(通过 libirman)。


第 13 章. IRManager

IRManager (死链接:http://home.student.utwente.nl/f.c.vanviegen/releases/irmanager/) 是一个 Linux 守护程序,用于高级使用 IRMan 红外接收器。它将 IR 信号转发到(多个)本机 IRMan 应用程序,并且可以与您自己的脚本和应用程序一起使用。它还具有映射系统,其高级配置选项使其成为远程控制计算机的最灵活和最简单的方法。


第 14 章. irXxD

irXxD 是一个用于发送/接收红外遥控代码的库。它包括用于在 Linux 下接收/发送 IR 代码的内核 2.0 和 2.2 模块,以及对其他操作系统的各种支持。


第 15 章. XR3

Xr3RedRat2 串口学习型红外遥控器的 Linux 工具包。它最初是为与 ReplayTV 个人视频录像机 (PVR) 一起使用而开发的,但现在已扩展到处理任何类型的 IR 控制的 A/V 设备。


第 16 章. IR 文件选择器

红外 (IR) 文件选择器 是一个远程控制菜单,用于选择文件并通过分配的程序加载它们。您可以根据需要添加任意数量的文件类型和关联的程序。可以使用 Perl 或 Shell 脚本扩展红外 (IR) 文件选择器的功能。GUI 是使用 Perl::GTK 创建的,它使用 RCU::Lirc 来获取遥控器命令。


第 17 章. IControl

IControl 解释来自 Creative 的 RM-900 遥控器和随附的 IR LiveDrive! 接收器单元的信号。目前,它能够向各种程序(包括 XMMS、Xine、XawTV 和 XScreensaver)发送输入,以及循环窗口堆叠顺序(将窗口发送到后台)和更改输入焦点。它是完全可配置的,允许用户将任何按键映射到守护程序支持的任何操作。计划支持其他遥控器。


第 18 章. jlirc

jlirc 是 LIRC 和 WINLirc 程序的 Java 客户端 API。它使 Java 应用程序能够支持 IR 遥控。


第 19 章. lircemu

lircemu 是一个小型工具,供 LIRC 应用程序的开发人员使用。它模拟 LIRC 守护程序,因此您可以使用 LIRC 支持来测试、开发和使用程序。它提供了一个图形化的虚拟遥控器,因此您可以轻松地发送按钮。还包括一个简单的控制台版本。注意:此工具由 David Kutalek 开发。由于他的原始网站已消失,因此上面的链接指向 lircemu 的一些可能过时的版本。


第 20 章. smartmenu

smartmenu 是一个菜单应用程序,由 Ludovic Pludov 编写,用于通过 Lirc 使用遥控器。它的目的是提供一种智能的方式,通过遥控器控制你的 Linux 电脑。


第 21 章. iowlircemu

iowlircemu 是 LIRC 的一个模拟器,它(目前)仅支持 Code Mercenaries GmbH 的 IO-Warrior24 入门套件。它既不需要 LIRC,也不依赖于 LIRC。它在 GPL 条款下发布。此外,它还提供了一个接口,用于向连接的 LCD 写入数据。软件包中还包含一个 xmms 插件。


第 22 章. tonto

Tonto 是一个面向开发者的工具,用于流行的 Philips Pronto 系列可编程遥控器。 Tonto 提供了一个 IDE 和一个 Java API,用于编辑 CCF 文件。


第 23 章. 红外遥控 ./. IrDA

上述项目中,有两个项目使用某种自制的红外遥控适配器。在德国 ELEKTOR 5/97 p. 28 杂志中,也描述了如何自己构建一个串行 IrDA 适配器。也许有人可以将这两种适配器合并在一起。

关于红外遥控和 IrDA 之间关系的讨论,我引用 Linux/IrDA 邮件列表中的内容(经过 WH 缩短和修改)

Ryan Shillington 写道:“ConsumerIR - CIR、Remote IR 和 ASK-IR 与 IrDA(FIR、MIR、SIR)非常不同。”

Remote IR 和 ASK-IR 是用于红外线的非常低速和低频率(但范围很广)的用途。它们的工作速率约为 2400 波特。

SIR 以更高的速率运行,旨在用于需要传输大量字符的长距离传输(与遥控器不同)。

MIR 速度稍快(范围较小),但速度高达 1.15 Mbps,而 FIR(设备必须几乎接触)速度为 4Mbps。范围与可以发送数据的速度成反比。

我正在开发 Remote-IR 的驱动程序,但你应该知道你的红外设备必须支持它。寻找像 NEC、RC-5 或 RC-0 这样的协议(这些是最常见的协议)。

你可以使用 SIR 接收遥控信号。将你的波特率设置得足够低,数据就会传输过来。但是,根据我的经验,这不是“正确”的数据。它没有以正确的方式进行分析,因此,你无法计算校验和或用其补码进行检查。

我设法(使用 SIR)用遥控器接收到了数据。有人告诉我,SIR 读取遥控器内容的方式会因温度而异(尽管我从未有过这种经历)。”

Lichen Wang 回应道:“大多数笔记本电脑等中的所谓 ASKIR 并非用于红外遥控设备。ASKIR 用于 Sharp Wizard 和 Zaurus PDA 以及一些 Sharp 的笔记本电脑。Sharp 早在 IrDA 建立之前就声明了这一点,并且仍在支持它以保持向后兼容性。苹果公司的 Newton 也曾一度具备这种能力。

简而言之,ASKIR 使用 9.6 Kbps(19.2 和 38.4 Kbps 也是可能的)异步数据格式,包括 8 个数据位、1 个停止位和奇校验。起始位以及数据/奇偶校验中的所有 0 位都以 500 KHz 的红外方波(DASK 子载波)传输。停止位以及数据/奇偶校验中的所有 1 位都表示没有红外传输。

正如你所看到的,这与现有的红外遥控完全不兼容。[..]

没错。你不仅可以使用 SIR 硬件接收,还可以传输。当然,有一些限制。

大多数红外遥控器使用 38 KHz 子载波。3 乘以 38 是 114,非常接近 115.2。你可以将 UART 设置为以 115.2 Kbps、7 个数据位、无校验和 1 个停止位(总共 9 位)运行。3 个周期的 38 KHz 子载波可以接收或传输为一个字节 0x5B。

除了子载波必须为 38 KHz 之外,还有一些物理限制。SIR 接收器对 38 KHz 的灵敏度不如为此设计的红外遥控接收器。SIR 发射器的占空比较低,因此也无法发出强烈的子载波。

红外遥控通过在某些特定模式下打开和关闭子载波来编码控制信号。既然你可以传输和接收子载波,剩下的就都是时序了。

对于传输,你必须知道对于子载波的每个突发,要发送多少个连续的 0x5B 字节,以及突发之间要静默多长时间。

对于接收,你必须知道你接收到的 0x5B 中有多少是连续的,以及这些连续字节组之间的间隔有多长。[..]

我对 SIR、MIR 和 FIR 的 IrDA 链路距离的经验与 Ryan 所说的有些不同。[..]

SIR、MIR 和 FIR 都应该可以在 0 到 100 厘米的范围内工作,但在实践中

(a)有些设备在远距离时可能会出现问题。

如果可能,请将两个通信设备之间的距离保持在 50 厘米以内。低功率设备,如寻呼机、电话等,即使它们使用 SIR 而不是 MIR 或 FIR,范围也可能更短。

(b)有些设备在短距离时可能会出现问题。

将两个设备至少分开几厘米。将两个设备靠得太近可能会引起麻烦。

当链路不可靠时,我们将两个设备靠得更近,这在某种程度上是符合直觉的。但太近也不好,这与直觉相反。原因是 1 厘米处的光强度比 100 厘米处的光强度亮 10,000 倍。在 0.5 厘米处,它是 40,000 倍,等等。红外接收器制造商很难覆盖如此巨大的动态范围。我们都有在 10 瓦灯泡下阅读的问题,但想象一下在 100,000 瓦灯光下的感觉!

IrDA 物理层与红外遥控中使用的 DASK 调制完全不兼容。因此,不可能对 FIR 和遥控使用相同的控制器功能。但是,几乎所有的 FIR 控制器芯片都包含一些额外的功能来支持遥控。National、SMC 和 Winbond(仅举几例)都有这样的 I/O 芯片。

用于 FIR 和遥控的红外发射器非常相似。我尝试过一个标准的 FIR 发射器。它可以达到 10 米的遥控目的。因此,它的性能与为遥控设计的发射器一样好。

用于 FIR 和遥控的红外接收器有些不同。FIR 接收器可以接收遥控信号,但只能达到 1 米的范围,而为遥控设计的接收器通常可以达到 10 米。

我有一个带有 National I/O 芯片的 ISA 总线适配器,它同时支持 FIR 和遥控。我也有包含 FIR 和遥控接收器的红外适配器。(加上一个用于两种模式的发射器。)我找不到任何软件来支持遥控功能。我在 DOS 中做了自己的实验(我还不能运行 Linux。)有人对此感兴趣吗?”

Benny Amorsen 写道:“我有一台笔记本电脑,据说支持 ASKIR。红外端口的模式可以在 BIOS 中切换到 ASKIR。然而,必须重启才能在 BIOS 中切换模式,这使得它毫无用处,因此有人必须找到一种方法来动态切换模式。”

Dag Brattli 写道:应该可以使用 IrControl(以前称为 IrBus)用于 IrDA 兼容的遥控器。我目前不知道任何使用 IrControl 标准的遥控器,但应该有一些(还有谁更了解?)。你应该访问 IrDA 网站并获取物理层标准(我认为其中包括 IrControl)。

“正常”的 IrDA(使用 IrLAP)_不_适合用于遥控,因为它是面向连接的(并且仅支持 9600bps 用于无连接使用)。他们说范围有限的原因是眼睛安全(但我目前不知道为什么 CIR 使用相同的功率效果更好)。但是,我见过笔记本电脑在 4-5 米处连接(但我不认为任何高速通信都是可能的)。

大多数 IrDA 芯片组都能够进行 CIR 操作,并且很容易修改驱动程序以使其与 CIR 通信。Takahide Higuchi 已经开始研究 IrSockets,如果我们能够打开一个“原始”的 Ir(DA) 套接字,然后可以发送和接收 CIR 数据包,那就太好了。然后所有的 CIR 应用程序都可以在用户空间中运行。

我知道 Corel 对使用 CIR 控制 NetWinder 感兴趣(他们实际上有正在运行的代码)。请查看 这篇文章Ryans 页面

摘自 Hewlett-Packard 的“IrDA 数据链路设计指南”第 21 页:“可以使用 Hewlett-Packard 红外收发器传输和接收 IrDA 信号以外的信号。有关实施细节,请参阅应用笔记“收发器在 ASK 和电视遥控信号下的性能”。”

摘自 IR-MAN 手册页

幸运的是,许多 IrDA 设备与电视遥控器中使用的 38-kbps ASK 调制兼容。这意味着它们可以与此类红外类型信号一起工作。 ... 然而,似乎仍然有许多便携式计算机无法接收电视红外信号。

对于台式计算机,有两种选择,具体取决于你拥有的主板。通常,奔腾主板都有一个为红外通信准备好的 I/O 芯片组。有一个特殊的连接器,你可以在那里连接传感器。另一种选择是购买连接到计算机标准串行端口 (RS-232) 的串行类型收发器。 ... PC 遥控器已使用两种类型的 IrDA 设备成功测试

1) IRmate IR-210 串行端口红外适配器。 ... 设备发送可识别数据值的串行端口速度为 2400 bps。我不知道这种速度对于所有此类适配器来说是否都相同,还是此型号的独特特征。

查看接收到的数据值示例,看看它们有多相似。有些红外命令每次都会发生很大变化,难以识别。在这种情况下,可以使用较大的比较容差,但会增加不同命令之间混淆的风险。几乎所有情况下合适的容差值为 20。

2) 连接到 Asus P2B 主板的 Actisys IR2000L。 ... 有几种串行端口速度可以很好地工作,尽管 4800 bps 似乎是最好的。其他相同类型的适配器也使用此速度工作良好。查看使用此设备接收到的数据序列示例。有些遥控按钮发送完全相同的序列,根本无法区分它们。

3) 连接到与上面相同的 MoBo 的 Asus IR-eye。它的工作效果与 Actisys 设备一样好。

电视遥控器仅单向发送命令,以低速突发发送,距离可达 30 英尺。它们使用定向红外,LED 具有适中的锥形角,以提高易用性。通过 IrDA 的无线连接以高速突发在短距离内点对点和双向传输文件,使用具有窄锥形角的定向红外 LED。IrDA 传输需要相对仔细的瞄准,并且很容易被阻挡。因此,在使用遥控单元时,不要期望有很大的距离。

Alessio Massaro : 写道:“IrDA 不与电视遥控器通信,但它确实有 IrCOMM 层来模拟串行 i/f。我猜要让 LIRC 与其一起工作,你只需要 ... 从 IrCOMM 虚拟串行设备(就像你使用 /dev/cua 或其他设备一样)读取,并使用可以被你的适配器+IrDAheader 对看到的遥控器。”

Dag Brattli 的回答:“你谈论的是成为正常的串行端口,但至少我选择 IrDA 不是这样的。我已经将所有设备驱动程序实现为网络设备驱动程序,所以事情有点不同(更面向帧)。设备驱动程序传递 IrDA 帧,目前没有其他内容。

但我不认为我们必须在 IrDA 设备驱动程序上有一个 tty 接口才能支持更多的原始读取和写入。顺便说一句,忘记 IrCOMM 吧,它与这个问题无关。

实际上,我已经为设备驱动程序实现了对原始读取和写入的支持,因为某些适配器需要这样做。”


附录 A. 鸣谢

感谢

* Linux-IrDA 邮件列表的成员。 * 其他 HOWTO 的作者,他们给了我很多灵感。 * SGML-Tools 的开发者,它提供了一些编写 HOWTO 的方法。 * Benny Amorsen * 戴面具的犰狳 * Mathieu Arnold * Fons Botman * Philip Blundell * Dag Brattli - Linux/IrDA 核心团队 * David Burley * Andreas Butz * Edgardo Calabrese > * Andrew Chadwick * Ho Chin Keong * Claudiu Costin * Stefan Dahlke * Thomas Davis - Linux/IrDA 核心团队 * Colin DeWitt * Richard Donkin * Ha Duong Minh * Ales Dryak * K-H. Eischer * Ove Ewerlid * Timo Felbinger * Tollef Fog Heen * Christian Gennerat * Gerhard Gonter * Mike Groeneweg * Bjoern Hansson * Sebastian Henschel * Takahide Higuchi - Linux/IrDA 核心团队 * Jon Howell * Gerd Knorr * Hannes Kurth * Arthur Tyde 和 Bryan Abshier 来自 Linuxcare Inc. * Joonas Lehtinen * Mark Lewis * Florian Lohoff * George MacDonald * Pawel Machek * James McKenzie * Alessio Massaro * Harald Milz * Bjoern Mork * Tang Ning * Rui Oliveira * Igor Pesando * Kurt Pfeifle * Raj Rijhwani * Christian Rishoej * Wessel de Roode * Matthias Schmidt * Markus Schill * Ryan Shillington * Stanislav Sokolov * Richard Titmuss * Jean Tourrilhes * Christian "oftl" Veigl * Carlos Vidal * Lichen Wang * Guenther Wieser * Toni van de Wiel * Ralf Zabka * Christian Zoz

抱歉,我在开始编写 HOWTO 时没有开始记录鸣谢名单,所以可能我忘记了某人。


附录 B. 修订历史

  • v0.1 至 v0.4a,1998 年 3 月 19 日至 1998 年 8 月 4 日,草稿,未包含在 LDP 中

  • v1.0,1998 年 8 月 14 日,发布到 LDP

  • v1.1,1998 年 8 月 18 日,添加了关于 Takahide Higuchi 的 IrCOMM 补丁的信息,小幅更改

  • v1.2,1998 年 8 月 24 日,更新到 linux-irda-1998-08-20 快照,添加了 FIR 部分和修订历史,小幅更改

  • v1.3,1998 年 9 月 27 日,添加了关于多个实例、蜂窝电话、数码相机、Linux 到 Linux 连接、前沿技术 - CVS、省电的部分;通用配置部分的一些更改,硬件调查部分的变化,小幅更改

  • v1.4,1998 年 10 月 11 日,更好地描述了 IrCOMM 支持,适配器连接部分的变化,Palm III 部分的变化,小幅更改

  • v1.5,1998 年 10 月 12 日,小幅更改

  • v1.6,1998 年 10 月 26 日,添加了关于 IrManager 的部分,更新到 linux-irda-1998-10-21 快照,更改了适配器连接部分,小幅更改

  • v1.7,1998 年 11 月 1 日,添加了遥控部分,更改了适配器连接部分,小幅更改

  • v2.0,1999 年 1 月 9 日,几乎完全重写和重新排列,以符合自 2.1.131 版本以来包含在内核中的 Linux/IR 的新结构,在适配器连接部分、配置工具部分和 CVS 部分中添加了关于 BIOS 支持的信息

  • v2.1,1999 年 1 月 13 日,小幅更改

  • v2.2,1999 年 1 月 26 日,项目名称从 Linux/IR 更改为 Linux/IrDA,扩展了故障排除章节,在故障排除章节之后更改了已知错误章节的顺序,删除了一些 lint

  • v2.3,1999 年 2 月 4 日,添加了由 Andreas Butz 编写的关于眼睛安全的章节;拼写检查,Andreas Butz 对内核参数章节的修订和补充信息;小幅更改

  • v2.4,1999 年 2 月 9 日,更改了关于应用补丁文件的信息

  • v2.5,1999 年 3 月 12 日;Linux/IrDA 的新 URL;添加了关于大端支持、irdapingirdadump 和超越 IrDA - 扩展传输距离的章节;改进了笔记本电脑中获取红外端口信息的章节;Fons Botman 为 Windows 章节添加了许多信息;添加了 SMP 章节;添加了关于 Ericsson SH888 的信息;删除了过时的常见问题解答;小幅更改

  • v2.6,1999 年 4 月 6 日,添加了对接站连接、键盘连接和通过串行电缆连接的章节,小幅更改

  • v2.7,1999 年 6 月 11 日,开始编写即将到来的标准(蓝牙和 IrDA)章节,在 GUI 章节中添加了关于 CORBA 的注释,添加了关于诺基亚蜂窝电话的少量信息,添加了附录串行红外端口嗅探器,开始编写 IrDA 网络邻居部分,开始编写 Psion 5 连接章节和附录 C,对 LIRC 章节进行了小幅补充,小幅更改

  • v2.8,1999 年 9 月 20 日,添加了 LiRC 邮件列表,将 <htmlurl ... > 标签更改为 <url ...>,更改了 conf.modules 条目的格式,添加了硬件检测(PCMCIA)的补充,添加了 IrDA 邮件列表,更改了 Linux-IrDA 邮件列表的地址,对多个实例部分进行了小幅补充,添加了法语翻译的 URL,在附录 B 中添加了新的 sersniff,添加了关于预编译软件包的部分,添加了 Palm III 连接到 Thinkpad 600 章节,小幅更改

  • v2.9,1999 年 9 月 21 日,打印机连接章节的更改,拼写检查,添加了与西门子 S25 的连接,小幅更改

  • v2.10,1999 年 11 月 2 日,小幅更改

  • v2.11,2000 年 3 月 9 日,添加了指向 'irctl' 和 'IRManager' 红外控制程序的链接,文档的新基本 URL,Arthur Tyde 和 Linuxcare Inc. 的 Bryan Abshier 提供的从 Linux 连接到 WinCE 的新章节,添加了 IrDA-Java 接口的链接,Guenther Wieser 提供的关于东芝和 IrDA 的 HOWTO 链接,Timo Felbinger 提供的关于连接到 S25 的更多信息,添加了蜂窝电话的 AT 命令链接,新章节代码历史,SH888 电话簿工具的链接,Lichen Wang 提供的 IrDA 协议的简短调查,小幅更改

  • v3.0,2000 年 11 月 5 日,格式更改为 DocBook,许可证更改为 GNU 自由文档许可证 - GFDL,标题从 IR-HOWTO 更改为 Infrared-HOWTO,新文档 URL,Linux/IrDA 的链接已更新

  • v3.1,2000 年 11 月 8 日,链接已更新,更改为 DocBook 3.1

  • v3.2,2001 年 3 月 21 日,删除了对 irmanager、/dev/irnine 和错误设备号的过时引用,应用了根据内核 2.4.x 的更改,进行了广泛的校对和测试,添加了 e-Squirt 的新链接,关于模块选项的新章节,关于空调制解调器连接的新章节,章节重新排序和清理,其他链接已更新

  • v3.3,2001 年 4 月 22 日,包含来自 2.4.3 内核的文档,删除了对过时内容的引用,小幅更改

  • v3.4,2002 年 9 月 4 日,改进了 Linux PDA 章节,其中包含有关 PPP、OpenOBEX、打印等的更多信息,将 irattach 的 -s 选项的新语法应用到适当的部分,重写和改进了 IrDA 和 USB 章节,重写了打印内容,删除了关于 irlpt_server 和 IrLPT 的过时提示,描述了如何使用通用 Unix 打印系统 - CUPS,添加了新的 irda-users 邮件列表地址以及新的存档地址,在新的 GUI 部分中添加了 Gnome IrDA 小程序和 Beamster GTK/Python 的链接,添加了日语翻译的链接,添加了有关一些 LIRC 程序(IR Chooser、IControl、jlirc)的信息,将所有对 URL 的引用更改为超链接,将邮件地址中的所有 @ 更改为 _at_ 以帮助防止垃圾邮件(至少一点点),URL 更正(LDP,..),小幅更改

  • v3.5a,2003 年 3 月 29 日,在 /etc/modules.conf 中添加了新的适配器,添加了 IrCOMM2k 的链接,添加了 LIRC 程序(lircemu、tonto)的链接,添加了一些关于 OBEX 的更多信息,删除了对 setserial 的误导性引用,删除了过时的 IrLAN 内容(irlan_client、irlan_server 模块),添加了关于 IrLAN 当前未维护的警告,更正了 v3.4 的错误发布日期,将所有 URL 从 mobilix.org 更改为 tuxmobil.org 和其他 URL 更正,将整个文档转换为 XML 4.1.2(所有标签现在都是小写,添加了一些结束标签),重新排列了一些章节的顺序(SIR、FIR、适配器),重写了关于手机连接的章节(添加了 scmxx 的链接,添加了通用说明,感谢 Matthias Schmidt),添加了关于连接到 PocketPC 的章节(感谢 Stanislav Sokolov),小幅更改

  • v3.6,2003 年 6 月 15 日,摘要中提到了 PDA,小幅更改

  • v3.7,2005 年 10 月 8 日,Sebastian Henschel 完成了技术和语言审查。修复了许多错误,并更新了许多 URL。删除了一些过时的内容。添加了一些关于内核 2.6 的 Linux/IrDA 的文档(但仍有工作要做)。

  • v3.8,2011 年 10 月 31 日,lircemu 的链接已更改,添加了指向 smartmenu 以及 iowlircemu 的链接和描述。


附录 C. 串行红外端口嗅探器

C.1. Gerd Knorr 的 Sniffer

此程序由 Gerd Knorr 提供。你可以使用它来嗅探通过你的 IrDA 端口的流量,以了解协议的详细信息(如有必要,在源代码中更改默认的 ttyS1)

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <termios.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/ioctl.h>

#define BUFSIZE 1024

int
read_and_print(int fd, int sec, int usec)
{
    int         rc,l,i;
    char        buf[BUFSIZE+1];
    fd_set      set;
    struct timeval  tv;
    
    if (sec || usec) {
    FD_ZERO(&set);
    FD_SET(fd,&set);
    tv.tv_sec  = sec;

    tv.tv_usec = usec;
    if (0 == select(fd+1,&set,NULL,NULL,&tv))
        return -1;
    }
    
    switch (rc = read(fd,buf,BUFSIZE)) {
    case 0:
    printf("EOF");
    exit(0);
    break;
    case -1:
    perror("read");
    exit(1);
    default:
    for (l = 0; l < rc; l+= 16) {
        printf("%04x  ",l);
        for (i = l; i < l+16; i++) {
        if (i < rc)
            printf("%02x ",buf[i]);
        else
            printf("-- ");
        if ((i%4) == 3)
            printf(" ");
        }
        for (i = l; i < l+16; i++) {

        if (i < rc)
            printf("%c",isalnum(buf[i]) ? buf[i] : '.');
        }
        printf("\n");
    }
    break;
    }
    return rc;
}

void
setlines(int fd, int rts, int dtr)
{
    int lines = 0;

    if (rts) lines |= TIOCM_RTS;
    if (dtr) lines |= TIOCM_DTR;
    
    ioctl(fd,TIOCMSET,&lines);
}

int main(int argc, char *argv[])
{
    int         ser,i;
    struct termios      saved_attributes,tattr;
    struct winsize      win;
    char        buf[16];
    
    if (-1 == (ser = open("/dev/ttyS1",O_RDWR))) {

    perror("open /dev/ttyS1");
    exit(1);
    }
    
    /* Set the terminal mode */
    tcgetattr (ser, &tattr);
    cfmakeraw (&tattr);
    cfsetospeed (&tattr,B9600);
    cfsetispeed (&tattr,B9600);
    tcsetattr (ser, 0, &tattr);
    
    setlines(ser,0,0);
#if 0
    tcsendbreak(ser,0);
#endif

    /* main loop */
    fprintf(stderr,"setup done\n");
    while (-1 != read_and_print(ser,30,0)) {
    usleep(100000);
    }
    
    return 0;
}


C.2. sersniff

由 Jonathan McDowell 编写的 sersniff 是一个简单的程序,用于在 2 个串行端口之间进行隧道/嗅探。该程序的编写目的是为了帮助解码诺基亚 9000i Communicator 用于与诺基亚提供的 NServer 软件通信的协议,该软件仅在 Windows 下运行。


附录 D. 红外光和眼睛安全

本节总结了在 Linux/IrDA 邮件列表上交流的一些想法和思考。它在医学上没有充分的依据,任何有更好证据或更可靠信息来源的人都鼓励将其贡献给本 HOWTO。

IrDA 规范指出,出于眼睛安全的考虑,IrDA 设备的范围已限制为 1 米。另一个合理的假设是,功耗和红外污染/串扰是造成这种限制的原因。原则上,眼睛可能存在危险,因为红外光不会被眼睛感知到,因此瞳孔不会闭合以保护视网膜免受明亮的红外光源的伤害。这与紫外线的情况相同,最终会导致雪盲症,但与紫外线相比,红外光由于其较长的波长,包含的有害能量要少得多。

我们在网上找到的唯一法律限制和医疗建议都与热灯或焊接过程中红外线的发射以及 IEC 825-1 (CENELEC EN60825-1) 有关。这表明 IrDA 设备发射的红外光是无害的,因为即使是强红外 LED 发射的峰值功率(约 300mW)也比医用红外热灯(高达 500W)发射的功率低几个数量级。然而,对于这些热灯,你应该佩戴防护眼镜,所以也许如果你直视 1,000 个红外 LED 同时闪烁,你也应该这样做。然而,红外光的效果主要是热,而不是改变或破坏生物细胞结构,例如紫外线造成的破坏。尽管在 HP OmniBook 800 的规格中,Hewlett-Packard 建议不要直接注视红外 LED。

如上所述,此讨论仅基于猜测和关于在红外 LED 和热灯规格中发现的数据的常识性假设。如果任何具有更好医学知识的人可以对此发表评论,请这样做!


附录 E. 版权、免责声明、商标

E.1. 免责声明和商标

这是免费文档。发布它的目的是希望它有用,但不作任何保证。本文档中的信息在我所知的范围内是正确的,但总是有可能我犯了一些错误,所以不要盲目地遵循一切,尤其是当它看起来是错误的时候。这里的内容不应对你的计算机产生有害影响,但以防万一,对于因使用本文档中包含的信息而造成的任何损害,我不承担任何责任。

尽管我希望商标有时是多余的(你可以在 开源定义 中看到我的意思),但我声明:如果某些词语是商标,上下文应明确说明它们属于谁。例如,“MS Windows NT”意味着“Windows NT”属于微软 (MS)。“Mac”是苹果电脑公司的商标。制造商和销售商用来区分其产品的许多名称都被声明为商标。在本书中出现这些名称的地方,并且我知道有商标声明,这些名称已以大写或首字母大写形式印刷。所有商标均属于其各自所有者。


E.2. 版权

对于所有章节,均授予复制、分发和/或修改本文档的许可,但须遵守自由软件基金会发布的 GNU 自由文档许可证 1.1 版或任何更高版本的条款;不变部分为“序言”和“鸣谢”,封面文本为“Linux 红外 HOWTO”,封底文本为“关于文档和作者”部分。许可证的副本包含在题为“GNU 自由文档许可证”的部分中。


E.3. GNU 自由文档许可证 - GFDL

1.1 版,2000 年 3 月

版权所有 (C) 2000 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 允许任何人复制和分发本许可证文档的完整副本,但不允许更改它。


E.3.1. 0. 序言

本许可证的目的是使手册、教科书或其他书面文档在自由意义上“自由”:确保每个人都有效地自由地复制和再分发它,无论是否进行修改,无论是商业用途还是非商业用途。其次,本许可证为作者和出版商保留了一种为其工作获得赞誉的方式,同时不被视为对他人所做的修改负责。

本许可证是一种“copyleft”,这意味着文档的衍生作品本身也必须在相同的意义上是自由的。它补充了 GNU 通用公共许可证,后者是为自由软件设计的 copyleft 许可证。

我们设计本许可证是为了将其用于自由软件的手册,因为自由软件需要自由文档:一个自由程序应该附带提供与软件相同自由的手册。但是,本许可证不仅限于软件手册;它可以用于任何文本作品,无论主题是什么,也无论是否作为印刷书籍出版。我们主要为以指导或参考为目的的作品推荐本许可证。


E.3.2. 1. 适用性和定义

本许可证适用于任何手册或其他作品,其中包含版权持有者放置的声明,说明它可以根据本许可证的条款分发。“文档”(下文)指的是任何此类手册或作品。任何公众成员均为被许可人,并被称为“你”。

文档的“修改版本”是指任何包含文档或其一部分的作品,无论是逐字复制,还是经过修改和/或翻译成另一种语言。

“次要章节”是指文档的已命名附录或前言部分,该部分专门处理文档的出版商或作者与文档的总体主题(或相关事项)的关系,并且不包含可能直接属于该总体主题范围内的任何内容。(例如,如果文档部分是数学教科书,则次要章节可能不解释任何数学。)这种关系可能是与主题或相关事项的历史联系,或者是关于它们的法律、商业、哲学、伦理或政治立场。

“不变部分”是指某些次要章节,其标题在声明文档根据本许可证发布的声明中被指定为不变部分的标题。

“封面文本”是指在声明文档根据本许可证发布的声明中列出的某些简短文本段落,作为封面文本或封底文本。

文档的“透明”副本是指机器可读副本,以规范公开可用的格式表示,其内容可以使用通用文本编辑器或(对于由像素组成的图像)通用绘图程序或(对于绘图)一些广泛可用的绘图编辑器直接且直接地查看和编辑,并且适合输入到文本格式化程序或自动翻译为各种适合输入到文本格式化程序的格式。以其他透明文件格式制作的副本,其标记旨在阻止或劝阻读者随后进行修改,则不是透明的。不是“透明”的副本称为“不透明”。

透明副本的合适格式示例包括没有标记的纯 ASCII、Texinfo 输入格式、LaTeX 输入格式、使用公开可用的 DTD 的 SGML 或 XML,以及为人工修改设计的符合标准的简单 HTML。不透明格式包括 PostScript、PDF、只能由专有文字处理器读取和编辑的专有格式、DTD 和/或处理工具通常不可用的 SGML 或 XML,以及某些文字处理器仅为输出目的而生成的机器生成的 HTML。

“标题页”对于印刷书籍是指标题页本身,加上容纳本许可证要求出现在标题页中的材料所需的所有后续页面。对于没有标题页格式的作品,“标题页”是指作品标题最突出显示附近的文本,位于正文文本的开头之前。


E.3.3. 2. 逐字复制

你可以在任何介质中复制和分发文档,无论是商业用途还是非商业用途,前提是在所有副本中复制本许可证、版权声明以及说明本许可证适用于文档的许可证声明,并且你没有在本许可证的条款中添加任何其他条件。你不得使用技术措施来阻碍或控制你制作或分发的副本的阅读或进一步复制。但是,你可以接受报酬以换取副本。如果你分发足够大量的副本,你还必须遵守第 3 节中的条件。

你也可以在上述相同条件下借出副本,并且你可以公开展示副本。


E.3.4. 3. 批量复制

如果您出版的文件印刷份数超过 100 份,且该文件的许可声明要求提供封面文字,则您必须将这些副本套上封面,并在封面上清晰且易读地载明所有这些封面文字:在封面上载明正面封面文字,在封底上载明背面封面文字。两个封面还必须清晰且易读地标明您是这些副本的出版商。封面正面必须以同等突出和可见的方式呈现完整标题的所有文字。您可以在封面上添加其他材料。对于仅限于封面的更改的复制,只要这些更改保留了文件的标题并满足这些条件,在其他方面可以被视为完全复制。

如果任一封面的所需文字过多而无法清晰地容纳,您应将首先列出的文字(尽可能多地合理容纳)放在实际封面上,并将其余文字延续到相邻页面上。

如果您出版或发行份数超过 100 份的不透明副本,您必须随每份不透明副本附带一份机器可读的透明副本,或者在每份不透明副本中或随附声明一个公众可访问的计算机网络位置,其中包含该文件的完整透明副本,不含任何附加材料,供使用公共标准网络协议的普通网络用户匿名免费下载。如果您使用后一种选择,您必须采取合理谨慎的措施,当您开始大量发行不透明副本时,确保该透明副本在所述位置保持可访问状态,至少到您向公众发行该版本的最后一份不透明副本(直接或通过您的代理商或零售商)之后一年为止。

建议(但非强制要求)您在重新发行大量副本之前与文件作者联系,让他们有机会向您提供文件的更新版本。


E.3.5. 4. 修改

您可以根据以上第 2 节和第 3 节的条件复制和发行修改版本的文件,前提是您完全按照本许可证发布修改版本,并使修改版本承担文件的角色,从而将修改版本的发行和修改许可给拥有其副本的任何人。此外,您必须在修改版本中执行以下操作:

A. 在标题页上(以及封面上,如果有的话)使用与文件标题以及先前版本标题不同的标题(如果先前存在任何版本,则应在文件的“历史”部分中列出)。如果该版本的原始出版商给予许可,您可以使用与先前版本相同的标题。

B. 在标题页上,将修改版本中修改的作者的一个或多个人或实体,以及文件的至少五位主要作者(如果文件少于五位主要作者,则列出所有主要作者)列为作者。

C. 在标题页上,将修改版本的出版商名称声明为出版商。

D. 保留文件的所有版权声明。

E. 在其他版权声明旁边添加适用于您的修改的版权声明。

F. 在版权声明之后立即包含许可证声明,以授予公众根据本许可证条款使用修改版本的许可,格式如下文附录所示。

G. 在该许可证声明中,保留文件中给出的不变章节和要求的封面文字的完整列表。

H. 包含本许可证的未更改副本。

I. 保留题为“历史”的章节及其标题,并在其中添加一项,至少说明标题页上给出的修改版本的标题、年份、新作者和出版商。如果文件中没有题为“历史”的章节,则创建一个章节,说明标题页上给出的文件的标题、年份、作者和出版商,然后添加一项,描述上一句中说明的修改版本。

J. 保留文件中给出的用于公众访问文件透明副本的网络位置(如果有),以及文件中给出的其所基于的先前版本的网络位置。这些可以放在“历史”章节中。您可以省略早于文件本身至少四年发布的作品的网络位置,或者如果其引用的版本的原始出版商给予许可。

K. 在任何题为“致谢”或“题献”的章节中,保留该章节的标题,并保留该章节中给出的每位贡献者致谢和/或题献的所有实质内容和语气。

L. 保留文件的所有不变章节,其文本和标题均不得更改。章节编号或等效内容不被视为章节标题的一部分。

M. 删除任何题为“背书”的章节。修改版本中不得包含此类章节。

N. 请勿将任何现有章节重新命名为“背书”,或使其标题与任何不变章节冲突。

如果修改版本包含符合次要章节条件且不包含从文件中复制的材料的新前言章节或附录,您可以选择将其中一些或全部章节指定为不变章节。为此,请将它们的标题添加到修改版本的许可证声明中的不变章节列表中。这些标题必须与任何其他章节标题不同。

您可以添加题为“背书”的章节,前提是该章节仅包含各方对您的修改版本的背书,例如,同行评审声明或文本已被某个组织批准为标准的权威定义。

您可以添加最多五个单词的段落作为正面封面文字,以及最多 25 个单词的段落作为背面封面文字,添加到修改版本中封面文字列表的末尾。任何一个实体(或通过其安排)只能添加一个正面封面文字段落和一个背面封面文字段落。如果文件已包含由您或由您代表的同一实体安排先前添加的相同封面的封面文字,则您不得添加另一个;但是,您可以替换旧的封面文字,但需获得添加旧封面文字的先前出版商的明确许可。

文件作者和出版商不通过本许可证授予使用其姓名进行宣传或声明或暗示对任何修改版本的认可的许可。


E.3.6. 5. 合并文件

您可以根据上述第 4 节中针对修改版本的条款,将文件与其他根据本许可证发布的文件合并,前提是您在合并作品中包含所有原始文件的所有不变章节(未修改),并将它们全部列为合并作品的许可证声明中的不变章节。

合并作品只需包含本许可证的一份副本,并且可以将多个相同的不变章节替换为一份副本。如果有多个同名但内容不同的不变章节,请在每个此类章节的标题末尾加上括号,注明该章节的原始作者或出版商的姓名(如果已知),否则注明一个唯一编号。对合并作品的许可证声明中的不变章节列表中的章节标题进行相同的调整。

在合并作品中,您必须合并各个原始文件中题为“历史”的任何章节,形成一个题为“历史”的章节;同样合并任何题为“致谢”的章节和任何题为“题献”的章节。您必须删除所有题为“背书”的章节。


E.3.7. 6. 文件汇编

您可以创建一个汇编,其中包含文件和其他根据本许可证发布的文件,并将各个文件中的本许可证的单独副本替换为汇编中包含的单个副本,前提是您在所有其他方面都遵守本许可证关于完全复制每个文件的规则。

您可以从此类汇编中提取单个文件,并根据本许可证单独发行,前提是您在提取的文件中插入本许可证的副本,并在完全复制该文件的所有其他方面都遵守本许可证。


E.3.8. 7. 与独立作品的聚合

将文件或其衍生作品与其他单独且独立的文件或作品汇编在存储或发行介质的卷中或卷上,作为一个整体不计为文件的修改版本,前提是不对该汇编声明汇编版权。此类汇编称为“聚合”,并且如果与文件汇编在一起的其他独立作品本身不是文件的衍生作品,则本许可证不适用于这些作品,因为它们是这样汇编在一起的。

如果第 3 节的封面文字要求适用于文件的这些副本,那么如果文件小于整个聚合的四分之一,则文件的封面文字可以放在仅围绕聚合内文件的封面上。否则,它们必须出现在围绕整个聚合的封面上。


E.3.9. 8. 翻译

翻译被视为一种修改,因此您可以根据第 4 节的条款发行文件的翻译版本。用翻译版本替换不变章节需要获得其版权持有者的特别许可,但您可以除了包含这些不变章节的原始版本外,还包含其中一些或全部不变章节的翻译版本。您可以包含本许可证的翻译版本,前提是您还包含本许可证的原始英文版本。如果本许可证的翻译版本与原始英文版本之间存在歧义,则以原始英文版本为准。


E.3.10. 9. 终止

除非本许可证明确规定,否则您不得复制、修改、再许可或发行文件。任何其他复制、修改、再许可或发行文件的尝试均无效,并将自动终止您在本许可证下的权利。但是,根据本许可证从您那里收到副本或权利的当事方,只要这些当事方保持完全合规,其许可证就不会终止。


E.3.11. 10. 本许可证的未来修订

自由软件基金会可能会不时发布 GNU 自由文档许可证的新修订版本。这些新版本在精神上将与当前版本相似,但在细节上可能会有所不同,以解决新的问题或疑虑。请参阅 copyleft

许可证的每个版本都给出了一个区分版本的编号。如果文件指定本许可证的特定编号版本“或任何后续版本”适用于它,您可以选择遵循该指定版本或自由软件基金会已发布的任何后续版本(非草案)的条款和条件。如果文件未指定本许可证的版本号,您可以选择自由软件基金会曾经发布的任何版本(非草案)。