USB device automatic RNDIS driver selection by Windows host

Dear Toradex Developer Community,

with TorizonCore 5.4.0 and a configuration file to enable Ethernet-over-USB via gadget/sysfs very similar to the one in this other post, I am able to communicate with a Windows host using RNDIS driver, but I still have to select it manually on the Windows PC (Device Manager > Unknown device > Update driver > Browse manually > Network adapters > Microsoft > Remote NDIS compatible device).

On the other hand, I know Toradex Easy Installer is configured well enough so that Windows is able to select automatically the driver and the Ethernet-over-USB interface goes up without manual driver selection on each board-PC pair.

I had a look at and compared the /sys/kernel/config/usb_gadget/ folders on my setup and TEZI, but I have not understood which settings is critical for that Win driver mechanism. Mine is very similar to the one in the post linked above.

Do you have any suggestion to fix that?
Thanks and best regards,

Hi @ldvp !

Can you please share your exact Windows version and build number?

Best regards,

Hi @henrique.tx !
Thanks in advance for the attention and the support, I have observed the exact same issue on several different Windows 10 builds along the last 12 months. For example I am currenty running:
OS Name = Microsoft Windows 10 Pro
Version = 10.0.19043 Build 19043

On the other hand, the Toradex Easy Installer was always inducing the correct driver to be picked automatically by Windows. I have tried to reconstruct the configuration steps by TEZI v2.0b6 but I think they are hardcoded in this executable:

grep -r grndis /usr

I imagine that executable is “core” of TEZI and configures the RNDIS interface very well, but it is closed-source proprietary by Toradex according to this comment in the community. It is referenced by open source Yocto layer (link), but internal-only (link).

To setup the RNDIS interface the same way, could you provide a little extract of the steps by that application?


Hi @ldvp !

Could you please share the configurations you made?

Seems like the question that you referenced (Enabling USB Client feature in Torizon - #9 by MikeS) solved the issue there.

Also, please take a look at this: Multifunction Composite Gadget — The Linux Kernel documentation. Maybe the information and links there can help you.

Best regards,

Hi @henrique.tx !
Thanks for the answer and the links. Yes of course, you can find my configuration below the signature. It is quite similar to the post you have mentioned. I also had a look at the kernel documentation, as a next step I will dive into it if you cannot find a difference between your closed-source TEZI configuration and mine.

cd /sys/kernel/config/usb_gadget/
mkdir grndis
cd grndis

# Toradex vendor and product id
echo 0x1b67 > idVendor
echo 0x4026 > idProduct

#  English language strings
mkdir strings/0x409
echo "MYCOMP" > strings/0x409/manufacturer
echo "MYPROD" > strings/0x409/product
echo "MYSNUM" > strings/0x409/serialnumber

# Configuration
mkdir configs/RNDIS.1
echo 5 > configs/RNDIS.1/MaxPower
mkdir configs/RNDIS.1/strings/0x409
echo "RNDIS" > configs/RNDIS.1/strings/0x409/configuration
mkdir functions/rndis.usb0 # use default parameters
ln -s functions/rndis.usb0 "configs/RNDIS.1/RNDIS Function"

# Enable this configuration
# To disable: echo "" > UDC
echo "ci_hdrc.0" > UDC

ifconfig usb0 up

Hi @ldvp,
The key for me to making Windows load the RNDIS driver automatically without using an INF file was to set the USB class, subclass and protocol to the values that Windows 10 expects an RNDIS device to use, as shown below.

echo "EF" > functions/rndis.usb0/class
echo "04" > functions/rndis.usb0/subclass
echo "01" > functions/rndis.usb0/protocol
1 Like