Thales' cellular IoT products business is now part of Telit Cinterion, find out more.

You are here

Telit Cinterion IoT Developer Community

5G product show case: running MV31 PCIe with MBIM on Linux Ubuntu OS

Showcase, September 22, 2022 - 10:31am, 1816 views

5G product show case: running MV31 PCIe with MBIM on Linux Ubuntu OS

======================

Introduction:
5G mobile data connections bring new requirements towards the interface links between the host systems and 5G cellular modules.

Upon Linux host OS, indeed the Linux community continuously (www.kernel.org) brings necessary changes to the kernel drivers, and also new versions of interface management tools to improve the modem compatibility and mobile network performance.

So it is highly recommended that customer application designs with cellular modules merge with up-to-date kernel versions.

By using the latest kernel release versions, many integration problems with module interfaces can be resolved in default. 

======================

Show case:

Below is an example on showing how to establish cellular data connection with our MV3x 5G product series under Linux OS, using MBIM network mode over PCIe/MHI physical interface.

With a step-to-step procedure this show case includes how to establish a MBIM data connection using libmbim library and mbimcli command line interface upon our MV31 5G data card as connected over PCIe interface to the host HW platform & Ubuntu Linux OS.

=======================
Host OS setup

On the Ubuntu OS 22.04 LTS, the latest kernel version with modem manager and libmbim facilities are being used:
 
sudo apt install
sudo apt upgrade
snap install modem-manager
sudo apt install libmbim-utils

Refer to:
https://www.kernel.org/category/releases.html

https://ubuntu.com/#download-content

===============================
MV3x 5G module PCIe & MHI driver  

The MV3x 5G products with their VID/PID have already been included in the Linux kernel (up from 5.15.x) MHI Driver as in /drivers/bus/mhi/host/pci_generic.c

Refer to:
https://docs.kernel.org/mhi/mhi.html
 
/drivers/bus/mhi/host/pci_generic.c

 static const struct pci_device_id mhi_pci_id_table[] = {
     /* MV31-W (Cinterion) */
     { PCI_DEVICE(0x1269, 0x00b3),
         .driver_data = (kernel_ulong_t) &mhi_mv31_info },
    /* MV31-2-W (Cinterion), based on new baseline */
    { PCI_DEVICE(0x1269, 0x00b4),
        .driver_data = (kernel_ulong_t) &mhi_mv31_info },
     /* MV32-WA (Cinterion) */
     { PCI_DEVICE(0x1269, 0x00ba),
         .driver_data = (kernel_ulong_t) &mhi_mv32_info },
    /* MV32-WB (Cinterion) */
     { PCI_DEVICE(0x1269, 0x00bb),
         .driver_data = (kernel_ulong_t) &mhi_mv32_info },

==========================

MV31 5G module FW versions

It is recommended to use the latest MV3x module FW releases, please contact our Thales IoT FAE/Sales people for details

=====================================
MBIM network interface

On the MV3x 5G products, with both the USB/PCIe variants, it is recommended to use the MBIM (Mobile Broadband Interface Model) data/control interfaces on Linux Kernel for 5G data transmissions

Refer to:
Ubuntu user guide "Configure Cellular Connections":
https://ubuntu.com/core/docs/networkmanager/configure-cellular-connections

https://www.kernel.org/doc/html/v5.8/networking/cdc_mbim.html

https://code.launchpad.net/ubuntu/+source/libmbim

https://www.freedesktop.org/software/libmbim/libmbim-glib/latest/

e.g.: a firmware update via the public libmbim APIs is possible since libmbim version 1.26.

=====================================
Running steps:

Attached please find the log file: "My-Test-log-with-MV31-FW-T99W175.F0.1.0.0.9.VF.007.058.txt"

Basically it includes the steps as showing how cellular data connection is built via command line/shell mode

1) check OS version + kernel version of Ubuntu
2) check PCI interface for MV31 device
3) check the status of ModemManager & wwan0 interface
4) stop the ModemManager as the service is active
5) check wwan0 interface again: all IP parameters are empty now
6) use the mbimcli commands for verfication on MBIM interface to MV31 module
  a) check the MV31 5G module FW version on Device capabilities
  b) check the MV31 module state & network registration state
  c) check the MV31 module on network packet data service
7) as the status of MBIM interface is okay, start MBIM-network
8) check wwan0 interface-> all the IP parameters are still empty
9) use mbimcli command to get the assigned IP parameters from MNO network ("Vodafone Germany" in the show case)
10) use the IP addr and route commands to add the IP parameters into wwan0
11) use ifconfig -a to double confirm that the IP parameters are correct on wwan0 network interface
12) as the cellular data connection is established on wwan0, start using the mobile data
  a) for example ping 8.8.8.8
  b) for example speedtest (installtion via sudo apt install speedtest.cli) 

=================================
On the customer target HW platforms & Linux Host systems

For design-in of data connection application in user space of LINUX, customers would need to call the libmbim API functions to be embedded in the applications, not only by using mbimcli commands

For example, the application will need to parse those IP parameters (as assigned by MNO networks, and indeed different MNO networks have different parameters) and put them into the configurations for IPs, routes, gateways...

This would require the customers to re-compile libmbim source code into the target host OS kernel.

Refer to LINUX libmbim:

https://www.linuxfromscratch.org/blfs/view/svn/general/libmbim.html

 static const struct pci_device_id mhi_pci_id_table[] = {
     /* MV31-W (Cinterion) */
     { PCI_DEVICE(0x1269, 0x00b3),
         .driver_data = (kernel_ulong_t) &mhi_mv31_info },
    /* MV31-2-W (Cinterion), based on new baseline */
    { PCI_DEVICE(0x1269, 0x00b4),
        .driver_data = (kernel_ulong_t) &mhi_mv31_info },
     /* MV32-WA (Cinterion) */
     { PCI_DEVICE(0x1269, 0x00ba),
         .driver_data = (kernel_ulong_t) &mhi_mv32_info },
    /* MV32-WB (Cinterion) */
     { PCI_DEVICE(0x1269, 0x00bb),
         .driver_data = (kernel_ulong_t) &mhi_mv32_info },

==========================

Thanks for the information.

https://iot-developer.thalesgroup.com/showcase/5g-product-show-case-runn...lol beans

Author

wemei's picture
wemei