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. 预编译软件包

Debian/GNU Linux 自 Potato 版本以来提供了一个 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 (然后它加载在/etc/modules.conf)

中别名为 “irda0” 的模块 如果您是少数幸运拥有受支持的 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 项目的总体目标是制作对象交换 (OBEX) 协议的开源实现。OBEX 是一种会话协议,可以最好地描述为二进制 HTTP 协议。OBEX 内置于 PDA(如 Palm Pilot)和手机(如 Ericsson R320、Siemens S25、Siemens S45、Siemens ME45、Nokia NM207 和 Nokia 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)接口均可用。