diff --git a/cap/zx297520v3/sources/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf b/cap/zx297520v3/sources/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf
index 13467a6..2b189ba 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf
+++ b/cap/zx297520v3/sources/meta-zxic-custom/conf/distro/vehicle_dc_ref.conf
@@ -60,7 +60,7 @@
 
 #rootfs文件系统squashfs参数配置，压缩方式和块大小可以更改
 #squashfs_xz squashfs_zstd
-DISTRO_FEATURES_append = " squashfs_xz "
+DISTRO_FEATURES_append = " squashfs_zstd "
 ROOTFS_SQUASHFS_ARGS = "-nopad -noappend -root-owned -b 256k -p '/dev d 755 0 0' -p '/dev/console c 600 0 0 5 1' -processors 1"
 ROOTFS_SQUASHFS_ARGS += " ${@bb.utils.contains("DISTRO_FEATURES", "selinux", "-xattrs", "", d)} "
 ROOTFS_SQUASHFS_ARGS += "${@bb.utils.contains("DISTRO_FEATURES", "squashfs_zstd", " -comp zstd ","", d)}"
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-audio-demo/files/lynq-audio-demo.cpp b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-audio-demo/files/lynq-audio-demo.cpp
index eb557f6..dcf37a9 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-audio-demo/files/lynq-audio-demo.cpp
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-audio-demo/files/lynq-audio-demo.cpp
@@ -4,8 +4,6 @@
 #include <errno.h>
 #include <include/lynq-qser-audio.h>
 
-extern sc_audio_handle_t playback_handle;
-
 void player_cmd_proc(char *cmdstr)
 {
     if (strcmp(cmdstr, "P\n") == 0)
diff --git a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-ril-service/lynq-ril-service.bb b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-ril-service/lynq-ril-service.bb
index 641ebb7..1425ad8 100755
--- a/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-ril-service/lynq-ril-service.bb
+++ b/cap/zx297520v3/sources/meta-zxic-custom/recipes-lynq/lynq-ril-service/lynq-ril-service.bb
@@ -3,7 +3,8 @@
 DESCRIPTION = "lynq ril service"
 LICENSE = "CLOSED"
 LIC_FILES_CHKSUM = "file://LICENSE;md5=b1e07e8d88e26263e71d3a9e2aa9a2ff"
-DEPENDS += "${@bb.utils.contains('TARGET_PLATFORM', 'mt2735', 'audio-mixer-ctrl streamer1.0', '', d)} libapn libpal libvendor-ril libbinder glib-2.0 dbus liblynq-log liblynq-uci liblynq-shm libmedia"
+DEPENDS += "${@bb.utils.contains('TARGET_PLATFORM', 'mt2735', 'audio-mixer-ctrl streamer1.0', '', d)} libapn libpal libril libvendor-ril libbinder glib-2.0 dbus liblynq-log liblynq-uci liblynq-shm libmedia libsd-daemon"
+RDEPENDS_${PN} = "libbinder libril libsd-daemon"
 #inherit workonsrc
 WORKONSRC = "${TOPDIR}/../src/lynq/framework/lynq-ril-service/src"
 FILESEXTRAPATHS_prepend :="${TOPDIR}/../src/lynq/framework/:"
@@ -52,7 +53,7 @@
 		install -d ${D}${sysconfdir}/init.d
 		install -m 0755  ${SRC-DIR}/lynq-ril-service.sh ${D}${sysconfdir}/init.d/lynq-ril-service.sh
 		install -d ${D}${sysconfdir}/rcS.d
-		ln -s ../init.d/lynq-ril-service.sh ${D}${sysconfdir}/rcS.d/S82lynq-ril-service
+		ln -s ../init.d/lynq-ril-service.sh ${D}${sysconfdir}/rcS.d/S21lynq-ril-service
 	fi
 #	install -d ${D}${includedir}
 #	install ${S}/atci/ATCI.h ${D}${includedir}
diff --git a/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/lynq-ril-service.sh b/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/lynq-ril-service.sh
index 267f42b..4514ab0 100644
--- a/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/lynq-ril-service.sh
+++ b/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/lynq-ril-service.sh
@@ -11,7 +11,7 @@
 
 start() {
         echo -n "Starting $DAEMON... "
-        start-stop-daemon --no-close -S -b -m -p $PIDFILE -x $EXEC -- $EXEC_ARGS
+        start-stop-daemon --notify-await --no-close -S -b -m -p $PIDFILE -x $EXEC -- $EXEC_ARGS
         [ $? -eq 0 ] && echo "OK" || echo "ERROR"
 }
 
diff --git a/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/main.cpp b/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/main.cpp
index b946904..d5aa454 100755
--- a/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/main.cpp
+++ b/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/main.cpp
@@ -39,6 +39,14 @@
 #include <signal.h>
 #include "common.h"
 #include "lynq_shm.h"
+#include "sd-daemon.h"
+/*
+#ifdef RIL_TIME_CB
+extern "C" {
+        #include "telephony/ril.h"
+}
+#endif
+*/
 
 extern "C" void RIL_register (const RIL_RadioFunctions *callbacks);
 
@@ -54,6 +62,15 @@
                                 size_t datalen);
 #endif
 
