我有一台非常旧的三星 SCX-3205 打印机/复印机/扫描仪。它扫描良好,工作正常。但是,当我使用 CUPS 打印时,它会停止扫描。打印后第一次运行“scanimage -L”时,设备仍在那里,但下次运行时它就找不到它了。
我已经进行了 strace 检查了差异:
非工作情况:
ppoll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=8, events=POLLOUT}], 3, {tv_sec=60, tv_nsec=0}, NULL, 8) = 1 ([{fd=6, revents=POLLIN}], left {tv_sec=59, tv_nsec=4341630})
ioctl(8, USBDEVFS_DISCARDURB, 0x55933dbfb0) = 0
timerfd_settime(6, 0, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=0, tv_nsec=0}}, NULL) = 0
ppoll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=8, events=POLLOUT}], 3, {tv_sec=60, tv_nsec=0}, NULL, 8) = 1 ([{fd=8, revents=POLLOUT}], left {tv_sec=59, tv_nsec=999980518})
ioctl(8, USBDEVFS_REAPURBNDELAY, 0x7fc9c97a50) = 0
timerfd_settime(6, 0, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=0, tv_nsec=0}}, NULL) = 0
ioctl(8, USBDEVFS_REAPURBNDELAY, 0x7fc9c97a50) = -1 EAGAIN (Resource temporarily unavailable)
ioctl(8, USBDEVFS_CLEAR_HALT, 0x7fc9c97cb4) = 0
ioctl(8, USBDEVFS_CLEAR_HALT, 0x7fc9c97eb4) = 0
ioctl(8, USBDEVFS_CLEAR_HALT, 0x7fc9c97eb4) = 0
ioctl(8, USBDEVFS_RELEASEINTERFACE, 0x7fc9c97e5c) = 0
工作案例:
ppoll([{fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=8, events=POLLOUT}], 3, {tv_sec=60, tv_nsec=0}, NULL, 8) = 1 ([{fd=8, revents=POLLOUT}], left {tv_sec=59, tv_nsec=999981204})
ioctl(8, USBDEVFS_REAPURBNDELAY, 0x7ff3d45d80) = 0
timerfd_settime(6, 0, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=0, tv_nsec=0}}, NULL) = 0
ioctl(8, USBDEVFS_REAPURBNDELAY, 0x7ff3d45d80) = -1 EAGAIN (Resource temporarily unavailable)
ioctl(8, USBDEVFS_CLEAR_HALT, 0x7ff3d461e4) = 0
ioctl(8, USBDEVFS_CLEAR_HALT, 0x7ff3d461e4) = 0
ioctl(8, USBDEVFS_RELEASEINTERFACE, 0x7ff3d4618c) = 0
因此,我可以看到,在失败的情况下,混合中存在额外的 ppoll(“fd=6, revents=POLLIN”)。FD 来自这里:
timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC|TFD_NONBLOCK) = 6
我在 Raspberry Pi 4 Model B Rev 1.1 上运行 Alpine Linux 3.15.0。