wiki:Software/hDrivers

Drivers for Specific Hardware Platforms

Broadcom STA drivers

These drivers were required for the Broadcom BCM94352HMB an 802.11 AC compliant device. The primary reference is: http://www.broadcom.com/support/802.11/linux_sta.php

Using Apt-Get
The compiled source is now available in the repositories, and so this is the preferred install method.

  1. sudo apt-get update
  2. sudo apt-get install bcmwl-kernel-source
  3. sudo modprobe wl

If this doesn't work, then remove interfering drivers by:

  1. sudo apt-get update
  2. sudo apt-get --reinstall install bcmwl-kernel-source
  3. sudo modprobe -r b43 ssb wl brcmfmac brcmsmac bcma
  4. sudo modprobe wl

These drivers are blacklisted on the baseline image by default, but may be re-enabled by later actions. These steps insure that they are not loaded at the same time as wl.

If your chosen operating system does not have the source available, such as in the above instructions, you will need to build the linux_sta wl driver yourself. The sources are available from Broadcom, below.

Building and loading the STA module:
It's assumed that the matching kernel headers are installed, and the proper build tools are also installed (e.g. make, g++).

  1. copy this file for the 32-bit kernel or 64-bit kernel
  2. Untar and make / make install
  3. the module is named wl.ko and is located at /lib/modules/3.2.0-36-generic/kernel/drivers/net/wireless/wl.ko
  4. Following this readme load these two modules with modprobe
    modprobe cfg80211
    modprobe lib80211
    
  5. then load the module that was built with insmod:
    insmod  /lib/modules/3.2.0-36-generic/kernel/drivers/net/wireless/wl.ko
    

Netgear AC341U

BUILD DRIVERS:

From support page at Netgear website download the latest Linux driver (check the page for latest under "AirCard? 341U Downloads and Documentation"); as of Jan 2016 the latest Linux drivers can be pulled with:

wget http://www.downloads.netgear.com/files/aircard/Linux-Support-S2.13N2.25.zip

It include the installation directions and the driver directories. When compiling, make sure not to have spaces anywhere in the path otherwise the compilation will fail with arch/x86/Makefile:129: CONFIG_X86_X32 enabled but no binutils support. Also, for kernels ≥ 3.19, you will have to modify all occurrences in GobiNet?/QMIDevice.c of f_dentry to f_path.dentry. To build Follow these steps:

  1. Ensure you have an appropriate kernel version and respective headers, 3.5.0.49 in our case since btest2.ndz in Ubuntu 12.04
  2. Copy the driver directories into /usr/src sudo cp –avr /home/user1/Desktop/GobiSerial /usr/src sudo cp –avr /home/user1/Desktop/GobiNet /usr/src
  3. Enter each driver directory and run
    make all 
    make install 
    
  4. Load the serial and net modules via modrpobe
    modprobe -i GobiSerial
    modprobe -i GobiNet
    
    Dmesg output should look like:
    [  459.924062] usb 1-4.4: new high-speed USB device number 4 using ehci_hcd
    [  460.016555] usb 1-4.4: config 1 has an invalid interface number: 8 but max is 5
    [  460.016560] usb 1-4.4: config 1 has no interface number 5
    [  460.017054] usb 1-4.4: New USB device found, idVendor=1199, idProduct=9057
    [  460.017058] usb 1-4.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    [  460.017061] usb 1-4.4: Product: AC341U
    [  460.017065] usb 1-4.4: Manufacturer: Sierra Wireless, Incorporated
    [  460.017068] usb 1-4.4: SerialNumber: 355745050048959
    [  460.146715] usbcore: registered new interface driver cdc_ether
    [  460.147711] usbcore: registered new interface driver usbserial
    [  460.147732] usbcore: registered new interface driver usbserial_generic
    [  460.147749] USB Serial support registered for generic
    [  460.147757] usbserial: USB Serial Driver core
    [  460.153904] rndis_host 1-4.4:1.0: usb0: register 'rndis_host' at usb-0000:00:1a.7-4.4, RNDIS device, 32:85:11:c8:2c:09
    [  460.153936] usbcore: registered new interface driver rndis_host
    [  460.158052] usbcore: registered new interface driver GobiSerial
    [  460.158140] USB Serial support registered for GobiSerial
    [  460.158805] GobiSerial 1-4.4:1.2: GobiSerial converter detected
    [  460.158968] usb 1-4.4: GobiSerial converter now attached to ttyUSB0
    [  460.159427] GobiSerial 1-4.4:1.3: GobiSerial converter detected
    [  460.159511] usb 1-4.4: GobiSerial converter now attached to ttyUSB1
    [  460.159925] GobiSerial 1-4.4:1.4: GobiSerial converter detected
    [  460.160062] usb 1-4.4: GobiSerial converter now attached to ttyUSB2
    [  460.160077] GobiSerial: 2013-10-08/NTGR_2.12:GobiSerial
    [  460.168785] GobiNet: 2013-10-08/NTGR_2.21
    [  460.169255] GobiNet 1-4.4:1.8: eth2: register 'GobiNet' at usb-0000:00:1a.7-4.4, GobiNet Ethernet Device, c6:c1:97:7e:a4:09
    [  461.569774] creating qcqmi2
    [  461.569852] usbcore: registered new interface driver GobiNet
    
    Notice that multiple serial USB interfaces are enumerated, the one that accepts AT commands is ttyUSB1, the latter are for some kind of diagonostics.