+/*
+#if 1
+ #ifdef RIL_TIME_CB
+extern "C" void RIL_requestTimedCallback (RIL_TimedCallback callback,
+        void *param, const struct timeval *relativeTime);
+#endif
+#endif
+*/
+
 #ifdef RIL_TIME_CB
 void RIL_requestTimedCallback (RIL_TimedCallback callback,void *param, const struct timeval *relativeTime)
 {
@@ -201,6 +218,7 @@
     RLOGD("start rilInit");
     funcs = rilInit(&s_rilEnv, 0, NULL);;
     RLOGD("start RIL_register");
+    sd_notify(0, "READY=1");
     RIL_register(funcs);
 
     android::startGdbusLoop();
diff --git a/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/makefile b/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/makefile
index 746c615..11e2e1e 100755
--- a/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/makefile
+++ b/cap/zx297520v3/src/lynq/framework/lynq-ril-service/src/makefile
@@ -144,6 +144,8 @@
     -llynq-uci \
     -llynq-shm  \
     -lmedia \
+    -lril \
+    -lsd-daemon \
 
 ifeq ($(strip $(TARGET_PLATFORM)), mt2735)
 LOCAL_LIBS += -luciwrapper -luciwrapper -lgstbase-1.0 -llynq-protcl -llynq-thermal -llynq-systime  -lnandapi -ldtmf -lasound -lgstreamer-1.0 -lmtk_audio_mixer_ctrl -lpower
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-audio/include/lynq-qser-audio.h b/cap/zx297520v3/src/lynq/lib/liblynq-qser-audio/include/lynq-qser-audio.h
index cc37b2e..d963767 100644
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-audio/include/lynq-qser-audio.h
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-audio/include/lynq-qser-audio.h
@@ -17,8 +17,8 @@
 
 #include "sc_audio.h"
 
-sc_audio_handle_t playback_handle = SC_AUDIO_INVALID_HANDLE;
-sc_audio_handle_t capture_handle = SC_AUDIO_INVALID_HANDLE;
+extern sc_audio_handle_t playback_handle;
+extern sc_audio_handle_t capture_handle;
 
 typedef void (*_cb_onPlayer)(int);
 
@@ -31,6 +31,8 @@
 
 int qser_AudRecorder_Open(char* device, _cb_onPlayer cb_fun);
 int qser_AudRecorder_StartRecord(int hdl, const char *fd, int offset);
+int qser_AudRecorder_StartRecord_Custom(char *file, int period_size, \
+                 int period_count, int num_channels, int sample_rate);
 int qser_AudRecorder_Pause(void);
 int qser_AudRecorder_Resume(void);
 void qser_AudRecorder_Stop(void);
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-audio/lynq-qser-audio.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-audio/lynq-qser-audio.cpp
index 70b4e43..63ce463 100644
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-audio/lynq-qser-audio.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-audio/lynq-qser-audio.cpp
@@ -16,6 +16,9 @@
 #define SC_AUDIO_BE_DAI_MIN -1
 #define SC_AUDIO_STREAM_FORMAT_INVALID 0
 
+sc_audio_handle_t playback_handle = SC_AUDIO_INVALID_HANDLE;
+sc_audio_handle_t capture_handle = SC_AUDIO_INVALID_HANDLE;
+
 /********************************************************************
 * @brief: _cb_onPlayer, typedef for a callback function that is called
           when an audio operation is performed
@@ -204,6 +207,83 @@
 }
 
 /********************************************************************
+* @brief: qser_AudRecorder_StartRecord_Custom, used to capture audio from a file and play it
+* @param file [IN]: char*, the path of the audio file
+* @param period_size [IN]: int, the period size of the PCM buffer
+* @param period_count [IN]: int, the period count of the PCM buffer
+* @param num_channels [IN]: int, the number of channels in the audio
+* @param sample_rate [IN]: int, the sample rate of the audio
+* @return : int, returns 0 if successful, returns -1 if failed
+* @todo: NA
+* @see: NA
+* @warning: NA
+*********************************************************************/
+int qser_AudRecorder_StartRecord_Custom(char *file, int period_size, int period_count, \
+                        int num_channels, int sample_rate)
+{
+    int error_line;
+    sc_audio_pcm_config_t pcm_config;
+    int ret = 0;
+
+    if(NULL == file || 0 == strlen(file))
+    {
+        error_line = __LINE__;
+        goto exit;
+    }
+
+    capture_handle = sc_audio_capture_open(SC_AUDIO_FE_PCM_DEV_MULTIMEDIA1, SC_AUDIO_BE_DAI_MIN);
+
+    if (SC_AUDIO_INVALID_HANDLE == capture_handle)
+    {
+        error_line = __LINE__;
+        goto exit;
+    }
+
+    memset(&pcm_config, 0, sizeof(sc_audio_pcm_config_t));
+
+    if(-1 == period_size || -1 == period_count || -1 == num_channels || -1 == sample_rate)
+    {
+        ret = sc_audio_capture_file_prepare(capture_handle, file, SC_AUDIO_STREAM_FORMAT_INVALID, \
+                        NULL, capture_state_cb, NULL);
+    }
+    else
+    {
+        pcm_config.period_size = period_size;
+        pcm_config.period_count = period_count;
+        pcm_config.flags = 0;
+        pcm_config.num_channels = num_channels;
+        pcm_config.sample_rate = sample_rate;
+        pcm_config.pcm_format = 2;
+        ret = sc_audio_capture_file_prepare(capture_handle, file, SC_AUDIO_STREAM_FORMAT_INVALID, \
+                        &pcm_config, capture_state_cb, NULL);
+    }
+
+    if (SC_ERR_SUCCESS != ret)
+    {
+        error_line = __LINE__;
+        goto exit;
+    }
+
+    ret = sc_audio_capture_record(capture_handle);
+
+    if (SC_ERR_SUCCESS != ret)
+    {
+        error_line = __LINE__;
+        goto exit;
+    }
+
+    return 0;
+
+exit:
+    if (SC_AUDIO_INVALID_HANDLE != capture_handle)
+    {
+        sc_audio_capture_close(capture_handle);
+    }
+    LYINFLOG("player_capture_play_file error_line=%d\n", error_line);
+    return -1;
+}
+
+/********************************************************************
 * @brief: qser_AudPlayer_Pause, pause the audio playback
 * @param hdl [IN]: int, handle for the audio device or stream
 * @return : success 0, failed -1
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp
index 1be825b..138514d 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-qser-data/lynq-qser-data.cpp
@@ -27,6 +27,7 @@
 #define COPY_XML_RETRY_TIMES 3
 
 static qser_data_call_evt_cb_t s_data_call_cb = NULL;
+static xmlDocPtr apn_table_xml_pdoc = NULL;
 const int apndb_offset = 683;
 
 void lynq_ipv4_aton_urc(lynq_data_call_response_v11_t *libdata,qser_data_call_state_s *data_res)
@@ -385,18 +386,19 @@
 {
     int node_num = 0;
     char temp_buff[12];
-    xmlDocPtr pdoc = NULL;
+    //xmlDocPtr apn_table_xml_pdoc = NULL;
     xmlNodePtr node = NULL;
     xmlNodePtr tmp_node = NULL;
     xmlNodePtr sum_node = NULL;
-    pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
-    if(NULL == pdoc)
+
+//    apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
+    if(NULL == apn_table_xml_pdoc)
     {
         LYERRLOG("open xml file error");
         goto FAILED;
     }
     
-    node = xmlDocGetRootElement(pdoc);
+    node = xmlDocGetRootElement(apn_table_xml_pdoc);
     if (NULL == node)
     {
         LYERRLOG("xmlDocGetRootElement() error");
@@ -441,15 +443,16 @@
     xmlNewProp(tmp_node,BAD_CAST"password",(xmlChar *)apn->password);
     xmlNewProp(tmp_node,BAD_CAST"apn_type",(xmlChar *)apn->apn_type);
     xmlAddChild(node,tmp_node);
-    xmlSaveFormatFileEnc(data_xml_path, pdoc, "UTF-8", 1);
-    xmlFreeDoc(pdoc);
+    xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
+   
+//    xmlFreeDoc(apn_table_xml_pdoc);
     return RESULT_OK;
     
     FAILED:
-    if (pdoc)
+    /* if (apn_table_xml_pdoc)
     {
-        xmlFreeDoc(pdoc);
-    }
+        xmlFreeDoc(apn_table_xml_pdoc);
+    }*/
     return RESULT_ERROR;
 }
 
