
QUECTEL Android RIL Driver

Specifications
- Product: Android RIL Driver
- Version: 2.2
- Date: 2026-01-28
- Status: Released
Product Information
The Android RIL Driver is a software component designed to facilitate communication between Android devices and radio hardware. It allows for the integration of cellular connectivity features into Android-based systems.
Product Usage Instructions
Installation and Integration:
To use the Android RIL Driver, follow these steps:
- Download the latest version of the driver from the official website.
- Install the driver on your Android device according to the provided instructions.
- Integrate the driver with your application or system to enable cellular communication functionalities.
Configuration:
Once installed, configure the Android RIL Driver by following these guidelines:
- Access the driver settings through the device settings menu.
- Adjust parameters such as network settings, preferred bands, and SIM card configurations as needed.
Troubleshooting:
If you encounter any issues with the Android RIL Driver, refer to the troubleshooting section in the user manual. Common problems and solutions are provided to assist you in resolving connectivity or functionality issues.
At Quectel, we aim to provide timely and comprehensive services to our customers. If you require any assistance, please contact our headquarters:
Quectel Wireless Solutions Co., Ltd.
- No. 8 Waipojing Road, Sijing Town, Songjiang District, Shanghai 201601, China
- Tel: +86 21 5108 6236
- Email: info@quectel.com
Or our local offices. For more information, please visit:
For technical support or to report documentation errors, please visit:
- https://www.quectel.com/tech-support/.
- Or email us at: support@quectel.com.
Legal Notices
We provide this document to support your product design. You are required to design your products based on the specifications and parameters set forth herein. You agree that you are responsible for using independent analysis and evaluation in designing intended products, and we provide reference designs for illustrative purposes only. Before using any hardware, software, or service guided by this document, please read this notice carefully. Even though we employ commercially reasonable efforts to provide the best possible experience, you hereby acknowledge and agree that this document and related services hereunder are provided to you on an “as available” basis. You acknowledge and agree that we may add to, amend, or restate this document at any time at our sole discretion without any prior notice to you, and such additions, amendments, or restatements shall be binding upon you.
Use and Disclosure Restrictions
License Agreements
The recipient of any hardware, software, materials, or documentation provided by us shall keep such content confidential, unless expressly authorised by us. The recipient shall not disclose, access, or use any part of the received content for any purpose other than the execution and implementation of the intended project.
Copyright
Our and third-party products hereunder may contain copyrighted materials, including but not limited to protected content, hardware, software, and documentation owned by us or applicable third parties. Unless prior written consent is obtained, you shall not access, use, or disclose any documents or information provided by us, nor shall you copy, reproduce, republish, display, translate, distribute, merge, modify, or create derivative works from any such copyrighted materials. The applicable third party and we retain exclusive rights to all copyrighted materials.
No license to any patents, copyrights, trademarks, or service marks shall be granted or transferred. For the avoidance of doubt, no form of purchase shall be construed as granting any license beyond a normal, non-exclusive, royalty-free license to use the product. We reserve the right to pursue legal action against any violation of confidentiality obligations, unauthorised use, or any other unlawful or malicious use of the aforementioned documents and information.
Trademarks
Unless otherwise expressly provided, nothing in this document shall be construed as conferring any rights to use any trademark, trade name, name, abbreviation, or counterfeit thereof owned by us or any third party in advertising, publicity, or any other contexts.
Third-Party Rights
You understand that this document may refer to hardware, software, and/or documentation owned by one or more third parties (“third-party materials”). Use of such third-party materials is subject to all applicable restrictions and obligations set forth herein.
We make no warranty or representation, either express or implied, regarding the third-party materials, including but not limited to any implied or statutory warranties of merchantability or fitness for a particular purpose, quiet enjoyment, system integration, information accuracy, and non-infringement of any third-party intellectual property rights regarding the licensed technology or use thereof. Nothing herein constitutes a representation or warranty by us to either develop, enhance, modify, distribute, market, sell, offer for sale, or otherwise maintain production of any of our products or any other hardware, software, device, tool, information, or product. We disclaim any warranties arising from the course of dealing, course of performance, or usage of trade.
Privacy Policy
To enable product functionality, certain device data may be uploaded to our or third-party servers, including those operated by carriers, chipset suppliers, or servers designated by you. We strictly comply with applicable laws and regulations and will retain, use, disclose, or otherwise process relevant data solely for the purpose of enabling product functionality, or as permitted by applicable laws. Before interacting with any third party regarding data exchange, please be informed of and understand their privacy and data security policies.
Disclaimer
- a) We shall not be liable for any damages resulting from failure to comply with applicable operational or design specifications.
- b) We shall bear no liability for any inaccuracies or omissions in this document, nor for any damages arising from the use of the information contained herein.
- c) While we make every effort to ensure the integrity, accuracy, and timeliness of the features and functions under development, errors or omissions may nevertheless occur. Unless otherwise provided in a valid written agreement, we make no warranties of any kind, express, implied, or statutory, and disclaim all liability for any loss or damage arising from the use of any features or functions under development, to the maximum extent permitted by law, regardless of whether such loss or damage is foreseeable.
- d) We assume no legal responsibility for the accessibility, safety, accuracy, availability, legality, or completeness of any information, content, advertising, commercial offers, products, services, or materials on third-party websites or third-party resources.
About the Document
Revision History


