1

I recently bought a usb ethernet adapter for my laptop. When I connect it to Windows 10, it treats the device as a flash drive. On this "flash drive" is an executable .exe file. Running it on Windows, everything works fine. However, on Linux (Manjaro in my case) it only sees the device as a flash drive. The internet connection not working.

inxi -nxxx shows: Network: Device-1 ... Device-2: ICS Advent USB 2.0 10/100M Ethernet Adaptor type: USB driver: usb-storage bus-ID: 2-4:3 chip-ID 0fe6:9702 class-ID: 0806

Can I manually force it to use the correct driver?

Thanks in advance.

2 Answers 2

0

This is a so-called Modeswitch device. (Because it needs a driver to switch it from being one type of USB device to another).

Check if you have the usb_modeswitch package installed. If you have, and it still doesn't work, um, Bad Luck™️, you might simply have a device for which at least usb_modeswitch has no support. And chances are that then there's also no Linux driver.

Adding modeswitch support however is often not that bad if other devices from the same vendor have support. Might not be impossible!

2
  • The package is installed. I tried reinstalling the package. Unfortunately still doesn't work. Can I manually force it to use the correct driver?
    – mrEvDev
    Oct 24, 2022 at 6:58
  • Check out the usb_modeswitch website. They used to have information on what to do if your device was not supported. Good luck! Oct 24, 2022 at 8:46
0

The USB vendor ID indicates a Kontron/ICS Advent/CoreChips product.

CoreChips has a SR9700 network adapter chip, but the product id being 0x9702 instead of 0x9700 suggests this might be a different version of the chip. Or it might be the product ID used to indicate that the device is in "USB storage" mode.

This Chromium OS bug report looks very similar to your case: https://bugs.chromium.org/p/chromium/issues/detail?id=447045

Try running this command as root:

usb_modeswitch -v 0fe6 -p 9702 -K

This tells usb_modeswitch to send a sequence of two SCSI commands to the "USB storage device": the first command is "allow media removal", the second is "eject media". This is what some mode-switching USB devices use as an indication that the Windows driver installation kit is not needed any more, and the real functionality of the device can be revealed.

Once you've done that, try the inxi -nxxx command again. Has the class-ID: 0806 part changed to something else, perhaps to class-ID: 0206 (meaning an Ethernet network device)? Has any other information changed?

The next problem could be that the sr9700 driver module will not recognize the product ID 9702, as it expects only product ID 9700. When the device switches to the actual network interface mode, it might or might not change its ID. If the product ID changes to 9700, you'll only need the usb_modeswitch part.

But if the product ID remains 9702 also after the modeswitch, you could try this:

modprobe sr9700
echo "0fe6 9702" > /sys/bus/usb/drivers/sr9700/new_id

If the chips with product ID 9702 will work identically to chips with product ID 9700, this might work. But if there are differences, the driver will most likely not work correctly. You might see errors in dmesg output.

This discussion suggests this approach might not work: https://www.phoronix.com/forums/forum/hardware/general-hardware/44256-usb-ethernet-adaptor-0fe6-9702-kontron-ics-advent?103621-USB-gt-Ethernet-adaptor-(0FE6-9702-Kontron-ICS-Advent)=

However, it refers to an earlier dm9601 driver; you might have better luck with the sr9700 driver.

If this works, then to make this configuration persistent, you would have to do two things:

  • Add configuration to trigger usb_modeswitch with the appropriate options when a "USB storage" (pre-modeswitch) device with vendor ID 0fe6 and product ID 9702 appears. This might be achieved with a udev rule similar to what /lib/udev/rules.d/40-usb_modeswitch.rules (or a similar file in your distro) contains, plus a configuration file named /etc/usb_modeswitch.d/0fe6:9702 with the following contents:
    # ICS Advent/CoreChips SR9700 v2 USB ethernet NIC
    StandardEject=1

Depending on what exactly happens to the USB identifiers of the device when the mode-switch is triggered, you might want to add some options here to allow usb_modeswitch to verify the switching is successfully achieved. See here for more information on configuration file parameters for usb_modeswitch.

  • Add configuration to load the sr9700 network driver and feed it the new vendor/product ID pair, either pre-emptively at system start-up, or whenever the post-modeswitch device appears. This could be achieved with a /etc/modprobe.d/usb-nic-sr9702.conf file with the following contents:
    alias usb:v0FE6p9702d*dc*dsc*dp*ic*isc*ip*in* sr9700
    install sr9700 /sbin/modprobe --ignore-install sr9700; /bin/echo "0fe6 9702" > /sys/bus/usb/drivers/sr9700/new_id
4
  • Device-2: ICS Advent USB 2.0 10/100M Ethernet Adaptor type: USB driver: N/A bus-ID: 2-4:3 chip-ID: 0fe6:9702 class-ID: 0806
    – mrEvDev
    Oct 25, 2022 at 14:48
  • So driver not found at all. This is before usb_modeswitch -v 0fe6 -p 9702 -K
    – mrEvDev
    Oct 25, 2022 at 14:48
  • I tried the second part with two different drivers (sr9700 and dm9601). So it changed nothing.
    – mrEvDev
    Oct 25, 2022 at 14:54
  • Class-ID 0806 means the device is still pretending to be an USB storage device, however now the more specific match to the sr9700 (or dm9601) driver alias apparently prevents to usb-storage driver from claiming the device. Does the usb_modeswitch cause the chip-ID or class-ID to change, or not? What are the results after the usb_modeswitch?
    – telcoM
    Oct 25, 2022 at 21:54

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.