FIRMWARE UPDATE: (Incase you need one)
The firmware update has to be done on windows. Insert the device into a windows box, and let it install drivers and enumerate interafaces. Make sure you can see the managment webpage. Then download, install and run the following file: http://downloadcenter.netgear.com/en/Disclaimer.aspx?redirecturl=http://www.downloads.netgear.com/files/aircard/1101857_9902536_NTG9X15C_45.04.20.00_00_SPRINT_000.046_000-field.exe#

USING SERIAL INTERFACE:
To actually use the device you'll have to connect to the virtual serial interface, enable pass through, and initiate a connection.

To connect to the serial interface I used minicom. The command string was: minicom -D /dev/ttyUSB1

Port settings were 115200 8N1 with hardware Flow Control (but not sure if that is necessary). In minicom I also made the Init string AT, and the Reset string empty.

When you launch minicom you should see an initial AT command. Pressing enter will get you an OK reponse, this inidicates it's working.

You only need to enter passthrough mode once. But it will require a device restart. The AT commands are:

AT!ippassthrough=1
AT!reset 

You can check if it's enabled by running:

AT!ippassthrough?

If you get a 1 back, it's in pass through mode. Additionally the output of LSUSB is different, if you run it and get:

Bus 001 Device 004: ID 1199:9057 Sierra Wireless, Inc.

It's in pass through mode, if you get:

Bus 001 Device 004: ID 1199:9055 Sierra Wireless, Inc.

It's in NAT mode. Once the device reboots, the device enumeration will be different. Instead of just eth2, there will be an eth2 interface and a USB interface. We'll still use the eth2 interface however. (these numbers are for the btest2 image on a machine with 2 intefaces, dmesg will give you the actual device name).

Once the interfaces enumerate, reconnect to the serial port ttyUSB1 and issue the follow commands:

AT!entercnd="A710"
OK
AT!dxcfg=wwan,connect,11
OK

$QCRMCALL: 1, V4

The quotations are required for the entercnd line. The entercnd line is the equivalent of an enable command (enter privileged mode). The latter command actually connects to the BS. It's disconnect counterpart is:

AT!dxcfg=wwan,connect,0

You can verify on the device that the actual state is connected. Additionally:

at!gstatus?

Will get you a status out put like:

at!gstatus?                                                                                                         
!GSTATUS: 
Current Time:  10049            Temperature: 42
Bootup Time:   0                Mode:        ONLINE         
System mode:   LTE              PS state:    Attached     
LTE band:      B25              LTE bw:      10 MHz  
LTE Rx chan:   8365             LTE Tx chan: 26365
EMM state:     Registered       Normal Service 
RRC state:     RRC Connected  
IMS reg state: No Srv  

RSSI (dBm):    -83              Tx Power:    0
RSRP (dBm):    -117             TAC:         0001 (1)
RSRQ (dB):     -10              Cell ID:     01A2D001 (27447297)
SINR (dB):      1.6

Don't let the mode ONLINE fool you. This does not mean the device is connected, merely that it sees the BS.

Finally once the device is actually connected, bring up the Ethernet interface and run dhclient on it. In this case that was eth2.

USRP Universal Hardware Driver

Prior to installing ensure the host platform is running Ubuntu 14.04 and a USRP connected on eth2 interface.

UHD binary installation instructions referenced from http://files.ettus.com/manual/page_install.html#install_linux.

Add the repository and install the UHD binary:

add-apt-repository ppa:ettusresearch/uhd
apt-get update
apt-get install libuhd-dev libuhd003 uhd-host

Configure eth2 network interface by adding the following in /etc/network/interfaces

auto eth2
iface eth2 inet static
      address 192.168.10.1
      netmask 255.255.255.0
      mtu 9216

Test UHD installation using the USRP Hardware Driver Discovery Utility

uhd_find_devices

Output should look similar to the following

linux; GNU C++ version 4.6.3; Boost_104601; UHD_003.007.002-release

