# MiFi USB620L Novatel Wireless



## nixlike (Dec 8, 2016)

Has anyone attempted to use this Verizon Wireless 4G Lte device?

`kernel: ugen3.3: <Novatel Wireless> at usbus3
devd: Executing 'logger Unknown USB device: vendor 0x1410 product 0x9020 bus uhub3'
root: Unknown USB device: vendor 0x1410 product 0x9020 bus uhub3

10.3-RELEASE`


----------



## SirDice (Dec 8, 2016)

Not sure if it's supported but try loading umodem(4) before plugging the device in. If you can get a tty you can use PPP to basically dial-up (calling a special number, usually *99#).


----------



## nixlike (Dec 8, 2016)

SirDice said:


> Not sure if it's supported but try loading umodem(4) before plugging the device in. If you can get a tty you can use PPP to basically dial-up (calling a special number, usually *99#).



Thank you SirDice, I get the same messages in /var/log/message, so I don't think it is supported either.  I even tried to load u3g prior to plugging it in, with negative results.


----------



## Phishfry (Dec 9, 2016)

First thing I would do is add the VID and PID to usbdevs and u3g.c and recompile.

I would almost bet it shows up as a ue0 device. You would enable dhcp on it to connect.

This is old but valid. Your device will be slightly different with single usb interface.
https://technotation.com/2012/08/15/freebsd-and-mobile-broadband/
Ignore the PPP section. Your device provides an ethernet connection.
I used this to simply show how to add an unsupported u3g device to FreeBSD.


----------



## Phishfry (Dec 9, 2016)

Some other things after recognized. Goto the mifi devices menu and check settings. Turn on tethering mode if found.
Also some of these devices have a small USB mass storage device that shows up with windows drivers. You will need to disable or eject that.
Some Mifi menus have that setting named CD-Rom mode (partition with drivers) in the settings. Turn that off.


----------



## kpa (Dec 9, 2016)

This is the Linux Integration Guide for the device. It seems to have two operating modes, one as an ethernet NIC and another that accepts the normal modem AT commands and usb_modeswitch is used to switch between them:

https://www.verizonwireless.com/dam/support/pdf/user_guide/u620-linux-integration-guide-7-17-15.pdf


----------



## Phishfry (Dec 9, 2016)

The nice thing is it appears both modes use the same PID(0x9020) so I would start there by adding that and see what it does.

I do note the CDC interface is listed as optional. Either mode should work.


----------



## nixlike (Dec 9, 2016)

Thank you Phishfry and kpa, I will go down the rabbit hole today and see how far I get.


----------



## Phishfry (Dec 9, 2016)

Sorry, I thought this was a mifi device.
You will have multiple cuaU0.x entries when supported by u3g. AT command channel, gps,  data channel. Just like the tutorial.
Sometimes you can flash different firmware to these devices to switch modes too. That optional CDC interface is nothing more than a firmware flash, if you can find the right firmware.

So the gist here is make a copy of your Generic kernconf per the manual and make copies of usbdevs and u3g.c before editing. That way you can easily generate patches if it works. Good for you and usable upstream if you file a PR for adding.


----------



## nixlike (Dec 9, 2016)

Phishfry, you were correct, it is a Mifi device.  I was able to get it working by compiling a new kernel after adding entries in the usbdev and u3g.c files as the article suggested, I wonder if those could be added to the kernel source so future users could benefit.

`usbdevs

product NOVATEL USB620L          0x9020 Novatel MiFi USB620L`

`u3g.c

   U3G_DEV(NOVATEL, USB620L, 0),`

Thank you for the pointers guys.  Sorry I didn't get the patches, I didn't save the originals.


----------



## Phishfry (Dec 9, 2016)

Do you have it online already?


----------



## nixlike (Dec 13, 2016)

Phishfry, I did get in online and used it.  There was a little quirk where I had to run `dhclient ue0` after it booted even though I had placed an entry in /etc/rc.conf for the ue0 interface to use dhcp.  Beyond that, it worked like a charm, thanks again for the article.  In my initial search I came across the same article, but chose not to pursue it prior to starting this thread, I am glad you pointed back in that direction again.


----------



## Phishfry (Dec 13, 2016)

I think the problem with the rc.conf entry could be that starts too soon to catch the modem. The ue0 interface may not initialize in time.
You could add a delay to test that theory.


----------



## nixlike (Dec 13, 2016)

I will have to try that out.


----------



## nixlike (Dec 20, 2016)

I attempted the same fix on another 10.3 box, but this was a "STABLE" source tree instead of a "RELEASE" source tree and the u3g driver failed to detect the device.

