Build Android 13 with 4G/LTE Support

Which system do you use? Android, Ubuntu, OOWOW or others?

Android

Which version of system do you use? Please provide the version of the system here:

13

Please describe your issue below:

I have a Quectel EM060K-GL module and im using a USB 3.0 to m.2 Key B adapter to connect to the Khadas Edge 2. Im trying to build Android 13 to support this LTE module.

I have successfully setup the development environment as per the development instructions on the khadas wiki. So far i can build successfully with rild and the Quectel drivers. The system recognises the module and the SIM card and is able to communicate using AT commands:

logcat -b radio -v time output on boot:

10-14 15:47:53.272 D/RILD    ( 2136): **RIL Daemon Started**
10-14 15:47:53.272 D/RILD    ( 2136): **RILd param count=1**
10-14 15:47:53.276 D/RILD    ( 2136): RIL_Init argc = 3 clientId = 0
10-14 15:47:53.276 D/RILC    ( 2136): Quectel RIL Version: Quectel_Android_RIL_Driver_V3.6.24_master_Release_20231211_10_47
10-14 15:47:53.276 D/RILC    ( 2136): [ro.build.version.release]: [13]
10-14 15:47:53.276 D/RILC    ( 2136): Android Version: 130, RIL_VERSION: 12 / 12
10-14 15:47:53.277 E/RILC    ( 2136): '/vendor/manifest.xml' not exist.
10-14 15:47:53.277 D/RILC    ( 2136): __getIRadioVersion:673 IRadioVersion:4
10-14 15:47:53.277 D/RILC    ( 2136): [ro.build.description]: [kedge2-userdebug 13 TQ3C.230805.001.B2 eng.ubuntu.20241014.130219 release-keys]
10-14 15:47:53.277 D/RILC    ( 2136): [ro.hardware]: [rk30board]
10-14 15:47:53.277 D/RILC    ( 2136): selinux maybe set Enforcing mode, use command getenforce to check
10-14 15:47:53.277 D/RILC    ( 2136): selinux maybe set Enforcing mode, use command "setenforce 0" to disable
10-14 15:47:53.277 I/RILC    ( 2136): clientID = 0
10-14 15:47:53.277 D/RILD    ( 2136): RIL_Init rilInit completed
10-14 15:47:53.277 I/RILC    ( 2136): SIM_COUNT: 1
10-14 15:47:53.277 E/RILC    ( 2136): RIL_register: RIL version 12
10-14 15:47:53.277 I/RILC    ( 2136): s_registerCalled flag set, 1
10-14 15:47:53.277 I/RILC    ( 2136): mainLoop Start
10-14 15:47:53.277 D/RILC    ( 2136): registerService: starting android::hardware::radio::V1_1::IRadio slot1
10-14 15:47:53.277 D/RILU    ( 2136): vendor is 0x14e4
10-14 15:47:53.277 D/RILU    ( 2136): device is 0x449d
10-14 15:47:53.277 D/RILU    ( 2136): **************1********************
10-14 15:47:53.277 D/RILU    ( 2136): **************1********************
10-14 15:47:53.277 D/RILU    ( 2136): **************1********************
10-14 15:47:53.277 D/RILU    ( 2136): **************1********************
10-14 15:47:53.277 D/RILU    ( 2136): vendor is 0x1d87
10-14 15:47:53.277 D/RILU    ( 2136): device is 0x3588
10-14 15:47:53.277 D/RILU    ( 2136): **************1********************
10-14 15:47:53.277 D/RILU    ( 2136): **************1********************
10-14 15:47:53.277 D/RILU    ( 2136): **************1********************
10-14 15:47:53.277 D/RILU    ( 2136): **************1********************
10-14 15:47:53.277 D/RILU    ( 2136): find_pci_device is 0
10-14 15:47:53.277 D/RILC    ( 2136): PCI can't find at device
10-14 15:47:53.278 I/RILC    ( 2136): RILHIDL called registerService
10-14 15:47:53.278 D/RILD    ( 2136): RIL_Init RIL_register completed
10-14 15:47:53.278 D/RILD    ( 2136): RIL_register_socket started
10-14 15:47:53.278 D/RIL_UIM_SOCKET( 2136): Adding socket with id: 0
10-14 15:47:53.278 I/RILC    ( 2136): RIL_register_socket: calling registerService
10-14 15:47:53.278 D/RIL_SAP ( 2136): registerService: starting ISap slot1 for slotId 0
10-14 15:47:53.278 D/RILU    ( 2136): find quectel module /sys/bus/usb/devices/2-1 idVendor=2c7c idProduct=030b
10-14 15:47:53.278 D/RILU    ( 2136): find_usb_device is 1
10-14 15:47:53.279 D/RIL_SAP ( 2136): registerService: started ISap slot1 status 0
10-14 15:47:53.279 D/RILD    ( 2136): RIL_register_socket completed
10-14 15:47:54.278 D/RILC    ( 2136): dlopen /vendor/lib64/hw/radio.quectel.module.so failed: dlopen failed: library "/vendor/lib64/hw/radio.quectel.module.so" not found
10-14 15:47:54.278 D/RILC    ( 2136): start the service through api...
10-14 15:47:54.278 D/RILC    ( 2136): ql_radio_config_init start
10-14 15:47:54.278 E/RadioConfigFactory( 2136): '/vendor/manifest.xml' not exist.
10-14 15:47:54.278 D/RadioConfigImpl( 2136): RadioConfigImpl()
10-14 15:47:54.278 D/RadioConfigImpl_1_2( 2136): RadioConfigImpl_1_2:registerAsService(default)
10-14 15:47:54.279 D/RadioConfigFactory( 2136): radio_config_register_service status=-2147483648
10-14 15:47:54.279 D/RILC    ( 2136): ql_radio_config_init finish
10-14 15:47:54.279 D/RILC    ( 2136): ql_radio_sap_init start
10-14 15:47:54.279 D/RIL_SAP_1_2( 2136): ql_radio_sap_init() start.
10-14 15:47:54.280 D/RIL_SAP_1_2( 2136): radio_sap_register_service status=0
10-14 15:47:54.280 D/RILC    ( 2136): ql_radio_sap_init finish
10-14 15:47:54.281 D/RILU    ( 2136): find /sys/bus/usb/devices/2-1:1.2/ttyUSB2
10-14 15:47:54.281 D/RILU    ( 2136): ttyAT = ttyUSB2
10-14 15:47:54.281 D/RILU    ( 2136): find /sys/bus/usb/devices/2-1:1.3/ttyUSB3
10-14 15:47:54.281 D/RILU    ( 2136): ttyPPP = ttyUSB3
10-14 15:47:54.281 D/RILU    ( 2136): find /sys/bus/usb/devices/2-1:1.0/ttyUSB0
10-14 15:47:54.281 D/RILU    ( 2136): ttyDM = ttyUSB0
10-14 15:47:54.281 D/RILU    ( 2136): find /sys/bus/usb/devices/2-1:1.1/ttyUSB1
10-14 15:47:54.281 D/RILU    ( 2136): ttyGPS = ttyUSB1
10-14 15:47:54.281 E/RILU    ( 2136): unknow bInterfaceClass=, bInterfaceSubClass=
10-14 15:47:54.281 D/RILC    ( 2136): quectel at port is /dev/ttyUSB2
10-14 15:47:54.281 D/RILU    ( 2136): ql_set_autosuspend, enter...
10-14 15:47:54.281 D/RILU    ( 2136): ro_hardware:rk30board
10-14 15:47:54.281 D/RILU    ( 2136): ----------------------------------------------2:rk30board
10-14 15:47:54.281 D/RILU    ( 2136): ----------------------------------------------3:1
10-14 15:47:54.281 D/RILU    ( 2136): ----------------------------------------------3:2
10-14 15:47:54.297 D/RILU    ( 2136): echo on > /sys/bus/usb/devices/2-1/power/control
10-14 15:47:54.297 D/RILU    ( 2136): ql_set_autosuspend off
10-14 15:47:54.297 D/RILU    ( 2136): ----------------------------------------------3:3
10-14 15:47:54.297 D/RILU    ( 2136): ----------------------------------------------3:1
10-14 15:47:54.297 D/RILU    ( 2136): ----------------------------------------------3:3
10-14 15:47:54.297 D/RILU    ( 2136): ----------------------------------------------3:1
10-14 15:47:54.297 D/RILU    ( 2136): ----------------------------------------------3:3
10-14 15:47:54.297 D/RILU    ( 2136): ----------------------------------------------3:1
10-14 15:47:54.297 D/RILU    ( 2136): ----------------------------------------------3:3
10-14 15:47:54.297 D/RILU    ( 2136): ----------------------------------------------4
10-14 15:47:54.297 D/RILC    ( 2136): s_device_path is /dev/ttyUSB2
10-14 15:47:54.299 D/RILC    ( 2136): open device /dev/ttyUSB2 correctly
10-14 15:47:54.299 E/ATC     ( 2136): at_open s_tild_reader = 479127497904
10-14 15:47:54.299 D/ATC     ( 2136): AT> ATE0
10-14 15:47:54.299 D/ATC     ( 2136): AT> AT+CMEE=1
10-14 15:47:54.299 D/ATC     ( 2136): AT> ATI
10-14 15:47:54.299 D/ATC     ( 2136): AT> AT+CVERSION
10-14 15:47:54.302 D/ATC     ( 2136): AT< AT+CVERSION
10-14 15:47:54.303 D/ATC     ( 2136): AT< VERSION: EM060KGLAAR01A11M2G
10-14 15:47:54.303 D/ATC     ( 2136): AT< Sep 26 2023 10:06:59
10-14 15:47:54.303 D/ATC     ( 2136): AT< Authors: QCT
10-14 15:47:54.303 D/ATC     ( 2136): AT< OK
10-14 15:47:54.303 D/RILC    ( 2136): ql_product_version is EM060KGLAAR01A11M2G
10-14 15:47:54.303 D/RILC    ( 2136): ql_product_version is EM060KGLAAR01A11M2G
10-14 15:47:54.303 D/RILC    ( 2136): Quectel Product Revision: EM060KGLAAR01A11M2G
10-14 15:47:54.303 D/RILU    ( 2136): ql_set_autosuspend, enter...
10-14 15:47:54.303 D/RILU    ( 2136): ro_hardware:rk30board
10-14 15:47:54.303 D/RILU    ( 2136): ----------------------------------------------2:rk30board
10-14 15:47:54.303 D/RILU    ( 2136): ----------------------------------------------3:1
10-14 15:47:54.303 D/RILU    ( 2136): ----------------------------------------------3:2
10-14 15:47:54.314 D/RILU    ( 2136): echo on > /sys/bus/usb/devices/2-1/power/control
10-14 15:47:54.314 D/RILU    ( 2136): ql_set_autosuspend off
10-14 15:47:54.314 D/RILU    ( 2136): ----------------------------------------------3:3
10-14 15:47:54.314 D/RILU    ( 2136): ----------------------------------------------3:1
10-14 15:47:54.315 D/RILU    ( 2136): ----------------------------------------------3:3
10-14 15:47:54.315 D/RILU    ( 2136): ----------------------------------------------3:1
10-14 15:47:54.315 D/RILU    ( 2136): ----------------------------------------------3:3
10-14 15:47:54.315 D/RILU    ( 2136): ----------------------------------------------3:1
10-14 15:47:54.315 D/RILU    ( 2136): ----------------------------------------------3:3
10-14 15:47:54.315 D/RILU    ( 2136): ----------------------------------------------4
10-14 15:47:54.315 D/ATC     ( 2136): AT> AT+AUTOAPN=0
10-14 15:47:54.317 D/ATC     ( 2136): AT< AT+AUTOAPN=0
10-14 15:47:54.317 D/ATC     ( 2136): AT< ERROR
10-14 15:47:54.317 D/RILC    ( 2136): 9X07
10-14 15:47:54.318 D/ATC     ( 2136): AT> AT+CSUB;+CVERSION
10-14 15:47:54.325 D/ATC     ( 2136): AT< AT+CSUB;+CVERSION
10-14 15:47:54.325 D/ATC     ( 2136): AT< SubEdition: V02
10-14 15:47:54.325 D/ATC     ( 2136): AT< VERSION: EM060KGLAAR01A11M2G
10-14 15:47:54.325 D/ATC     ( 2136): AT< Sep 26 2023 10:06:59
10-14 15:47:54.325 D/ATC     ( 2136): AT< Authors: QCT
10-14 15:47:54.325 D/ATC     ( 2136): AT< OK
10-14 15:47:54.326 D/ATC     ( 2136): AT> ATE0
10-14 15:47:54.332 D/ATC     ( 2136): AT< ATE0
10-14 15:47:54.332 D/ATC     ( 2136): AT< OK
10-14 15:47:54.332 D/ATC     ( 2136): AT> at+cmee=1
10-14 15:47:54.333 D/ATC     ( 2136): AT< OK
10-14 15:47:54.333 D/ATC     ( 2136): AT> ATS0=0
10-14 15:47:54.334 D/ATC     ( 2136): AT< OK
10-14 15:47:54.334 D/ATC     ( 2136): AT> AT+QURCCFG="URCPORT","usbat"
10-14 15:47:54.337 D/ATC     ( 2136): AT< OK
10-14 15:47:54.337 D/ATC     ( 2136): AT> AT&D2
10-14 15:47:54.340 D/ATC     ( 2136): AT< OK
10-14 15:47:54.340 D/ATC     ( 2136): AT> AT+CMEE=1
10-14 15:47:54.345 D/ATC     ( 2136): AT< OK
10-14 15:47:54.345 D/ATC     ( 2136): AT> AT+QCFG="ims",1
10-14 15:47:54.352 D/ATC     ( 2136): AT< OK
10-14 15:47:54.352 D/ATC     ( 2136): AT> AT+CREG=2
10-14 15:47:54.360 D/ATC     ( 2136): AT< OK
10-14 15:47:54.360 D/ATC     ( 2136): AT> AT+CREG=2
10-14 15:47:54.361 D/ATC     ( 2136): AT< OK
10-14 15:47:54.362 D/ATC     ( 2136): AT> AT+CGREG=2
10-14 15:47:54.363 D/ATC     ( 2136): AT< OK
10-14 15:47:54.363 D/ATC     ( 2136): AT> AT+CEREG=2
10-14 15:47:54.364 D/ATC     ( 2136): AT< OK
10-14 15:47:54.364 D/ATC     ( 2136): AT> AT+C5GREG=2
10-14 15:47:54.364 D/ATC     ( 2136): AT< ERROR
10-14 15:47:54.364 D/ATC     ( 2136): AT> AT+QENDC=1
10-14 15:47:54.367 D/ATC     ( 2136): AT< ERROR
10-14 15:47:54.367 D/ATC     ( 2136): AT> AT^DSCI=1
10-14 15:47:54.373 D/ATC     ( 2136): AT< OK
10-14 15:47:54.373 D/ATC     ( 2136): AT> AT+CFUN?
10-14 15:47:54.384 D/ATC     ( 2136): AT< +CFUN: 1
10-14 15:47:54.385 D/ATC     ( 2136): AT< OK
10-14 15:47:54.385 D/ATC     ( 2136): AT> AT+CPIN?
10-14 15:47:54.386 D/ATC     ( 2136): AT< +CPIN: READY
10-14 15:47:54.386 D/ATC     ( 2136): AT< OK
10-14 15:47:54.386 D/ATC     ( 2136): AT> AT+CFUN?
10-14 15:47:54.387 D/ATC     ( 2136): AT< +CFUN: 1
10-14 15:47:54.387 D/ATC     ( 2136): AT< OK
10-14 15:47:54.387 I/RILC    ( 2136): [setRadioState]:oldState=1, newState=2
10-14 15:47:54.388 E/RILC    ( 2136): radioStateChangedInd: radioService[0]->mRadioIndication == NULL
10-14 15:47:54.389 D/ATC     ( 2136): AT> AT+CPIN?
10-14 15:47:54.390 D/ATC     ( 2136): AT< +CPIN: READY
10-14 15:47:54.390 D/ATC     ( 2136): AT< OK
10-14 15:47:54.390 I/RILC    ( 2136): [setRadioState]:oldState=2, newState=4
10-14 15:47:54.390 E/RILC    ( 2136): radioStateChangedInd: radioService[0]->mRadioIndication == NULL
10-14 15:47:54.390 D/ATC     ( 2136): AT> AT+QNVFR="/nv/item_files/modem/mmode/ue_usage_setting"
10-14 15:47:54.395 D/ATC     ( 2136): AT< +QNVFR: 01
10-14 15:47:54.395 D/ATC     ( 2136): AT< OK
10-14 15:47:54.395 D/ATC     ( 2136): AT> AT+QINISTAT
10-14 15:47:54.396 D/ATC     ( 2136): AT< +QINISTAT: 7
10-14 15:47:54.396 D/ATC     ( 2136): AT< OK
10-14 15:47:54.396 D/ATC     ( 2136): AT> AT+CNMI=2,2
10-14 15:47:54.402 D/ATC     ( 2136): AT< OK
10-14 15:47:54.402 D/ATC     ( 2136): AT> AT+CMGF=0
10-14 15:47:54.403 D/ATC     ( 2136): AT< OK
10-14 15:47:54.403 D/ATC     ( 2136): AT> AT+CCWA=1
10-14 15:47:54.404 D/ATC     ( 2136): AT< OK
10-14 15:47:54.404 D/ATC     ( 2136): AT> AT+CMOD=0
10-14 15:47:54.405 D/ATC     ( 2136): AT< OK
10-14 15:47:54.405 D/ATC     ( 2136): AT> AT+CMUT=0
10-14 15:47:54.421 D/ATC     ( 2136): AT< OK
10-14 15:47:54.421 D/ATC     ( 2136): AT> AT+CSSN=0,1
10-14 15:47:54.429 D/ATC     ( 2136): AT< OK
10-14 15:47:54.430 D/ATC     ( 2136): AT> AT+COLP=0
10-14 15:47:54.431 D/ATC     ( 2136): AT< OK
10-14 15:47:54.431 D/ATC     ( 2136): AT> AT+CSCS="UCS2"
10-14 15:47:54.432 D/ATC     ( 2136): AT< OK
10-14 15:47:54.432 D/ATC     ( 2136): AT> AT+CUSD=1
10-14 15:47:54.433 D/ATC     ( 2136): AT< OK
10-14 15:47:54.433 D/ATC     ( 2136): AT> AT+CGEREP=0
10-14 15:47:54.434 D/ATC     ( 2136): AT< OK
10-14 15:47:54.434 D/ATC     ( 2136): AT> AT+CGEREP=0
10-14 15:47:54.435 D/ATC     ( 2136): AT< OK
10-14 15:47:54.435 D/ATC     ( 2136): AT> AT+CTZU=1
10-14 15:47:54.438 D/ATC     ( 2136): AT< OK
10-14 15:47:54.438 D/ATC     ( 2136): AT> AT+CTZR=2
10-14 15:47:54.440 D/ATC     ( 2136): AT< OK
10-14 15:47:54.440 E/RILC    ( 2136): simStatusChangedInd: radioService[0]->mRadioIndication == NULL
10-14 15:47:54.440 D/ATC     ( 2136): AT> AT+QCFG="speed"
10-14 15:47:54.441 D/ATC     ( 2136): AT< ERROR
10-14 15:47:54.441 D/ATC     ( 2136): AT> AT+QNWCFG="lte_pco",2
10-14 15:47:54.444 D/ATC     ( 2136): AT< ERROR
10-14 15:47:54.444 D/SIGNAL_STRENGTH( 2136): requestSignalStrength:720 iradio_version = 4
10-14 15:47:54.444 D/ATC     ( 2136): AT> AT+COPS=3,0;+COPS?;+COPS=3,1;+COPS?
10-14 15:47:54.455 D/ATC     ( 2136): AT< +COPS: 0,0,"vodafone UK",7
10-14 15:47:54.455 D/ATC     ( 2136): AT< +COPS: 0,1,"voda UK",7
10-14 15:47:54.455 D/ATC     ( 2136): AT< OK
10-14 15:47:54.455 D/ATC     ( 2136): AT> AT+QENG="servingcell"
10-14 15:47:54.457 D/ATC     ( 2136): AT< +QENG: "servingcell","NOCONN","LTE","FDD",234,15,31761C,288,2850,7,5,5,1830,-108,-11,-76,15,-,15
10-14 15:47:54.457 D/ATC     ( 2136): AT< OK
10-14 15:47:54.457 D/CELL_INFO( 2136): parseServingCell_234G:699 Enter...
10-14 15:47:54.458 D/ATC     ( 2136): AT> AT+COPS=3,0;+COPS?;+COPS=3,1;+COPS?
10-14 15:47:54.460 D/ATC     ( 2136): AT< +COPS: 0,0,"vodafone UK",7
10-14 15:47:54.460 D/ATC     ( 2136): AT< +COPS: 0,1,"voda UK",7
10-14 15:47:54.460 D/ATC     ( 2136): AT< OK
10-14 15:47:54.460 D/CELL_INFO( 2136): parseServingCell_234G:767 LTE RSRP=-108
10-14 15:47:54.460 D/CELL_INFO( 2136): parseServingCell_234G:802 *count = 1
10-14 15:47:54.460 D/ATC     ( 2136): AT> AT+CSQ
10-14 15:47:54.463 D/ATC     ( 2136): AT< +CSQ: 18,99
10-14 15:47:54.463 D/ATC     ( 2136): AT< OK
10-14 15:47:54.463 D/RADIO_1_4( 2136): getSignalStrength_1_4:572 LTE RSRP = 108 RSRQ = 11
10-14 15:47:54.463 D/RILC    ( 2136): isNetworkInNrEndc 692 Enter: 0
10-14 15:47:54.463 D/RILC    ( 2136): isNetworkInNrEndc 719 End, is_NR_ENDC:0
10-14 15:47:54.463 E/RILC    ( 2136): currentSignalStrengthInd: radioService[0]->mRadioIndication == NULL
10-14 15:47:54.463 D/ATC     ( 2136): AT> AT+QIMSCFG="ims_status"
10-14 15:47:54.464 D/ATC     ( 2136): AT< ERROR
10-14 15:48:04.449 D/ATC     ( 2136): AT> at+qcfg="aprstlevel"
10-14 15:48:04.464 D/ATC     ( 2136): AT< +QCFG: "ApRstLevel",1
10-14 15:48:04.464 D/ATC     ( 2136): AT< OK
10-14 15:48:04.464 D/ATC     ( 2136): AT> at+qcfg="modemrstlevel",0
10-14 15:48:04.475 D/ATC     ( 2136): AT< OK
10-14 15:48:04.475 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:04.480 D/ATC     ( 2136): AT< ERROR
10-14 15:48:05.481 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:05.487 D/ATC     ( 2136): AT< ERROR
10-14 15:48:06.488 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:06.496 D/ATC     ( 2136): AT< ERROR
10-14 15:48:07.496 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:07.498 D/ATC     ( 2136): AT< ERROR
10-14 15:48:08.499 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:08.507 D/ATC     ( 2136): AT< ERROR
10-14 15:48:09.508 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:09.516 D/ATC     ( 2136): AT< ERROR
10-14 15:48:10.517 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:10.525 D/ATC     ( 2136): AT< ERROR
10-14 15:48:11.525 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:11.533 D/ATC     ( 2136): AT< ERROR
10-14 15:48:12.534 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:12.538 D/ATC     ( 2136): AT< ERROR
10-14 15:48:13.539 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:13.547 D/ATC     ( 2136): AT< ERROR
10-14 15:48:14.464 D/SIGNAL_STRENGTH( 2136): requestSignalStrength:720 iradio_version = 4
10-14 15:48:14.464 D/ATC     ( 2136): AT> AT+COPS=3,0;+COPS?;+COPS=3,1;+COPS?
10-14 15:48:14.467 D/ATC     ( 2136): AT< +COPS: 0,0,"vodafone UK",7
10-14 15:48:14.467 D/ATC     ( 2136): AT< +COPS: 0,1,"voda UK",7
10-14 15:48:14.467 D/ATC     ( 2136): AT< OK
10-14 15:48:14.467 D/ATC     ( 2136): AT> AT+QENG="servingcell"
10-14 15:48:14.470 D/ATC     ( 2136): AT< +QENG: "servingcell","NOCONN","LTE","FDD",234,15,31761C,288,2850,7,5,5,1830,-107,-10,-76,15,-,16
10-14 15:48:14.470 D/ATC     ( 2136): AT< OK
10-14 15:48:14.470 D/CELL_INFO( 2136): parseServingCell_234G:699 Enter...
10-14 15:48:14.470 D/ATC     ( 2136): AT> AT+COPS=3,0;+COPS?;+COPS=3,1;+COPS?
10-14 15:48:14.473 D/ATC     ( 2136): AT< +COPS: 0,0,"vodafone UK",7
10-14 15:48:14.473 D/ATC     ( 2136): AT< +COPS: 0,1,"voda UK",7
10-14 15:48:14.473 D/ATC     ( 2136): AT< OK
10-14 15:48:14.473 D/CELL_INFO( 2136): parseServingCell_234G:767 LTE RSRP=-107
10-14 15:48:14.473 D/CELL_INFO( 2136): parseServingCell_234G:802 *count = 1
10-14 15:48:14.473 D/ATC     ( 2136): AT> AT+CSQ
10-14 15:48:14.475 D/ATC     ( 2136): AT< +CSQ: 18,99
10-14 15:48:14.475 D/ATC     ( 2136): AT< OK
10-14 15:48:14.475 D/RADIO_1_4( 2136): getSignalStrength_1_4:572 LTE RSRP = 107 RSRQ = 10
10-14 15:48:14.475 D/RILC    ( 2136): isNetworkInNrEndc 692 Enter: 0
10-14 15:48:14.475 D/RILC    ( 2136): isNetworkInNrEndc 719 End, is_NR_ENDC:0
10-14 15:48:14.475 E/RILC    ( 2136): currentSignalStrengthInd: radioService[0]->mRadioIndication == NULL
10-14 15:48:14.547 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:14.555 D/ATC     ( 2136): AT< ERROR
10-14 15:48:15.556 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:15.564 D/ATC     ( 2136): AT< ERROR
10-14 15:48:16.565 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:16.573 D/ATC     ( 2136): AT< ERROR
10-14 15:48:17.574 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:17.576 D/ATC     ( 2136): AT< ERROR
10-14 15:48:18.577 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:18.585 D/ATC     ( 2136): AT< ERROR
10-14 15:48:19.586 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:19.588 D/ATC     ( 2136): AT< ERROR
10-14 15:48:20.589 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:20.597 D/ATC     ( 2136): AT< ERROR
10-14 15:48:21.598 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:21.606 D/ATC     ( 2136): AT< ERROR
10-14 15:48:22.607 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:22.615 D/ATC     ( 2136): AT< ERROR
10-14 15:48:23.616 D/ATC     ( 2136): AT> at+qcfg="dbgctl",1
10-14 15:48:23.624 D/ATC     ( 2136): AT< ERROR
10-14 15:48:24.625 D/ATC     ( 2136): AT> AT+QSCLK=1
10-14 15:48:24.633 D/ATC     ( 2136): AT< OK
10-14 15:48:34.443 D/RILC    ( 2136): QuectelCheckAndroidFrameworkSettingCallback
10-14 15:48:34.443 D/RILC    ( 2136): [ro.radio.noril]: [false]
10-14 15:48:34.475 D/SIGNAL_STRENGTH( 2136): requestSignalStrength:720 iradio_version = 4
10-14 15:48:34.475 D/ATC     ( 2136): AT> AT+COPS=3,0;+COPS?;+COPS=3,1;+COPS?
10-14 15:48:34.484 D/ATC     ( 2136): AT< +COPS: 0,0,"vodafone UK",7
10-14 15:48:34.484 D/ATC     ( 2136): AT< +COPS: 0,1,"voda UK",7
10-14 15:48:34.484 D/ATC     ( 2136): AT< OK
10-14 15:48:34.484 D/ATC     ( 2136): AT> AT+QENG="servingcell"
10-14 15:48:34.490 D/ATC     ( 2136): AT< +QENG: "servingcell","NOCONN","LTE","FDD",234,15,31761C,288,2850,7,5,5,1830,-108,-9,-77,15,-,15
10-14 15:48:34.490 D/ATC     ( 2136): AT< OK
10-14 15:48:34.490 D/CELL_INFO( 2136): parseServingCell_234G:699 Enter...
10-14 15:48:34.490 D/ATC     ( 2136): AT> AT+COPS=3,0;+COPS?;+COPS=3,1;+COPS?
10-14 15:48:34.494 D/ATC     ( 2136): AT< +COPS: 0,0,"vodafone UK",7
10-14 15:48:34.495 D/ATC     ( 2136): AT< +COPS: 0,1,"voda UK",7
10-14 15:48:34.495 D/ATC     ( 2136): AT< OK
10-14 15:48:34.495 D/CELL_INFO( 2136): parseServingCell_234G:767 LTE RSRP=-108
10-14 15:48:34.495 D/CELL_INFO( 2136): parseServingCell_234G:802 *count = 1
10-14 15:48:34.495 D/ATC     ( 2136): AT> AT+CSQ
10-14 15:48:34.502 D/ATC     ( 2136): AT< +CSQ: 18,99
10-14 15:48:34.502 D/ATC     ( 2136): AT< OK
10-14 15:48:34.502 D/RADIO_1_4( 2136): getSignalStrength_1_4:572 LTE RSRP = 108 RSRQ = 9
10-14 15:48:34.502 D/RILC    ( 2136): isNetworkInNrEndc 692 Enter: 0
10-14 15:48:34.502 D/RILC    ( 2136): isNetworkInNrEndc 719 End, is_NR_ENDC:0
10-14 15:48:34.503 E/RILC    ( 2136): currentSignalStrengthInd: radioService[0]->mRadioIndication == NULL
10-14 15:48:54.505 D/SIGNAL_STRENGTH( 2136): requestSignalStrength:720 iradio_version = 4
10-14 15:48:54.505 D/ATC     ( 2136): AT> AT+COPS=3,0;+COPS?;+COPS=3,1;+COPS?
10-14 15:48:54.513 D/ATC     ( 2136): AT< +COPS: 0,0,"vodafone UK",7
10-14 15:48:54.513 D/ATC     ( 2136): AT< +COPS: 0,1,"voda UK",7
10-14 15:48:54.513 D/ATC     ( 2136): AT< OK
10-14 15:48:54.513 D/ATC     ( 2136): AT> AT+QENG="servingcell"
10-14 15:48:54.516 D/ATC     ( 2136): AT< +QENG: "servingcell","NOCONN","LTE","FDD",234,15,31761C,288,2850,7,5,5,1830,-107,-9,-78,15,-,17
10-14 15:48:54.516 D/ATC     ( 2136): AT< OK
10-14 15:48:54.516 D/CELL_INFO( 2136): parseServingCell_234G:699 Enter...
10-14 15:48:54.516 D/ATC     ( 2136): AT> AT+COPS=3,0;+COPS?;+COPS=3,1;+COPS?
10-14 15:48:54.520 D/ATC     ( 2136): AT< +COPS: 0,0,"vodafone UK",7
10-14 15:48:54.520 D/ATC     ( 2136): AT< +COPS: 0,1,"voda UK",7
10-14 15:48:54.520 D/ATC     ( 2136): AT< OK
10-14 15:48:54.520 D/CELL_INFO( 2136): parseServingCell_234G:767 LTE RSRP=-107
10-14 15:48:54.520 D/CELL_INFO( 2136): parseServingCell_234G:802 *count = 1
10-14 15:48:54.520 D/ATC     ( 2136): AT> AT+CSQ
10-14 15:48:54.522 D/ATC     ( 2136): AT< +CSQ: 18,99
10-14 15:48:54.522 D/ATC     ( 2136): AT< OK
10-14 15:48:54.522 D/RADIO_1_4( 2136): getSignalStrength_1_4:572 LTE RSRP = 107 RSRQ = 9
10-14 15:48:54.522 D/RILC    ( 2136): isNetworkInNrEndc 692 Enter: 0
10-14 15:48:54.522 D/RILC    ( 2136): isNetworkInNrEndc 719 End, is_NR_ENDC:0
10-14 15:48:54.522 E/RILC    ( 2136): currentSignalStrengthInd: radioService[0]->mRadioIndication == NULL
10-14 15:49:14.529 D/SIGNAL_STRENGTH( 2136): requestSignalStrength:720 iradio_version = 4
10-14 15:49:14.529 D/ATC     ( 2136): AT> AT+COPS=3,0;+COPS?;+COPS=3,1;+COPS?
10-14 15:49:14.535 D/ATC     ( 2136): AT< +COPS: 0,0,"vodafone UK",7
10-14 15:49:14.535 D/ATC     ( 2136): AT< +COPS: 0,1,"voda UK",7
10-14 15:49:14.535 D/ATC     ( 2136): AT< OK
10-14 15:49:14.535 D/ATC     ( 2136): AT> AT+QENG="servingcell"
10-14 15:49:14.539 D/ATC     ( 2136): AT< +QENG: "servingcell","NOCONN","LTE","FDD",234,15,31761C,288,2850,7,5,5,1830,-106,-9,-77,15,-,17
10-14 15:49:14.539 D/ATC     ( 2136): AT< OK
10-14 15:49:14.539 D/CELL_INFO( 2136): parseServingCell_234G:699 Enter...
10-14 15:49:14.539 D/ATC     ( 2136): AT> AT+COPS=3,0;+COPS?;+COPS=3,1;+COPS?
10-14 15:49:14.544 D/ATC     ( 2136): AT< +COPS: 0,0,"vodafone UK",7
10-14 15:49:14.544 D/ATC     ( 2136): AT< +COPS: 0,1,"voda UK",7
10-14 15:49:14.544 D/ATC     ( 2136): AT< OK
10-14 15:49:14.544 D/CELL_INFO( 2136): parseServingCell_234G:767 LTE RSRP=-106
10-14 15:49:14.544 D/CELL_INFO( 2136): parseServingCell_234G:802 *count = 1
10-14 15:49:14.544 D/ATC     ( 2136): AT> AT+CSQ
10-14 15:49:14.547 D/ATC     ( 2136): AT< +CSQ: 18,99
10-14 15:49:14.547 D/ATC     ( 2136): AT< OK
10-14 15:49:14.547 D/RADIO_1_4( 2136): getSignalStrength_1_4:572 LTE RSRP = 106 RSRQ = 9
10-14 15:49:14.547 D/RILC    ( 2136): isNetworkInNrEndc 692 Enter: 0
10-14 15:49:14.547 D/RILC    ( 2136): isNetworkInNrEndc 719 End, is_NR_ENDC:0
10-14 15:49:14.547 E/RILC    ( 2136): currentSignalStrengthInd: radioService[0]->mRadioIndication == NULL
10-14 15:49:34.553 D/SIGNAL_STRENGTH( 2136): requestSignalStrength:720 iradio_version = 4
10-14 15:49:34.553 D/ATC     ( 2136): AT> AT+COPS=3,0;+COPS?;+COPS=3,1;+COPS?
10-14 15:49:34.560 D/ATC     ( 2136): AT< +COPS: 0,0,"vodafone UK",7
10-14 15:49:34.560 D/ATC     ( 2136): AT< +COPS: 0,1,"voda UK",7
10-14 15:49:34.560 D/ATC     ( 2136): AT< OK
10-14 15:49:34.560 D/ATC     ( 2136): AT> AT+QENG="servingcell"
10-14 15:49:34.564 D/ATC     ( 2136): AT< +QENG: "servingcell","NOCONN","LTE","FDD",234,15,31761C,288,2850,7,5,5,1830,-106,-8,-77,15,-,17
10-14 15:49:34.564 D/ATC     ( 2136): AT< OK
10-14 15:49:34.564 D/CELL_INFO( 2136): parseServingCell_234G:699 Enter...
10-14 15:49:34.564 D/ATC     ( 2136): AT> AT+COPS=3,0;+COPS?;+COPS=3,1;+COPS?
10-14 15:49:34.567 D/ATC     ( 2136): AT< +COPS: 0,0,"vodafone UK",7
10-14 15:49:34.567 D/ATC     ( 2136): AT< +COPS: 0,1,"voda UK",7
10-14 15:49:34.567 D/ATC     ( 2136): AT< OK
10-14 15:49:34.568 D/CELL_INFO( 2136): parseServingCell_234G:767 LTE RSRP=-106
10-14 15:49:34.568 D/CELL_INFO( 2136): parseServingCell_234G:802 *count = 1
10-14 15:49:34.568 D/ATC     ( 2136): AT> AT+CSQ
10-14 15:49:34.569 D/ATC     ( 2136): AT< +CSQ: 18,99
10-14 15:49:34.569 D/ATC     ( 2136): AT< OK
10-14 15:49:34.570 D/RADIO_1_4( 2136): getSignalStrength_1_4:572 LTE RSRP = 106 RSRQ = 8
10-14 15:49:34.570 D/RILC    ( 2136): isNetworkInNrEndc 692 Enter: 0
10-14 15:49:34.570 D/RILC    ( 2136): isNetworkInNrEndc 719 End, is_NR_ENDC:0
10-14 15:49:34.570 E/RILC    ( 2136): currentSignalStrengthInd: radioService[0]->mRadioIndication == NULL

