As Dave N6NZ wrote:
Stretching the time-out value passed by avrdude causes the failure
to take longer, so it would seem that the time out is legitimate.
I'm thinking that there is a basic connectivity issue in the USB
configuration someplace.
If it were connectivity, it couldn't get as far as reading the string
entries from the device, like the serial number:
avrdude: jtagmkII_open()
avrdude: usbdev_open(): Found JTAGICE mkII, serno: 00A000004986
This rings a bell... I continually had to fix libusb in the FreeBSD
port to allow for "short" transfers, i. e. to accept the device
returning less bytes than requested. Maybe that's your problem as
well? Did they add some API in the new version to allow to pass this
``short transfer is OK'' down from the upper layer?
OTOH, it fails similarly to your problem on that Linux laptop at my
employer, while it works (IMHO using the same libusb version) on the
Linux desktops. Also, the FreeBSD glue in libusb is vastly different
from the Linux glue layer, and the libusb authors appear to know about
the details of Linux' USB pretty well, while they admit in the
preamble of the BSD glue layer that they only wrote that part based on
man pages. So it's not surprising they might have missed a detail or
two in the BSD implementation.
Again, I suggest you get in contact with the libusb developers for
that. Note there's a function called usb_set_debug(int level),
supposedly you could make libusb talk a lot more about what it's
currently doing that way.