@@ -457,17 +460,17 @@
 {
     int node_num = 0;
     char temp_buff[12];
-    xmlDocPtr pdoc = NULL;
+    //xmlDocPtr apn_table_xml_pdoc = NULL;
     xmlNodePtr node = NULL;
     xmlNodePtr modify_node = NULL;
-    pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
-    if(NULL == pdoc)
+    // apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
+    if(NULL == apn_table_xml_pdoc)
     {
         LYERRLOG("open xml file error");
         goto FAILED;
     }
     
-    node = xmlDocGetRootElement(pdoc);
+    node = xmlDocGetRootElement(apn_table_xml_pdoc);
     if (NULL == node)
     {
         LYERRLOG("xmlDocGetRootElement() error");
@@ -522,15 +525,15 @@
         modify_node = modify_node->next;
         node_num++;
     }
-    xmlSaveFormatFileEnc(data_xml_path, pdoc, "UTF-8", 1);
-    xmlFreeDoc(pdoc);
+    xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
+//    xmlFreeDoc(apn_table_xml_pdoc);
     return RESULT_OK;
 
     FAILED:
-    if (pdoc)
-    {
-        xmlFreeDoc(pdoc);
-    }
+    // if (apn_table_xml_pdoc)
+    // {
+    //     xmlFreeDoc(apn_table_xml_pdoc);
+    // }
     return RESULT_ERROR;
 }
 