My struggle at the moment is trying to get the Android Framework to communicate with this rild service. The “Calls & SMS” menu under “Network & internet” in the android settings app is greyed out and inaccessible which leads me to believe that the framework is not properly configured to accept telephony services.

I am no expert with building and configuring android, in fact, this is my project where I need to build Android.

I can see some work was started on the “4g_module” in the edge 2 branch, I used this as a starting point to install the Quectel drivers and manifest.
I set BOARD_HAS_RK_4G_MODEM ?= true in “device/khadas/common/BoardConfig.mk”.

device/khadas/common/modules/4g_modem.mk

PRODUCT_PACKAGES += \
    CarrierDefaultApp \
    CarrierConfig \
    rild \
    librk-ril \
    dhcpcd

PRODUCT_COPY_FILES += \
    vendor/rockchip/common/phone/etc/apns-full-conf.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/apns-conf.xml \
    device/khadas/common/4g_modem/etc/ql-ril.conf:$(TARGET_COPY_OUT_VENDOR)/etc/ql-ril.conf

PRODUCT_PACKAGES += \
    android.hardware.radio@1.2-radio-service \
    android.hardware.radio.config@1.0-service

PRODUCT_PROPERTY_OVERRIDES += \
    ro.boot.noril=false \
    ro.telephony.default_network=9