Introduction
This document mainly introduces how to integrate the RIL (Radio Interface Layer) driver into the Android OS of your target devices, as well as how to modify the configuration files for starting the RIL service.
Applicable Modules
The document applies to the following Quectel modules.
Table 1: Applicable Modules

NOTE
Quectel modules listed above may include only a single model or multiple models. See the corresponding module specifications for more specific information.
Overview of Android RIL Driver
Directory Structure
The file structure of the Quectel RIL driver package is shown below.

Supported Functions
Quectel RIL driver supports the following functions.
Table 2: Supported Functions

Supported Android Versions
Currently, the Quectel RIL driver supports Android 4.x–16.x.
Supported RIL Versions
Quectel RIL driver supports the following RIL versions.

RIL Integration
The chapter mainly describes the Android RIL architecture and procedures for setting up an Android system with the RIL driver.
Android RIL Architecture
Android RIL provides the abstract layer between Android telephony services and the radio hardware. The following figure illustrates the RIL in the context of Android telephony architecture.

Located between the kernel and application framework, the Android RIL consists of two parts: RILD and Vendor RIL. RILD is responsible for communications between the socket and the application framework, while Vendor RIL is responsible for radio communication via AT command channel and data communication via packet data channel (PDCH).
Additionally, the Java framework of RIL consists of two parts as well: the RIL module and the phone module. The RIL module communicates with the lower RILD, while the phone module directly provides phone function interfaces to applications.
PPP Configuration in Linux Kernel
If the PPP dial-up function is needed, you need to configure the kernel to support the function. Otherwise, skip this step. For detailed procedures, see document [1].
USB Driver Integration in Linux Kernel
For modules accessed via USB interface, integrate the USB drivers into the Linux kernel. Otherwise, skip this step. For detailed procedures, see document [1].
RIL Driver Integration by Library
Put the corresponding RIL library files provided by Quectel in the following path of the Android system.
IRadio 1.0 (Default)


NOTE
- For Android 11.x–16.x or IRadio 1.4–1.6, Quectel RIL driver V3.3.40 or later versions should be used.
- For AIDL1, the Quectel RIL driver V4.0 or later versions should be used.
- For AIDL 2, the Quectel RIL driver V4.1 or later versions should be used.
- For AIDL 3, the Quectel RIL driver V4.2 or later versions should be used.
System Configuration
In order to use the RIL driver normally, some configuration files in the Android system should be modified.
Configuring Service ril-daemon
Service ril-daemon can be configured by adding the following lines to init*.rc or *rild.rc. The relevant lines vary depending on the accessing interface and the Android version being used. See Chapter 3.5.1.1 and Chapter 3.5.1.2 for details.
The location of init*.rc varies according to your project settings. The following gives a non-exhaustive list of file paths that may contain the init*.rc file.
- device/fsl/imx6dq/sabresd_6dq/init.rc
- device/ti/am335xevm_sk/init.am335xevm.rc
- device/rockchip/rk3399/init.rk3399.rc
- device/samsung/smdkv210/init.smdkv210_sdmmc.rc
rild.rc is only available for Android 7.x or later versions.
NOTE
The name of the RILD service might also be vendor.ril-daemon. In this document, we will only use the service ril-daemon for illustration.
Modules Accessed via USB/PCIe Interface
For modules accessed via USB/PCIe interface, add the following lines to init*.rc or *rild.rc.
For Android 4.x–7.x
- service ril-daemon /system/bin/rild -l <libreference-ril path>
- class main
- socket rild stream 660 root radio
- socket rild-debug stream 660 radio system
- user root
- group radio cache inet misc audio sdcard_rw log
For Android 8.x–16.x
- service ril-daemon /vendor/bin/hw/rild -l <libreference-ril path>
- class main
- user root
- group radio cache inet misc audio sdcard_rw log
- capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW
Parameter

Modules Accessed via UART Interface
For modules accessed via UART interface, add the following lines to init*.rc or *rild.rc.
For Android 4.x–7.x
- service ril-daemon /system/bin/rild -l <libreference-ril path> — -d <UART port name> -B <baud rate> -C
- <hardware flow control>
- class main
- socket rild stream 660 root radio
- socket rild-debug stream 660 radio system
- user root
- group radio cache inet misc audio sdcard_rw log
For Android 8.x–16.x
- service ril-daemon /vendor/bin/hw/rild -l <libreference-ril path> — -d <UART port name> -B <baud rate>
- -C <hardware flow control>
- class main
- user root
- group radio cache inet misc audio sdcard_rw log
- capabilities BLOCK_SUSPEND NET_ADMIN NET_RAW
Parameter

Modifying rild.c (for Android 4.x–7.x)
For Android 4.x–7.x, comment the switchUser() function in the file ($Android_src)/hardware/ril/rild/rild.c to get root privilege for RILD (ril-daemon).

Adding HIDL Description (for Android 8.x–16.x)
For Android 8.x–16.x, the communication interface between the Android phone framework and the service ril-daemon has changed from socket to HIDL. Therefore, the following HIDL description needs to be added to manifest.xml.
IRadio 1.0 (Default)
For Android 8.x/9.x:


Adding AIDL Description (for Android 13.x–16.x)
For Android 13.x and later versions, an alternative AIDL is introduced alongside the existing HIDL. When using AIDL-based communication (mutually exclusive with HIDL), the following AIDL service declaration must be added to manifest.xml.
AIDL 1–3
For Android 13.x–16.x:


NOTE
- The Android versions supported by AIDL 1/2/3 are as follows:
- AIDL 1: Android 13.x–16.x;
- AIDL 2: Android 14.x–16.x;
- AIDL 3: Android 15.x–16.x.
- Add either AIDL or HIDL description to manifest.xml. Do not add both descriptions to the file.
- The location of the manifest.xml file varies according to your project settings. For example:
- device/rockchip/rk3399/manifest.xml
- device/fsl/imx6dq/sabresd_6dq/manifest.xml
SELinux Configuration
If the SELinux installed in your Android devices is enabled (i.e., in enforcing mode), follow the procedures below to make sure that the Quectel RIL driver has full access to SELinux privileges. Otherwise, you can skip this chapter.
Modifying Service ril-daemon Configuration
To make sure the Quectel RIL driver has full access to SELinux privileges, the user of the service ril-daemon should be radio. Therefore, the user of the service ril-daemon in the lines illustrated in Chapter 3.5.1 should be changed from root to radio. An example with Android 8.x–16. x versions for modules accessed via the UPCIe interface are shown below.

To make sure Quectel RIL has full access to SELinux privileges, the switchUser() function mentioned in Chapter 3.5.2 should be uncommented.
Configuring SELinux Rule for RIL
The following definition should be added to ueventd.rc:


