Mobile Broadband Modules
The information provided is currently heavily edited and may be incomplete, misleading or erroneous. It may render your system unusable and should only be used by experienced users that are comfortable with building their own Linux kernel and other software.
This project is dedicated to providing GNU/Linux software for the Ericsson Mobile Broadband devices f3507g, f3607gw, c3607w and f3307. That includes Linux kernel modules, patches and plugins for NetworkManager/modem-manager and GPS control software. Ultimately the goal is to get full support for the modules upstream and directly into GNU/Linux distributions.
Development is being done on Ubuntu 9.10. Theoretically all software should work on other distributions as well. Most information provided is targeted towards Ubuntu though, so if another distribution is used the instructions below may have to be adapted accordingly. Other distributions tested includes Moblin, Debian, Fedora and Arch.
Linux kernel driver
In order to get full support for the f3507g/f3607gw/f3307 modules in Linux kernels prior to 2.6.28 the kernel has to be patched with the mbm-driver patches and recompiled. For kernels 2.6.28 - 2.6.30 it is possible to add support without recompiling by Hex-editing cdc_ether the cdc_ether module. In kernel 2.6.31 several modules are supported out of the box and no recompilation is necessary. For details see Linux kernel modules.
To get easy, user friendly networking work is done to make the Ericsson Mobile Broadband modules working with the popular NetworkManager. To achieve this an mbm plugin has been created for modem-manager which is a tool for handling different 3G modules. It provides a d-bus interface used by NetworkManager. For details see NetworkManager.
GPS control software
The Ericsson mobile broadband modules (except for f3307 and c3607w) also have GPS functionality. For easy control and configuration, a GPS control utility has been developed. It consists of a daemon that runs in the background and a user interface to control it. For details see GPS Control.
All devices listed below are supported when using the MBM driver (see Linux kernel modules). If using a vanilla kernel, the required version for the different modules are listed in the table below. For the modules whose vid/pid have not yet made it into the vanilla kernel, they can be added with a patch (see Linux kernel modules for details).
|Vendor name||Device name||Vendor ID||Product ID||Vanilla kernel|
|Dell||5530 Mobile Broadband (3G HSPA) Mini-Card||413c||8147||2.6.31|
|Ericsson Business Mobile Networks BV||f3507g||0bdb||1900||2.6.29|
|Ericsson Business Mobile Networks BV||f3507g||0bdb||1902||2.6.31|
|Ericsson Business Mobile Networks BV||f3607gw||0bdb||1904||2.6.31|
|Ericsson Business Mobile Networks BV||f3607gw||0bdb||1905||2.6.32|
|Ericsson Business Mobile Networks BV||f3607gw||0bdb||1906||2.6.31|
|Ericsson Business Mobile Networks BV||f3307||0bdb||190a||2.6.32|
|Ericsson Business Mobile Networks BV||f3307||0bdb||1909||2.6.32|
|Ericsson Business Mobile Networks BV||c3607w||0bdb||1049||2.6.32|
|Ericsson Business Mobile Networks BV||c3607w||0bdb||190b||2.6.33|
To find out what vendor id and product id you are using, open a terminal and type:
The output will be something along the lines of:
# lsusb Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 006 Device 004: ID 0bdb:1902 Ericsson Business Mobile Networks BV Bus 006 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 009: ID 046d:c03d Logitech, Inc. M-BT69a Pilot Optical Mouse Bus 004 Device 005: ID 0557:2213 ATEN International Co., Ltd Bus 004 Device 004: ID 0557:8021 ATEN International Co., Ltd Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 005 Device 003: ID 0b97:7772 O2 Micro, Inc. OZ776 CCID Smartcard Reader Bus 005 Device 002: ID 0b97:7761 O2 Micro, Inc. Oz776 1.1 Hub Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 003: ID 413c:8140 Dell Computer Corp. Wireless 360 Bluetooth Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
You may have a module that is branded with some other vendor than Ericsson though (e.g. Toshiba, Dell etc).
In order to build a Linux kernel and the other provided software some additional packages are required. To install the required packages open a terminal and run:
# sudo apt-get update # sudo apt-get upgrade # sudo apt-get install build-essential libncurses5-dev kernel-package wget fakeroot git subversion libmbca0 # sudo apt-get build-dep network-manager network-manager-gnome
Linux kernel modules
To compile a kernel we first have to get the source. Either a vanilla kernel can be downloaded from www.kernel.org or the distribution's packaging system can be used (recommended). In this case we'll use apt-get and a 2.6.28 kernel since that is what is currently used in Ubuntu 9.04. Other kernel versions are also supported, just adjust the commands below accordingly (e.g. replace instances of 28 with 24 if a 2.6.24 kernel is used). Also make sure to download the proper patch for the desired version.
Download the kernel and mbm patch
First find out which kernel that is currently running:
# uname -r 2.6.28-12-generic
Then use apt-get to download the sources and cd into the source directory:
# sudo apt-get source linux-image-2.6.28-12-generic # cd linux-2.6.28
Download, extract and apply the desired MBM driver patch:
For kernel version 2.6.21 (no autosuspend, mbm driver): # wget http://downloads.sourceforge.net/project/mbm/mbm-drivers/2.6.21/patch-2.6.21.bz2 # bunzip2 patch-2.6.21.bz2 # patch -p1 < patch-2.6.21 For kernel version 2.6.24 (autosuspend enabled, mbm driver): # wget http://downloads.sourceforge.net/sourceforge/mbm/patch-2.6.24-mbm.bz2 # bunzip2 patch-2.6.24-mbm.bz2 # patch -p1 < patch-2.6.24-mbm For kernel version 2.6.28 (autosuspend enabled, mbm driver): # wget http://downloads.sourceforge.net/sourceforge/mbm/patch-2.6.28-mbm.bz2 # bunzip2 patch-2.6.28-mbm.bz2 # patch -p1 < patch-2.6.28-mbm For kernel version 2.6.29 (autosuspend with patch below, cdc_ether driver): # wget http://downloads.sourceforge.net/sourceforge/mbm/mbm-drivers/2.6.29/mbm_pids_for_cdc_ether-2.6.29.patch # wget http://downloads.sourceforge.net/project/mbm/mbm-drivers/2.6.29/selective-suspend-van29.6-v1.diff # patch -p1 < mbm_pids_for_cdc_ether-2.6.29.patch # patch -p1 < selective-suspend-van29.6-v1.diff For kernel version 2.6.29 (autosuspend enabled, mbm driver): # wget http://downloads.sourceforge.net/sourceforge/mbm/mbm-drivers/2.6.29/patch-2.6.29-mbm.bz2 # bunzip2 patch-2.6.29-mbm.bz2 # patch -p1 < patch-2.6.29-mbm For kernel version 2.6.30 (autosuspend with patch below, cdc_ether driver): # wget http://downloads.sourceforge.net/sourceforge/mbm/mbm-drivers/2.6.30/mbm_pids_for_cdc_ether-2.6.30.patch # wget http://downloads.sourceforge.net/project/mbm/mbm-drivers/2.6.30/selective-suspend-van30.10-v1.diff # patch -p1 < mbm_pids_for_cdc_ether-2.6.30.patch # patch -p1 < selective-suspend-van30.10-v1.diff For kernel version 2.6.30 (autosuspend enabled, mbm driver): # wget http://downloads.sourceforge.net/sourceforge/mbm/mbm-drivers/2.6.30/patch-2.6.30-mbm.bz2 # bunzip2 patch-2.6.30-mbm.bz2 # patch -p1 < patch-2.6.30-mbm For kernel version 2.6.31 (autosuspend with patch below, cdc_ether driver): # wget http://downloads.sourceforge.net/project/mbm/mbm-drivers/2.6.31/mbm_pids_for_cdc_ether-2.6.31.patch # wget http://downloads.sourceforge.net/project/mbm/mbm-drivers/2.6.31/selective-suspend-van31.5-v6.diff # wget http://downloads.sourceforge.net/project/mbm/mbm-drivers/2.6.31/remote_wakeup.patch # patch -p1 < mbm_pids_for_cdc_ether-2.6.31.patch # patch -p1 < selective-suspend-van31.5-v6.diff # patch -p1 < remote_wakeup.patch
For kernel version 2.6.32 (autosuspend with patch below, cdc_ether driver): # wget http://downloads.sourceforge.net/sourceforge/mbm/mbm-drivers/2.6.32/mbm_pids_for_cdc_ether-2.6.32.patch # wget http://downloads.sourceforge.net/project/mbm/mbm-drivers/2.6.32/selective-suspend-van32.9-v1.diff # patch -p1 < mbm_pids_for_cdc_ether-2.6.32.patch # patch -p1 < selective-suspend-van32.9-v1.diff
Configure the kernel
Copy the previous configuration and apply it:
# cp /boot/config-2.6.28-11-generic .config # make oldconfig
# make menuconfig
Exit menuconfig without any changes and choose to save settings if prompted.
Check so that cdc-acm, cdc-wdm and mbm (or cdc-ether if using a kernel version >= 2.6.29 with generic drivers) are selected as modules:
# grep ACM .config CONFIG_USB_ACM=m
# grep WDM .config CONFIG_USB_WDM=m
For kernel version <= 2.6.28: # grep MBM .config CONFIG_USB_NET_MBM=m For kernel version >= 2.6.29: # grep CDCETHER .config CONFIG_USB_NET_CDCETHER=m
If any of the above is not set as a module (empty output from the grep command above) it has to be selected as a module in menuconfig before proceeding.
Build the kernel
Now it is time to build the new kernel. Ubuntu provides a tool to create a deb package automatically that can easily be installed and uninstalled with the packaging system:
# make-kpkg clean # sudo fakeroot make-kpkg --initrd --append-to-version=-mbm kernel_image kernel_headers
While compiling there is plenty of time to get a cup of coffe and take a moment to ponder about how sweet it will be to have your mobile broadband module working in Linux.
When the compilation is done two deb packages will have been created in the parent directory. Change directory and install them:
# cd .. # sudo dpkg -i linux-image-220.127.116.11-mbm_18.104.22.168-mbm-10.00.Custom_i386.deb # sudo dpkg -i linux-headers-22.214.171.124-mbm_126.96.36.199-mbm-10.00.Custom_i386.deb
Grub should be updated automatically and all that is needed now is to reboot the system!
# sudo shutdown -r now
Alternative 1: pre-built packages
For Ubuntu, experimental packages are available in the modem-manager ppa (thanks to Alexander Asac). To use them with your package manager add the following lines to /etc/apt/sources.list (for Ubuntu 9.04, Jaunty Jackalope):
deb http://ppa.launchpad.net/modemmanager/ppa/ubuntu jaunty main deb-src http://ppa.launchpad.net/modemmanager/ppa/ubuntu jaunty main
Then update your repository and install the upgraded packages:
sudo apt-get update sudo apt-get upgrade
Reboot your system and you should now have support for your Ericsson mobile broadband module in NetworkManager.
Alternative 2: compiling
Getting support for mobile broadband modules in NetworkManager requires three packages; NetworkManager, network-manager-applet and modem-manager.
The stable releases of NetworkManager (currently 0.7.1) does not support modem-manager but support is available in the NetworkManager git repository.
The network-manager-applet is a graphical front end to NetworkManager and it needs to be patched to get proper support for modem-manager.
modem-manager is where the mbm plugin is located. The mbm plugin is not yet included in the upstreams code but it will soon be available in the official modem-manager git repository. Meanwhile there is an MBM clone of modem-manager that contains the mbm plugin.
Start by downloading, compiling and installing a suiting revision of NetworkManager. The patches listed in the instructions below are optional but adds some functionality e.g. rf_kill support for modem devices (making NetworkManager behave properly when turning on/off radio).
# git clone git://anongit.freedesktop.org/NetworkManager/NetworkManager.git # cd NetworkManager # git checkout 20c662e3505ccae518b0f0839a6844bcc709cfc6 # wget http://downloads.sourceforge.net/project/mbm/nm-patches/xxx709cfc6/NetworkManager-xxx709cfc6-MM_MODEM_GSM-defines.patch # wget http://downloads.sourceforge.net/project/mbm/nm-patches/xxx709cfc6/NetworkManager-xxx709cfc6-disable-modems-on-killswitch.patch # patch -p1 < NetworkManager-xxx709cfc6-MM_MODEM_GSM-defines.patch # patch -p1 < NetworkManager-xxx709cfc6-disable-modems-on-killswitch.patch # ./autogen.sh --prefix=/usr --sysconfdir=/etc --localstatedir=/var # make # sudo make install
Note: If you are having problems getting an IP when you try to connect later you may want to try using dhcpcd instead of dhclient which is the default dhcp client that is used. To do so replace the "./autogen.sh" command above with: "./autogen.sh --prefix=/usr --sysconfdir=/etc --localstatedir=/var --with-dhcp-client=dhcpcd". You may have to download and install dhcpcd >= 4.0 if it is not packaged in your distribution.
Do the same with modem-manager:
# git clone git://gitorious.org/modemmanager/mbm-mainline.git modem-manager # cd modem-manager # ./autogen.sh --prefix=/usr --sysconfdir=/etc --localstatedir=/var # make # sudo make install
And apply a patch to get correct information into hal.
# sudo patch -p0 < patches/mbm-f3507g_f3607gw-fdi.patch
For network-manager-applet a couple of patches also have to applied for proper modem-manager support. The patches are located in the patches/ subdir of the mbm modem-manager clone above.
Start by downloading network-manager-applet:
# svn export -r 1278 svn://svn.gnome.org/svn/network-manager-applet/trunk network-manager-applet # cd network-manager-applet
Then copy the patches required for modem-manager support and apply them. If prompted with any questions, accept the default answer:
# cp ../modem-manager/patches/nm-applet-r1053-use-modem-manager.patch . # cp ../modem-manager/patches/nm-applet-rXXX-use-tuples-in-mm-dbus.patch . # patch -p1 < nm-applet-r1053-use-modem-manager.patch # patch -p1 < nm-applet-rXXX-use-tuples-in-mm-dbus.patch
A couple of additional network-manager-applet patches have been developed by the mbm team. The first one will add some sim card handling functions to the connection editor (change pin, enable/disable pin, pin unlock and puk unlock). The second one adds a little emblem on the network-manager-applet system tray icon, showing the current network technology (gprs, edge, umts or hsdpa). These patches are optional but can be applied like this:
# cp ../modem-manager/patches/nm-applet-r1278-pin-functions.patch . # cp ../modem-manager/patches/nm-applet-r1278-modem-technology.tar.bz2 . # tar -xvjf nm-applet-r1278-modem-technology.tar.bz2 # patch -p1 < nm-applet-r1278-pin-functions.patch # patch -p1 < nm-applet-r1278-modem-technology.patch
When desired patches have been applied it is time to build and install:
# ./autogen.sh --prefix=/usr --sysconfdir=/etc --localstatedir=/var # make # sudo make install
If the nm-applet-r1278-modem-technology.patch patch was applied, execute the following to update icon caches so that the new icons can be found:
# sudo update-icon-caches /usr/share/icons/hicolor/
Finalizing the installation
To start using your brand new MBM enabled NetworkManager simply restart your system:
# sudo shutdown -r now
or for the brave one:
# sudo /etc/init.d/NetworkManager stop # sudo killall modem-manager # killall nm-applet # sudo /etc/init.d/NetworkManager start # nm-applet &
Now it should be possible to configure and use mobile broadband modules from the NetworkManager applet.
Basic support for Ericsson Mobile Broadband Modules is available in ConnMan. Some features like SIM lock is missing but basic connection works fine.
For more info visit the ConnMan site.
Since Moblin uses ConnMan as the default connection manager there is basic support available out of the box in Moblin 2.1. It uses a 2.6.31 kernel which means that not all Ericsson modules are supported without patching the kernel. See the table above for details about which modules are supported out of the box in the 2.6.31 kernel.
For more info visit the Moblin site
GPS Control (mbm-gpsd)
The GPS control software is developed with gpsd in mind. This means that gpsd will work with the pseudo-devices published by mbm-gpsd which in turn means that any gps application that uses gpsd will also work with the Ericsson modules. While it is possible to use the devices published by the modules directly (basic funcionality by sending AT-commands manually), mbm-gpsd will make things alot easier. For example it will automatically turn the gps on/off when clients connect, enter the pin/puk code and enable assisted gps mode which requires user interaction. For user interaction a control application; mbm-gps-control is also available.
There are currently no pre-built packages of mbm-gpsd or mbm-gps-control available so the only way to install them is by compiling it manually. As no stable releases have yet been made, the only way to get the code is currently by checking out the development versions from GIT.
First make sure that the build dependencies are met. As mbm-gpsd/mbm-gps-control has very similar dependencies to NetworkManager you can get all required dependencies by executing:
# sudo apt-get build-dep network-manager network-manager-gnome # sudo apt-get install libhal-dev
# git clone git://mbm.git.sourceforge.net/gitroot/mbm/mbm-gpsd # cd mbm-gpsd # ./autogen.sh --prefix=/usr --sysconfdir=/etc --localstatedir=/var # make # sudo make install Restart HAL so the new rules for mbm-gpsd are applied # sudo /etc/init.d/hal restart
# git clone git://mbm.git.sourceforge.net/gitroot/mbm/mbm-gps-control # cd mbm-gps-control # ./autogen.sh --prefix=/usr --sysconfdir=/etc --localstatedir=/var # make # sudo make install
For usage instructions see Using mbm-gpsd.
All downloads are available on the MBM sourceforge project page.
Click on the following image to upload a new version of the PNG logo image for your project: