背景:由于硬件过时,我目前正在将工业 PC + 软件从 Debian 4 (etch) 更新到 Debian 7 (Wheezy),新旧系统之间共享的少数硬件之一是 Sunix 5008 并行系统港口。我们使用并行端口通过低级驱动程序与一些自定义硬件进行通信。
问题:尽管驱动程序已被检测到并/dev/parport2
创建,并且可以使用我们的软件成功打开和写入,但当我们将示波器连接到并行端口上的某些引脚时,我们没有得到任何输出,因为同一应用程序在旧安装上提供了输出。我们已经通过驱动程序追踪到了 outb() 调用,没有任何地方报告错误。
以下 dmesg 摘录显示已找到端口并且驱动程序已正确安装
[ 7.429893] ===================== SUNIX Device Driver Module Install =====================
[ 7.429899]
[ 7.429902] SNX Info : Loading SUNIX Multi-I/O Board Driver Module
[ 7.429908] -- Date : 2011/08/15
[ 7.429915] -- Version : 1.3.3.0
[ 7.429918]
[ 7.431041]
[ 7.431047] SNX Info : Found SUNIX 5008 Series Board (1P),
[ 7.431053] bus number:6, device number:4
[ 7.431056]
[ 7.431079] Trying to free nonexistent resource <000000000000d120-000000000000d127>
[ 7.431087] Trying to free nonexistent resource <000000000000d120-000000000000d122>
[ 7.431094] Trying to free nonexistent resource <000000000000d123-000000000000d127>
[ 7.431101] Trying to free nonexistent resource <000000000000d110-000000000000d117>
[ 7.431108] Trying to free nonexistent resource <000000000000d110-000000000000d112>
[ 7.431115] Trying to free nonexistent resource <000000000000d113-000000000000d117>
[ 7.438603] SNX Info : parport2 - PC-style at 0xd120 (0xd110)
[ 7.438859] SNX Info : lp2 port using parport2 (polling).
[ 7.438866] ================================================================================
这种情况Trying to free nonexistent resource *
也发生在我们的旧版本上
有趣的观察:
在较旧的工作机器上,lsmod
给出了以下内容的摘录
Module Size Used by
...
snx 89764 4
parport_pc 22884 0
ppdev 3588 0
parport 19240 2 parport_pc,ppdev
在较新的机器上,摘录lsmod
给出了
Module Size Used by
...
snx 99449 2
parport_pc 22036 0
ppdev 12651 0
parport 31254 2 ppdev,parport_pc
这里要注意的关键是在较新的机器中 snx 仅由 2 个设备而不是 4 个设备使用,所以我不知道这是否表明初始化问题
答案1
进一步研究后发现,这是由于驱动程序仅部分实现,关键的 ioctl 似乎已被删除。