Access a USB device connected to the TX2 over Ethernet


I’m looking to expose the USB port to be accessible over the native ethernet port of the TX2.

I have a software installed on a windows server on the same network as the TX2. The TX2 is in a remote location without keyboard, mouse or monitor. I’m wondering if I could configure the TX2 such that I can directly access the USB device from the windows server.


That depends what you mean, and it also depends on the USB device. Do you mean to have a program which goes over ethernet and accesses the device as if it is local USB to the Windows machine? That’s possible, but it is extremely involved.

If you mean to have a port on the Jetson, which plugs into the USB of the Windows machine (not via ethernet), then it depends more on the nature of the device.

Can you give more exact details of what the device is (such as whether it is a “standard” device using “standard” drivers? For example, a mouse, keyboard, data storage device, or camera will mostly be using standard drivers from a “standard class”, but some cameras will use a custom driver for control, and some devices require custom drivers from the manufacturer. The exact nature and what cable connects where is important as to just how much trouble this would be.

Thanks for your reply.

It would be a program that goes over ethernet and access the device as if it is local USB to the Windows machine. The device is an FTDI chip RS485 to USB converter. The RS485 to USB converter is used to interface between the USB port of the carrier board of the TX2 and the other serial board we need to control.


Is it correct that your USB serial UART has RS485 protocol support, and that the Jetson (and perhaps more devices) are using the UART wiring, while the USB end needs to reach the Windows computer? Or is it the reverse, whereby the USB goes to the Jetson, and the TX/RX and other wires need to reach Windows?

The USB connects to the Jetson Tx2 while the UART wiring connects to the other device.

Ideally I would have installed the program on the Jetson and run it from the Jetson to control the other device. But, firstly the program is a windows software and we can only use the software from a GUI. Secondly the Jetson is in a remote location and is connected to the windows server via the ethernet. Hence why I’m looking for a way to expose the USB port of the Jetson over the ethernet to make it seem like the USB is connected locally to the windows machine.

If you monitor “dmesg --follow” on the Jetson, and then plug in the USB device, what log lines are added from the USB plug-in? Is it correct that this device already functions on the Jetson the way you want it to when connecting to the other device over UART, and that only connectivity to the Windows system is in question?

I can’t say for certain, but I think there are some USB-to-ethernet devices used by some server farms and data centers already which do this. Basically, you plug it in to USB, and then the ethernet into the device. These would have drivers at the Windows side.

To export this one device to ethernet would be possible, but it would be some seriously difficult work. You’d then also need to develop your own driver on Windows.

Regarding devices already set up for converting USB over ethernet, this might still not be enough. I say this because most of the software for creating virtual USB devices will only work with “standard” devices (devices using standard drivers, e.g., HID class such as keyboard/mouse, mass storage class such as USB hard drives, so on). Serial UARTs (regardless of a PHY that is RS232 or RS485) are not standard. Those devices quite often have a driver already installed since they are so common, but they are specific to the chipset (FTDI is likely the most common). This means it is a custom driver, and one might need the driver source code to modify to expose it to a networking program (perhaps not too difficult on the Linux side if you have driver source code, but it still would not be “simple”).

Instead of exposing this as a USB device over ethernet you might consider writing software on the Jetson which simply works with the device with the ability to pipe a network connection to/from the device. I’m not sure about the RS485 additions since I don’t have any RS485 devices, but if it were just RS232 then it would read or write to a device special file (with ioctl calls if you need to administrate the device, e.g., to change RTS/CTS modes or change baud rates). I don’t have any RS485 devices, so I can’t tell you how it deals with multiple device addresses from the user space software side (maybe it has more than one device special file, or maybe it uses an ioctl call to switch device address, don’t know).

It is possible to write a program on Windows which looks like a serial UART, and have a program like PuTTY talk to it and not care whether it is virtual or physical. It won’t be easy and you’ll need to know how to write drivers on Windows. Perhaps it is just user space software on Linux.

I can’t vouch for this, but it might be of interest:
(keep in mind that the Linux side software requires 64-bit ARM architecture)