DEVICE_MANIFEST_FILE += device/khadas/common/4g_modem/manifest.xml
DEVICE_PACKAGE_OVERLAYS += device/khadas/common/overlay_data_enabled

ifeq ($(strip $(TARGET_ARCH)), arm64)
PRODUCT_PROPERTY_OVERRIDES += \
    vendor.rild.libpath=/vendor/lib64/libquectel-ril.so

PRODUCT_COPY_FILES += \
    device/khadas/common/4g_modem/bin64/dhcpcd:$(TARGET_COPY_OUT_VENDOR)/bin/dhcpcd \
    device/khadas/common/4g_modem/lib64/libquectel-ril.so:$(TARGET_COPY_OUT_VENDOR)/lib64/libquectel-ril.so
else
PRODUCT_PROPERTY_OVERRIDES += \
    vendor.rild.libpath=/vendor/lib/libquectel-ril.so

PRODUCT_COPY_FILES += \
    device/khadas/common/4g_modem/bin32/dhcpcd:$(TARGET_COPY_OUT_VENDOR)/bin/dhcpcd \
    device/khadas/common/4g_modem/lib32/libquectel-ril.so:$(TARGET_COPY_OUT_VENDOR)/lib/libquectel-ril.so
endif

As you can see I’ve left most of it the same except the main driver files and Ive corrected the paths because original was incorrect.