`10.3-STABLE FreeBSD 10.3-STABLE #0 r310305M: Mon Dec 19 20:28:06 EST 2016 root@something.com:/usr/obj/usr/src/sys/GENERIC amd64`

`ugen0.5: <Novatel Wireless MiFi USB620L> at usbus0
Dec 19 21:10:27 something root: Unknown USB device: vendor 0x1410 product 0x9020 bus uhub2`

I verified that I only modified usbdevs and u3g.c in the same way that I did on the 10.3-RELEASE box, but I don't understand why it wouldn't detect it on the 10.3-STABLE box after I compiled the kernel.  I just updated the sources from the svn repository shortly before modifying and compiling the kernel as well.

Call me puzzled.


----------



## Phishfry (Dec 20, 2016)

Double check your copied GENERIC kernconf. Make sure you changed the name inside the file..Use uname to check you are using the modified kernel.
usbdevs & u3g.c- Make sure you used zero's and not O's. Make sure PID does not already exist in -Stable.


----------



## nixlike (Dec 20, 2016)

I definitely used zeros, I had to triple check that myself as well...just to make sure.

I let `make buildkernel` do it's thing from the results of the `svn update` command, so it used the amd64 GENERIC kernconf.  What would I be checking in `/usr/src/sys/amd64/conf/GENERIC`?  I did see a usb device reference in there, but I am assuming I won't see anything else related to the specifics of any usb devices.

In the usbdevs file there are now a total of 4 0x9020 product entries including the one I added.

`[FONT=Courier New]product NOVATECH NV902           0x9020     NovaTec NV-902W
product NOVATEL USB620L          0x9020     Novatel MiFi USB620L
product RALINK RT2570_3          0x9020     RT2500USB Wireless Adapter
product SEALEVEL 2106            0x9020     FTDI compatible adapter[/FONT]`

Since I saw more than one in the 10.3-RELEASE usbdevs file, I assumed it was ok to have more than one product id since it was a different vendor.  Where else could I check for that PID?

The uname string I mentioned above suggest that it was using the new compiled kernel, based on today's date.  This definitely has me scratching my head.


----------



## Phishfry (Dec 20, 2016)

I mention kernel name because handbook has you copy GENERIC and modify MYKERNEL. You must edit the name inside after copy.
https://www.freebsd.org/doc/handbook/kernelconfig-config.html
You can modify GENERIC and it works but there could be blowback.


----------



## nixlike (Dec 20, 2016)

oh ok...I didn't modify GENERIC at all, I like to keep GENERIC so freebsd-update works in the future.  Thanks for spitballing with me.


----------



## nixlike (Dec 22, 2016)

I was able to get the device working on the newer source tree.  I had to install the `usb_modeswitch` package for the modem to work.  I also created a service to have it run at startup should the power go out for the machine.  If using this service script, you need to add `u620lmodeswitch_enable="YES"` in /etc/rc.conf

The below file should be placed in /etc/rc.d with permissions of 555


```
#!/bin/sh
#
# PROVIDE: utility
# REQUIRE: LOGIN FILESYSTEMS
# KEYWORD: shutdown

. /etc/rc.subr

name=u620lmodeswitch
rcvar=u620lmodeswitch_enable

#/usr/local/sbin/usb_modeswitch -v 0x1410 -p 0x9020 -u 2
# for Enterprise mode /usr/local/sbin/usb_modeswitch -v 0x1410 -p 9020 -u 4

start_cmd="${name}_start"
stop_cmd=":"

u620lmodeswitch_start()
{
        /usr/local/sbin/usb_modeswitch -v 0x1410 -p 0x9020 -u 2
}

load_rc_config $name

#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
# SET THEM IN THE /etc/rc.conf FILE
#
u620lmodeswitch_enable=${u620lmodeswitch_enable-"NO"}
pidfile=${utility_pidfile-"/var/run/utility.pid"}

run_rc_command "$1"
```


----------



## Phishfry (Dec 23, 2016)

I was going to mention these devices have several protocols available. CDCE, MBIM and QMI to name a few. I wonder what detects them differently between release and stable. Something nudges the interface to get a desired protocol. Stable is a testing version so it could be something related to that.


----------



## nixlike (Dec 23, 2016)

I thought I saw something in the u3g man page that mentioned it tries to change the mode, but don't quote me.  I still see nuances if I do init 6 instead of powering off and back on, so I don't think it is a perfect setup by any means.  I miss my FIOS.  Now if I could just get one of those grandfathered ulimited data plans from Verizon, then maybe I would be ok, my kids eat up the data with their youtube videos.


----------