@@ -538,17 +541,17 @@
 {
     int node_num = 0;
     char temp_buff[12];
-    xmlDocPtr pdoc = NULL;
+    //xmlDocPtr apn_table_xml_pdoc = NULL;
     xmlNodePtr node = NULL;
     xmlNodePtr modify_node = NULL;
-    pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
-    if(NULL == pdoc)
+//    apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
+    if(NULL == apn_table_xml_pdoc)
     {
         LYERRLOG("open xml file error");
         goto FAILED;
     }
     
-    node = xmlDocGetRootElement(pdoc);
+    node = xmlDocGetRootElement(apn_table_xml_pdoc);
     if (NULL == node)
     {
         LYERRLOG("xmlDocGetRootElement() error");
@@ -579,15 +582,15 @@
     xmlSetProp(modify_node,BAD_CAST"username",(xmlChar *)apn->username);
     xmlSetProp(modify_node,BAD_CAST"password",(xmlChar *)apn->password);
     xmlSetProp(modify_node,BAD_CAST"apn_type",(xmlChar *)apn->apn_type);
-    xmlSaveFormatFileEnc(data_xml_path, pdoc, "UTF-8", 1);
-    xmlFreeDoc(pdoc);
+    xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
+//    xmlFreeDoc(apn_table_xml_pdoc);
     return RESULT_OK;
 
     FAILED:
-    if (pdoc)
-    {
-        xmlFreeDoc(pdoc);
-    }
+    // if (apn_table_xml_pdoc)
+    // {
+    //     xmlFreeDoc(apn_table_xml_pdoc);
+    // }
     return RESULT_ERROR;
 }
 
@@ -595,18 +598,18 @@
 int apn_xml_query(unsigned char profile_idx,qser_apn_info_s *apn)
 {
     int node_num = 0;
-    xmlDocPtr pdoc = NULL;
+    //xmlDocPtr apn_table_xml_pdoc = NULL;
     xmlNodePtr node = NULL;
     xmlNodePtr modify_node = NULL;
     unsigned char temp = NULL;
-    pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
-    if(NULL == pdoc)
+//    apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
+    if(NULL == apn_table_xml_pdoc)
     {
         LYERRLOG("open xml file error");
         goto FAILED;
     }
     
-    node = xmlDocGetRootElement(pdoc);
+    node = xmlDocGetRootElement(apn_table_xml_pdoc);
     if (NULL == node)
     {
         LYERRLOG("xmlDocGetRootElement() error");
@@ -650,34 +653,34 @@
     strncpy(apn->username,(char *)xmlGetProp(modify_node, "username"), QSER_APN_USERNAME_SIZE);
     strncpy(apn->password,(char *)xmlGetProp(modify_node, "password"), QSER_APN_PASSWORD_SIZE);
     strncpy(apn->apn_type,(char *)xmlGetProp(modify_node, "apn_type"), QSER_APN_NAME_SIZE);
-    xmlSaveFormatFileEnc(data_xml_path, pdoc, "UTF-8", 1);
-    xmlFreeDoc(pdoc);
+//    xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
+//    xmlFreeDoc(apn_table_xml_pdoc);
     return RESULT_OK;
 
     FAILED:
-    if (pdoc)
-    {
-        xmlFreeDoc(pdoc);
-    }
+    // if (apn_table_xml_pdoc)
+    // {
+    //     xmlFreeDoc(apn_table_xml_pdoc);
+    // }
     return RESULT_ERROR;
 }
 
 int apn_xml_query_list(qser_apn_info_list_s *apn_list)
 {
     int node_num = 0;
-    xmlDocPtr pdoc = NULL;
+    //xmlDocPtr apn_table_xml_pdoc = NULL;
     xmlNodePtr node = NULL;
     xmlNodePtr modify_node = NULL;
     xmlChar *temp_char;
     char temp[64];
-    pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
-    if(NULL == pdoc)
+//    apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
+    if(NULL == apn_table_xml_pdoc)
     {
         LYERRLOG("open xml file error");
         goto FAILED;
     }
     
-    node = xmlDocGetRootElement(pdoc);
+    node = xmlDocGetRootElement(apn_table_xml_pdoc);
     if (NULL == node)
     {
         LYERRLOG("xmlDocGetRootElement() error");
@@ -705,15 +708,15 @@
         modify_node = modify_node->next;
     }
     apn_list->cnt = node_num;
-    xmlSaveFormatFileEnc(data_xml_path, pdoc, "UTF-8", 1);
-    xmlFreeDoc(pdoc);
+//    xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
+//    xmlFreeDoc(apn_table_xml_pdoc);
     return RESULT_OK;
 
     FAILED:
-    if (pdoc)
-    {
-        xmlFreeDoc(pdoc);
-    }
+    // if (apn_table_xml_pdoc)
+    // {
+    //     xmlFreeDoc(apn_table_xml_pdoc);
+    // }
     return RESULT_ERROR;
 }
 
@@ -973,13 +976,22 @@
         return RESULT_ERROR;
     }
     qser_cb_pthread_create();
+    apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
+    if(NULL == apn_table_xml_pdoc)
+    {
+        LYERRLOG("open xml file error");
+        return RESULT_ERROR;
+    }
     return RESULT_OK;
 }
 
 void qser_data_call_destroy(void)
 {
     LYINFLOG("[%s] start [%d]",__FUNCTION__,__LINE__);
-    
+    if(apn_table_xml_pdoc)
+    {
+        xmlFreeDoc(apn_table_xml_pdoc);
+    }
     lynq_deinit_data();
     qser_cb_pthread_cancel();
     s_data_call_cb = NULL;
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci_ro.config b/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci_ro.config
index 284caad..305e4e4 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci_ro.config
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-uci/lynq_uci_ro.config
@@ -1,5 +1,3 @@
 config lynq_version_ro 'lynq_version'
-
-config  lynq_version 'lynq_version_ro'
-        option LYNQ_SW_VERSION 'T106CN-ZS03.V2.01.01.02P52U02.AP.09.04_CAP.09.04'
-        option LYNQ_SW_INSIDE_VERSION 'T106CN-ZS03.V2.01.01.02P52U02.AP.09.04_CAP.09.04'
+        option LYNQ_SW_VERSION 'T106CN-ZS03.V2.01.01.02P52U02.AP.09.05_CAP.09.05'
+        option LYNQ_SW_INSIDE_VERSION 'T106CN-ZS03.V2.01.01.02P52U02.AP.09.05_CAP.09.05'
diff --git a/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/sdk/ril/reference-ril/misc.c b/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/sdk/ril/reference-ril/misc.c
index d1d0a21..da0ce95 100755
--- a/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/sdk/ril/reference-ril/misc.c
+++ b/cap/zx297520v3/zxic_code/zxic_source/zxic_app_open/sdk/ril/reference-ril/misc.c
@@ -19,7 +19,7 @@
 int strStartsWith(const char *line, const char *prefix)
 {
     for ( ; *line != '\0' && *prefix != '\0' ; line++, prefix++) {
-        if (toupper(*line) != toupper(*prefix)) {
+        if (tolower(*line) != tolower(*prefix)) {
             return 0;
         }
     }
