> Date: Mon, 25 Mar 2024 19:47:31 -0400 > From: Greg Troxel <g...@lexort.com> > > Jason Thorpe <thor...@me.com> writes: > > > I should be able to do this with OpenOCD (pkgsrc/devel/openocd), but > > libfdti1 fails to find the device because libusb1 only deals in > > "ugen". > > Is that fundamental, in that ugen has ioctls that are ugen-ish that > uftdi does not? I am guessing you thought about fixing libusb1.
It is possible that we could kludge some horrible hacks into ucom(4) to pass /dev/ttyU* ioctls through to uftdi(4), but not all USB drivers even have a /dev node that could be hacked up in that way. Really, there is a general fundamental limitation with NetBSD's USB stack: user programs have no way to take over USB devices from kernel drivers. We should really expose a /dev/ugen* instance for _every_ USB device; those that have kernel drivers attached have only limited access via /dev/ugen* (no reads, writes, transfer ioctls, &c.), until you do ioctl(USB_KICK_OUT_KERNEL_DRIVER) or whatever, at which point the kernel driver will detach and the user program can take over instead and use the full ugen(4) API. This is how it works in other systems like Linux with USBDEVFS_CLAIMINTERFACE, and that's the model that libusb is built around. It's a nontrivial change to our USB stack requiring some care to get right, but this is far and away the biggest shortcoming of our USB stack and we should unquestionably do it.