I also added this line

DEVICE_PACKAGE_OVERLAYS += device/khadas/common/overlay_data_enabled

I copied the overlay directory “overlay_wifi_only” and set the bool to true in config.xml

<bool name="config_mobile_data_capable">true</bool>

Im not entirely sure if this overlay does anything but I did set it anyway.

Another thing, is I had to modify the “hardware/interfaces/compatibility_matrices/compatibility_matrix.7.xml” file to accept the required manifest.xml entry from Quectel, otherwise the build will fail.

I added the following to
hardware/interfaces/compatibility_matrices/compatibility_matrix.7.xml

    <hal format="hidl" optional="true">
        <name>android.hardware.radio</name>
        <version>1.4</version>
        <interface>
            <name>IRadio</name>
            <instance>slot1</instance>
        </interface>
    </hal>
    <hal format="hidl" optional="true">
        <name>android.hardware.radio</name>
        <version>1.2</version>
        <interface>
            <name>ISap</name>
            <instance>slot1</instance>
        </interface>
    </hal>

Something else I’ve noticed was:
device/khadas/common/device.mk
line 87

else ifeq ($(strip $(BUILD_WITH_GO_OPT))|$(strip $(TARGET_ARCH)) ,true|arm64)
  # For arm64 Go tablet
  $(call inherit-product, $(SRC_TARGET_DIR)/product/full_base.mk)
  PRODUCT_PACKAGES += Launcher3QuickStepGo
