This repository provides Yocto Project recipes and configurations for enabling cellular connectivity using the Qualcomm MSM Interface (QMI) protocol. It supports various cellular modems from different vendors, offering a modular and extensible architecture.
This project aims to simplify the integration of cellular modems into embedded Linux systems built with the Yocto Project. It provides a complete software stack, including:
- Core QMI Functionality: A core library for sending and receiving QMI messages.
- QMI Daemon: A daemon process that manages communication with the modem and loads modem-specific plugins.
- Modem-Specific Plugins: Plugins that handle the specific details of communicating with different modem models.
- Kernel Support: Recipes to ensure the necessary kernel modules and configurations are included in the image.
- Udev Rules: Udev rules for dynamic device node creation and management.
meta-firechip/: This is the main Yocto layer containing the QMI recipes.conf/: Layer configuration files (e.g.,layer.conf).recipes-connectivity/: Contains the recipes for the QMI stack.qmi-core-module/: Recipe for the core QMI library.qmi-daemon/: Recipe for the QMI daemon.qmi-firmware-update-plugin/: Recipe for a generic firmware update plugin.qmi-wwan/: Recipe for kernel modules and network configuration.qualcomm/: Contains recipes for specific Qualcomm-based modems.fibocom/,inforce-computing/,meig/,neoway/,quectel/,sierra-wireless/,simcom/,telit/,u-blox/,variscite/: Subdirectories for different vendors.vendor/model/: Subdirectories for specific modem models within each vendor.70-*.rules: Udev rules for the modem.*.bbappend: BitBake append files for customizing generic recipes.*-qmi-plugin/: Subdirectories containing modem-specific QMI plugins.*.bbappend: BitBake append files for customizing generic plugin recipes.CMakeLists.txt: CMake build files for the plugin.include/: Header files for the plugin.src/: Source code for the plugin.
To build the QMI stack, you need to integrate the meta-firechip layer into your Yocto build environment. Then, you can build your image using the standard BitBake command:
bitbake <your-image-name>Make sure that your kernel configuration includes the necessary options for QMI WWAN support (CONFIG_USB_NET_QMI_WWAN).
- qmi-core-module: Provides low-level functions for sending and receiving QMI messages. It does not handle QMI message encoding/decoding for specific services.
- qmi-daemon: A user-space daemon that manages communication with the modem. It loads modem-specific plugins and uses the
qmi-core-modulefor QMI communication. - Modem-Specific Plugins: These plugins handle the details of communicating with specific modem models, including QMI message encoding/decoding, handling specific QMI services, and implementing modem-specific functionalities.
- qmi-wwan: Ensures that the necessary kernel modules are included in the image and configures the network interface.
- Udev Rules: Automatically create consistent device nodes for the modem, regardless of the USB port it's connected to.
To add support for a new modem, you typically need to:
- Create a new directory under
meta-firechip/recipes-connectivity/qualcomm/<vendor>/<model>/. - Create udev rules (
70-*.rules) for the modem. - Create a modem-specific QMI plugin.
- Create a BitBake recipe for the plugin.
- If needed, create a
.bbappendfile to modify a generic recipe. - Add any required firmware packages as dependencies.
- Yocto Project
- GLib
- Jansson
- Linux kernel with QMI WWAN support (
CONFIG_USB_NET_QMI_WWAN)
Contributions are welcome! Please follow the Firechip project's contribution guidelines.
- Qualcomm QMI documentation (search online)
- u-blox documentation (if using a u-blox modem)
- Other modem vendor documentation