The following definition should be added to rild.te:
allow rild self:packet_socket { create bind write read };
The locations of ueventd.rc, file_contexts and rild.t e may vary according to your project settings. But in general, these files are located in the following paths, respectively, by default.
- device/fsl/imx6dq/sabresd_6dq/ueventd.freescale.rc
- device/fsl/imx6dq/sabresd_6dq/sepolicy/file_contexts
- device/fsl/imx6dq/sabresd_6dq/sepolicy/rild.te
- device/rockchip/common/ueventd.rockchip.rc
- device/rockchip/common/sepolicy/file_contexts
Debugging Methods
Catching Logs Automatically (Recommended)
Catching logs automatically is recommended for the Quectel RIL driver, and you should fulfil two prerequisites: SELinux is disabled,d and the library files applied are provided by Quectel. The detailed procedures are as follows:

Catching Logs Manually
Quectel RIL driver also supports catching logs manually. The detailed procedures are as follows:
- Catch the logs of the RIL module by typing the following command in the Windows CMD tool:
adb logcat -b radio -v time - Catch the logs of the Android system by typing the following command in the Windows CMD tool:
adb logcat -v time
Common Log Tags
The following table lists some log tags that are commonly applied.

How to Set APN
If the dialling process is interrupted, it is quite possible that the APN has not been set yet. Check the APN in Android UI: “Settings” → “WIRELESS & NETWORKS” → “…” → “Mobile Networks” → “Access Point Names”. If nothing is found in “Access Point Names”, it indicates that the APN has not been set. In such a case, you need to add a new APN to the system. The following figure shows an example of the access point editing interface. Please note that the Access Point Name varies according to operators and (U)SIM cards.

Why the Quectel RIL Driver Does Not Work
Many reasons may cause the failed operation of Quectel RIL. Some common causes are listed below for troubleshooting.
- RIL daemon is not running.
Use getprop init.svc.ril-daemon to check the status of the RIL daemon. If no value is returned or values like Stopped or Restarting are returned instead of Running, it indicates that the RIL daemon is not running. - RIL library is not loaded correctly.
Check the definition of service ril-daemon in init*.rc through cat /init*.rc | grep ril-daemon or in *rild.rc through cat /vendor/etc/init/*rild.rc | grep ril-daemon.
The expected result should be one of the following:- service ril-daemon /system/bin/rild -l /system/*/libreference-ril.so
- service ril-daemon /system/bin/rild -l /vendor/*/libreference-ril.so
- service ril-daemon /vendor/bin/hw/rild -l /vendor/*/libreference-ril.so
Check the arguments, word spelling, blank space, etc., to make sure the RIL library is loaded correctly.
- Failed to access USB serial port device file.
- Use ls -l /dev/ttyUSB* to check access rights of the device file.
- Use getenforce to check whether SELinux is enabled. If yes, use setenforce 0 to disable SELinux first and then check whether the access becomes normal.
The RIL library is not provided by Quectel.
Use getprop gsm.version.ril-impl to check the Quectel RIL version, and the returned value should start with Quectel_Android_RIL_Driver_V. If not, it indicates the RIL library is not provided by Quectel.
Why Phone Process Does Not Work
Android system determines whether the system supports data access, phone, SMS and other features by configuring the items. The items to be configured and files to be installed are listed below. Please check whether the configuration is correct. Take imx6q as an example:
- If data access is required, the attribute networkAttributes must contain the following items:

- If the phone feature is required, configure it as follows:

- If SMS is required, configure it as follows:

The above three configurations are in the file config.xml. The path can be, for example, device/fsl/imx6dq/sabresd_6dq/overlay/frameworks/base/core/res/res/values/config.xml.
The following files must be installed on the Android device.
- /vendor/bin/hw/rild
- /vendor/lib/libril.so
- /system/priv-app/TeleService/TeleService.apk
- /system/priv-app/TelephonyProvider/TelephonyProvider.apk
- /system/framework/telephony-common.jar
Appendix References
Table 5: Related Document

Table 6: Terms and Abbreviations


FAQs
What are the supported Android versions for the Android RIL Driver?
Documents / Resources
![]() | Android RIL Driver |
![]() | Android RIL Driver |
References
- User Manualmanual.tools