--------------------------------------------------
-- UHD Device 0
--------------------------------------------------
Device Address:
    type: usrp2
    addr: 192.168.10.2
    name:
    serial: F297A3

USRP peripheral details can be obtained using the USRP Hardware Driver Peripheral Report Utility

uhd_usrp_probe

Output should look similar to the following

linux; GNU C++ version 4.6.3; Boost_104601; UHD_003.007.002-release

-- Opening a USRP2/N-Series device...
-- Current recv frame size: 1472 bytes
-- Current send frame size: 1472 bytes
  _____________________________________________________
 /
|       Device: USRP2 / N-Series Device
|     _____________________________________________________
|    /
|   |       Mboard: N210r4
|   |   hardware: 2577
|   |   mac-addr: 00:80:2f:0a:cc:c8
|   |   ip-addr: 255.255.255.255
|   |   subnet: 255.255.255.255
|   |   gateway: 255.255.255.255
|   |   gpsdo: none
|   |   serial: F297A3
|   |   FW Version: 12.3
|   |   FPGA Version: 10.0
|   |
|   |   Time sources: none, external, _external_, mimo
|   |   Clock sources: internal, external, mimo
|   |   Sensors: mimo_locked, ref_locked
|   |     _____________________________________________________
|   |    /
|   |   |       RX DSP: 0
|   |   |   Freq range: -50.000 to 50.000 Mhz
|   |     _____________________________________________________
|   |    /
|   |   |       RX DSP: 1
|   |   |   Freq range: -50.000 to 50.000 Mhz
|   |     _____________________________________________________
|   |    /
|   |   |       RX Dboard: A
|   |   |   ID: SBX (0x0054)
|   |   |   Serial: E4R1CSDXS
|   |   |     _____________________________________________________
|   |   |    /
|   |   |   |       RX Frontend: 0
|   |   |   |   Name: SBXv3 RX
|   |   |   |   Antennas: TX/RX, RX2, CAL
|   |   |   |   Sensors: lo_locked
|   |   |   |   Freq range: 400.000 to 4400.000 Mhz
|   |   |   |   Gain range PGA0: 0.0 to 31.5 step 0.5 dB
|   |   |   |   Connection Type: IQ
|   |   |   |   Uses LO offset: No
|   |   |     _____________________________________________________
|   |   |    /
|   |   |   |       RX Codec: A
|   |   |   |   Name: ads62p44
|   |   |   |   Gain range digital: 0.0 to 6.0 step 0.5 dB
|   |   |   |   Gain range fine: 0.0 to 0.5 step 0.1 dB
|   |     _____________________________________________________
|   |    /
|   |   |       TX DSP: 0
|   |   |   Freq range: -250.000 to 250.000 Mhz
|   |     _____________________________________________________
|   |    /
|   |   |       TX Dboard: A
|   |   |   ID: SBX (0x0055)
|   |   |   Serial: E4R1CSDXS
|   |   |     _____________________________________________________
|   |   |    /
|   |   |   |       TX Frontend: 0
|   |   |   |   Name: SBXv3 TX
|   |   |   |   Antennas: TX/RX, CAL
|   |   |   |   Sensors: lo_locked
|   |   |   |   Freq range: 400.000 to 4400.000 Mhz
|   |   |   |   Gain range PGA0: 0.0 to 31.5 step 0.5 dB
|   |   |   |   Connection Type: QI
|   |   |   |   Uses LO offset: No
|   |   |     _____________________________________________________
|   |   |    /
|   |   |   |       TX Codec: A
|   |   |   |   Name: ad9777
|   |   |   |   Gain Elements: None

RTL-SDR

Assumes you have git, cmake and libusb-1.0.0.dev installed on the image. If not you need:

  apt-get install git cmake libusb-1.0.0-dev
git clone git://git.osmocom.org/rtl-sdr.git
cd rtl-sdr/
mkdir build
cd build
cmake ../ -DINSTALL_UDEV_RULES=ON
make
make install
ldconfig
cp ../rtl-sdr.rules /etc/udev/rules.d/

Blackclist the RTL-SDR so it doesn't interfere with other devices by adding creating /etc/modprobe.d/blacklist-rtlsdr.conf with:

blacklist dvb_usb_rtl28xxu

ATH 5k

No build necessary, uses stock kernel drivers from Ubuntu Repository.

ATH 9k

No build necessary, uses stock kernel drivers from Ubuntu Repository.

Intel® PRO/Wireless 2200BG and 2915ABG

No build necessary, uses stock kernel drivers from Ubuntu Repository.

Linux Blue tooth

No build necessary, uses stock kernel drivers from Ubuntu Repository.

Ath 3K

No build necessary, uses stock kernel drivers from Ubuntu Repository.

Last modified 4 months ago Last modified on 02/17/17 13:39:38

Attachments (3)