IrDA USB 驱动程序包含在最新的 2.4 内核中。它不如其他 FIR 硬件高效,但至少受到支持,并且相对容易使其工作。此外,目前所有产品都基于相同的硬件,并且我们了解它的大部分错误。
据我所知,Actisys 2000U 和 Extended System ESI-9685 加密狗似乎基于相同的硬件。这两款 USB 加密狗都能与 Linux 驱动程序良好工作。在一个盒子里可以使用多个 USB 加密狗(目前最多 4 个)。
最新版本的驱动程序已经过 usb-uhci 和 usb-ohci 测试。另请参阅 src 中的驱动程序信息,例如 USB 2.0
有一个 USB IrDA 桥接设备规范 Rev 0.9B,它正在被采纳为 USB 类规范。您可以在 USB.org 的 0.9 类规范标题下找到它。
最近,市场上出现了一种来自 SigmaTel 的新型 USB 加密狗,它 _不_ 符合 IrDA-USB 规范,因此无法与此驱动程序一起工作。另一方面,SigmaTel 提供了 完整的技术规范,因此为它编写驱动程序是可能的。
我已在此环境下检查过本章:ACTiSYS ACT-IR2000U FIR-USB 适配器(但它应该适用于任何其他 USB 加密狗,除了上面提到的那款),内核 2.4.19,irda-utils 0.9.14 和 Debian GNU/Linux 3.0 Woody。
您需要一个具有适当 IrDA 和 USB 支持的内核,以及以下文件中的标准条目/etc/modprobe.conf(kernel 2.6)/etc/modules.conf(kernel 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 驱动程序)。
![]() | 请注意,还有另一个 USB IrDA 驱动程序(由 Linux USB Project 提供)用于这些设备,名为 ir-usb。此模块与 IrDA 堆栈 _不_ 兼容,并且与 irda-usb 冲突。因为它总是首先加载,所以您必须完全删除 ir-usb。 |
如果您不熟悉路由问题,我建议在首次设置期间使用 ifconfig 关闭所有外部网络接口。然后使用 route -n 检查。此外,网络过滤 (iptables) 可能会导致问题,因此如果您未连接到网络,则可以禁用它。
我已经详细描述了该过程,以尽可能清楚地说明每个注意事项。实际配置要简短得多且更容易。在配置期间,我将选择打开三个不同的终端窗口来查看来自不同程序的日志消息。
现在插入加密狗并使用 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) |
现在您已准备好将 Linux/IrDA 服务附加到加密狗。使用 irattach irda1 -s (请注意上一步中的设备名称)。
适配器上的绿色 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) |
现在加载 IrCOMM 模块(请注意,如果您通过 IrDA 启动 PPP 或打印,这通常由内核守护程序 kmod 自动完成,但对于第一次,我们手动执行操作)。因此,执行 modprobe ircomm 和 modprobe 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] |
您可以使用命令行选项启动 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 |