如果您遇到问题,请尝试以下操作:
阅读下面的 FAQ 部分。
查看 /var/log/messages 和/或 /var/log/kern。
执行 dmesg。
查看以下目录中的不同文件:/proc/irda.
如果您发现 Bug,请发送 Bug 报告到邮件列表,包括 dmesg 输出,以及您使用的 Linux 版本和硬件。谢谢!
有时 IrCOMM 连接失败,尤其是在两个设备互相发现时。您可以使用 echo 0 >/proc/sys/net/irda/discovery 禁用发现。
无法通过 IrCOMM 在两台 Linux 机器之间传输 CR(回车)字符,使用 cat file >/dev/ircomm0 和 cat /dev/ircomm0。 这会导致奇怪的事情并冻结您的 Linux 系统。
IrOBEX 可能会在接收时丢失一些数据。该 Bug 很可能在 IrOBEX 的用户空间端。
虽然我不是一个黑客高手,但我收集了一些技巧来跟踪 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 可能会有所帮助。但我没有能够尝试这个。
“您现在可以更改使用的发现数据包的数量(1、6、8 或 16)以及发送它们之间超时时间(2-8 * 10 毫秒),在 /proc/sys/net/irda 中。如果您在发现设备时遇到问题,请进行实验。我的 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 声卡每秒给我几百次中断! 我从我的内核中删除了声音 stuff,现在机器通常快了大约 4 倍! 如果您在机器上运行 esound 服务器 (esd),Linux/IrDA 可能会遇到问题。 我的两台机器,一台 166Mhz Pentium 笔记本电脑和一台 200Mhz Pentium Pro,在 esd 运行时都无法运行 Linux/IrDA。 原因是 esd 使声卡每秒发出超过 300 次中断,这使得串行驱动程序在接收时溢出。 这是因为串行驱动程序现在在 Linux-2.2 中使用慢速中断(在 2.2 中一切都是慢速中断),因此中断处理程序在其退出时进行调度。 慢速中断的好处是数据包传递速度更快,因为您不需要等待下一个定时器滴答。 唯一的例外是 pc87108 驱动程序,它工作正常,因为它使用 DMA,并且每个数据包只会产生几个中断。
还有一些用户空间工具 irdaping 和 irdadump 用于检查 Linux/IrDA 连接。
据我所知,可以使用 IrCOMM 通过红外设备或串行电缆。 这也可能提供一些调试的可能性。
1) 您可以编辑 /etc/conf.modules,添加以下行: option irda irda_debug=3 2) 确保 irda 模块已完全移除。 3) 编辑 /etc/syslog.conf,添加以下行
*/* -/var/log/all |
对于某些 ThinkPad 型号,您必须重启到预装的 M$ OS 并使用 Thinkpad 工具激活 IrDA 端口。 目前没有 Linux 工具可以实现这一点。 这将禁用您的内部串行端口 (ttyS0)! DOS 工具是 PS2.EXE,据我所知 tpctl 无法实现这一点。 使用此 DOS 程序启用 IrDA 非常重要。 使用 Microsoft-Windows 工具不起作用。 如果不这样做,驱动程序会正确加载,一切看起来都正常,但 LED 不够亮。
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"。
scanport 可用于获取芯片的正确设备 ID。 它是 hwtools 包的一部分(在 Debian 上,可能在其他地方也一样)。 您只需输入它,它就会扫描从 0x100 到 0x400 的 I/O 端口 - 通常的 ISA 范围。 在 0x400 以上是 0x400 以下设备的阴影,再往上是 PCI 设备,因此默认情况下不扫描 0x400 以上。“无论如何,我不得不手动扫描使用 inb 来找到我的芯片的 I/O。 幸运的是,我不需要走太远就能找到它。(较新的声卡通常位于 0x530 左右,0x220 保留用于旧版兼容模式) 通常,如果您知道某个设备的位置,您只需将驱动程序指向它,驱动程序就会探测以查看它是否是驱动程序期望的设备。 这不是完全安全的,但比每个驱动程序探测每个 I/O 端口寻找它认为可以理解的东西要安全得多。 scanport 只进行读取,这通常是安全的。”