else
# Normal tablet, add QuickStep for normal product only.
  $(call inherit-product, $(SRC_TARGET_DIR)/product/full_base.mk)
  PRODUCT_PACKAGES += Launcher3QuickStep
endif

The full_base.mk file does not include telephony components. So I changed to the following for testing purposes:

else ifeq ($(strip $(BUILD_WITH_GO_OPT))|$(strip $(TARGET_ARCH)) ,true|arm64)
  # For arm64 Go tablet
  $(call inherit-product, $(SRC_TARGET_DIR)/product/full_base_telephony.mk)
  PRODUCT_PACKAGES += Launcher3QuickStepGo
else
# Normal tablet, add QuickStep for normal product only.
  $(call inherit-product, $(SRC_TARGET_DIR)/product/full_base_telephony.mk)
  PRODUCT_PACKAGES += Launcher3QuickStep
endif

After build, I can see the “Telephone” app appeared in Android app menu. However, the SIM settings are still disabled in the settings app.

This is as far as I have gotten. Im willing to put in as much effort as I can into this because this is crucial for my project. Any advise or guidance is greatly appreciated.

Hello @ii_ltd

We did not debug quectel 4G module on Edge2, because Edge2 does not have an M.2 interface.
We have quectel android RIL driver user guide. Our other projects were debugged based on this guide. I hope it’s helpful to you.

Hello thanks for this package. I already have this guide from Quectel. It is a shame that no development has been made on the edge 2 for this considering how many people already use it.

I will study this doc more thoroughly and continue with development. If there is any progress I may post it here for others to see.
Thanks for the guidance anyway.