diff --git a/mbtk/libgsw_lib/gsw_at_interface.c b/mbtk/libgsw_lib/gsw_at_interface.c
index 67a61a1..2d9cefd 100755
--- a/mbtk/libgsw_lib/gsw_at_interface.c
+++ b/mbtk/libgsw_lib/gsw_at_interface.c
@@ -121,7 +121,7 @@
 }LYNQ_AT_E;
 
 static mbtk_log fun_ptr_log = NULL;
-void *dlHandle_at = NULL;
+static void *dlHandle_at = NULL;
 char *lynqLib_at = "/lib/libmbtk_lib.so";
 char *output = NULL;
 int sockfd = 0;
@@ -315,12 +315,7 @@
     {
         return GSW_HAL_NORMAL_FAIL;
     }
-    dlHandle_at = dlopen(lynqLib_at, RTLD_NOW);
-    fun_ptr_log = (mbtk_log)dlsym(dlHandle_at, "mbtk_log");
-    if(fun_ptr_log == NULL || dlHandle_at == NULL)
-    {
-        return GSW_HAL_NORMAL_FAIL;
-    }
+    
     memcpy(buffer_at, atcmd, strlen(atcmd));
     tmp = func;
     LOGD("lynq_reg_third_at start\n");
@@ -337,6 +332,12 @@
 
 int32_t gsw_sdk_at_init(void)
 {
+    dlHandle_at = dlopen(lynqLib_at, RTLD_NOW);
+    fun_ptr_log = (mbtk_log)dlsym(dlHandle_at, "mbtk_log");
+    if(fun_ptr_log == NULL || dlHandle_at == NULL)
+    {
+        return GSW_HAL_NORMAL_FAIL;
+    }
     return GSW_HAL_SUCCESS;
 }
 
diff --git a/mbtk/libgsw_lib/gsw_oem_rw_interface.c b/mbtk/libgsw_lib/gsw_oem_rw_interface.c
index e0d0877..8d34023 100755
--- a/mbtk/libgsw_lib/gsw_oem_rw_interface.c
+++ b/mbtk/libgsw_lib/gsw_oem_rw_interface.c
@@ -11,20 +11,20 @@
 #include "gsw_oem_rw_interface.h"
 
 
-#ifndef LOG_ERR_LEVEL
-#define LOG_ERR_LEVEL  3      /* error conditions */
-#endif
-#ifndef LOG_WARN_LEVEL
-#define LOG_WARN_LEVEL 4   /* warning conditions */
-#endif
-#ifndef LOG_INFO_LEVEL
-#define LOG_INFO_LEVEL 6      /* informational */
-#endif
-#ifndef LOG_DEBUG_LEVEL
-#define LOG_DEBUG_LEVEL 7     /* debug-level messages */
-#endif
-#ifndef LOG_VERBOSE_LEVEL
-#define LOG_VERBOSE_LEVEL 8
+#ifndef LOG_ERR_LEVEL
+#define LOG_ERR_LEVEL  3      /* error conditions */
+#endif
+#ifndef LOG_WARN_LEVEL
+#define LOG_WARN_LEVEL 4   /* warning conditions */
+#endif
+#ifndef LOG_INFO_LEVEL
+#define LOG_INFO_LEVEL 6      /* informational */
+#endif
+#ifndef LOG_DEBUG_LEVEL
+#define LOG_DEBUG_LEVEL 7     /* debug-level messages */
+#endif
+#ifndef LOG_VERBOSE_LEVEL
+#define LOG_VERBOSE_LEVEL 8
 #endif
 
 #define ERASE_BLOCK_SIZE (256*1024)
@@ -35,73 +35,73 @@
 
 #define StatFunc(x,y) stat(x,y)
 
-#define LOGV(fmt, args ...) \
-    do{ \
-        char *file_ptr_1001 = __FILE__; \
-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
-        fun_ptr_log(LOG_VERBOSE_LEVEL, "%s#%s: "GSW_OEM_RW"" fmt, ptr_1001 + 1, line_1001, ##args); \
-    } while(0)
-
-#define LOGI(fmt, args...) \
-    do{ \
-        char *file_ptr_1001 = __FILE__; \
-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
-        fun_ptr_log(LOG_INFO_LEVEL, "%s#%s: "GSW_OEM_RW"" fmt, ptr_1001 + 1, line_1001, ##args); \
-    } while(0)
-
-#define LOGD(fmt, args...) \
-    do{ \
-        char *file_ptr_1001 = __FILE__; \
-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
-        fun_ptr_log(LOG_DEBUG_LEVEL, "%s#%s: "GSW_OEM_RW"" fmt, ptr_1001 + 1, line_1001, ##args); \
-    } while(0)
-
-#define LOGW(fmt, args...) \
-    do{ \
-        char *file_ptr_1001 = __FILE__; \
-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
-        fun_ptr_log(LOG_WARN_LEVEL, "%s#%s: "GSW_OEM_RW"" fmt, ptr_1001 + 1, line_1001, ##args); \
-    } while(0)
-
-#define LOGE(fmt, args...) \
-    do{ \
+#define LOGV(fmt, args ...) \
+    do{ \
         char *file_ptr_1001 = __FILE__; \
-        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
-        char line_1001[10] = {0}; \
-        sprintf(line_1001, "%d", __LINE__); \
-        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
-            if(*ptr_1001 == '/') \
-                 break; \
-            ptr_1001--; \
-        } \
+        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
+        char line_1001[10] = {0}; \
+        sprintf(line_1001, "%d", __LINE__); \
+        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
+            if(*ptr_1001 == '/') \
+                 break; \
+            ptr_1001--; \
+        } \
+        fun_ptr_log(LOG_VERBOSE_LEVEL, "%s#%s: "GSW_OEM_RW"" fmt, ptr_1001 + 1, line_1001, ##args); \
+    } while(0)
+
+#define LOGI(fmt, args...) \
+    do{ \
+        char *file_ptr_1001 = __FILE__; \
+        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
+        char line_1001[10] = {0}; \
+        sprintf(line_1001, "%d", __LINE__); \
+        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
+            if(*ptr_1001 == '/') \
+                 break; \
+            ptr_1001--; \
+        } \
+        fun_ptr_log(LOG_INFO_LEVEL, "%s#%s: "GSW_OEM_RW"" fmt, ptr_1001 + 1, line_1001, ##args); \
+    } while(0)
+
+#define LOGD(fmt, args...) \
+    do{ \
+        char *file_ptr_1001 = __FILE__; \
+        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
+        char line_1001[10] = {0}; \
+        sprintf(line_1001, "%d", __LINE__); \
+        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
+            if(*ptr_1001 == '/') \
+                 break; \
+            ptr_1001--; \
+        } \
+        fun_ptr_log(LOG_DEBUG_LEVEL, "%s#%s: "GSW_OEM_RW"" fmt, ptr_1001 + 1, line_1001, ##args); \
+    } while(0)
+
+#define LOGW(fmt, args...) \
+    do{ \
+        char *file_ptr_1001 = __FILE__; \
+        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
+        char line_1001[10] = {0}; \
+        sprintf(line_1001, "%d", __LINE__); \
+        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
+            if(*ptr_1001 == '/') \
+                 break; \
+            ptr_1001--; \
+        } \
+        fun_ptr_log(LOG_WARN_LEVEL, "%s#%s: "GSW_OEM_RW"" fmt, ptr_1001 + 1, line_1001, ##args); \
+    } while(0)
+
+#define LOGE(fmt, args...) \
+    do{ \
+        char *file_ptr_1001 = __FILE__; \
+        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \
+        char line_1001[10] = {0}; \
+        sprintf(line_1001, "%d", __LINE__); \
+        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \
+            if(*ptr_1001 == '/') \
+                 break; \
+            ptr_1001--; \
+        } \
         fun_ptr_log(LOG_ERR_LEVEL, "%s#%s: "GSW_OEM_RW"" fmt, ptr_1001 + 1, line_1001, ##args); \
     } while(0)
     
@@ -156,19 +156,19 @@
     return 0;
 }
 
-static void deinit_fun_handle()
-{
-    if(handle != NULL)
-    {
-        dlclose(handle);
-        handle = NULL;
-    }
+// static void deinit_fun_handle()
+// {
+//     if(handle != NULL)
+//     {
+//         dlclose(handle);
+//         handle = NULL;
+//     }
     
-    fun_ptr_log = NULL;
-    mbtk_write_fun_ptr = NULL;
-    mbtk_read_fun_ptr = NULL;
+//     fun_ptr_log = NULL;
+//     mbtk_write_fun_ptr = NULL;
+//     mbtk_read_fun_ptr = NULL;
     
-}
+// }
 
 /**
  * @brief Read data from spec block of flash
@@ -188,14 +188,14 @@
     if(ret == -1)
     {
         printf(" init_fun_handle error ret %d\n",ret);
-        deinit_fun_handle();
+        //deinit_fun_handle();
         return GSW_HAL_NORMAL_FAIL;
     }
    
     if (!data || !len) 
     {
         LOGE("invalid ：data or len us NULL\n");
-        deinit_fun_handle();
+        //deinit_fun_handle();
         return GSW_HAL_ARG_INVALID;
     }
 
@@ -203,7 +203,7 @@
     if (temp_buffer == NULL) 
     {
         LOGE("Failed to allocate read buffer ");
-        deinit_fun_handle();
+        //deinit_fun_handle();
         return -1;
     }
     
@@ -214,13 +214,13 @@
     {
         LOGE("mbtk_read_fun_ptr  failed");
         free(temp_buffer); 
-        deinit_fun_handle();
+        //deinit_fun_handle();
         return GSW_HAL_NORMAL_FAIL;
     }
     *len = actual_len;
     memcpy(data, temp_buffer, *len);
     free(temp_buffer); 
-    deinit_fun_handle();
+    //deinit_fun_handle();
     
     return GSW_HAL_SUCCESS;
 }
@@ -241,13 +241,13 @@
     if(ret == -1)
     {
         printf("init log error ret %d\n",ret);
-        deinit_fun_handle();
+        //deinit_fun_handle();
         return GSW_HAL_NORMAL_FAIL;
     }
     if (!data || len > ERASE_BLOCK_SIZE) 
     {
         LOGE("invalid data is NULL ");
-        deinit_fun_handle();
+        //deinit_fun_handle();
         return GSW_HAL_ARG_INVALID;
     }
     
@@ -255,9 +255,9 @@
     if(ret != 0)
     {
         LOGE("mbtk_write_fun_ptr  failed");
-        deinit_fun_handle();
+        //deinit_fun_handle();
         return GSW_HAL_NORMAL_FAIL;
     }
-    deinit_fun_handle();
+    //deinit_fun_handle();
     return GSW_HAL_SUCCESS;
 }
diff --git a/mbtk/libgsw_lib/gsw_pm_interface.c b/mbtk/libgsw_lib/gsw_pm_interface.c
index 25acf7a..886a512 100755
--- a/mbtk/libgsw_lib/gsw_pm_interface.c
+++ b/mbtk/libgsw_lib/gsw_pm_interface.c
@@ -127,7 +127,7 @@
 static mbtk_lock_name_s lock_name[LOCK_MAX_SIZE]={0};
 
 static mbtk_log fun_ptr_log = NULL;
-void *dlHandle_sleep = NULL;
+static void *dlHandle_sleep = NULL;
 char *lynqLib_sleep = "/lib/libmbtk_lib.so";
 
 
@@ -161,12 +161,8 @@
     if(ret < 0)
     {
         LOGE("mbtk_autosuspend_enable FAIL.\n");
-        dlclose(dlHandle_sleep);
-        dlHandle_sleep = NULL;
         return GSW_HAL_NORMAL_FAIL;
     }
-    dlclose(dlHandle_sleep);
-    dlHandle_sleep = NULL;
     return GSW_HAL_SUCCESS;
 }
 
@@ -185,12 +181,8 @@
     if(ret < 0)
     {
         LOGE("mbtk_autosuspend_enable FAIL.\n");
-        dlclose(dlHandle_sleep);
-        dlHandle_sleep = NULL;
         return GSW_HAL_NORMAL_FAIL;
     }
-    dlclose(dlHandle_sleep);
-    dlHandle_sleep = NULL;
     return GSW_HAL_SUCCESS;
 }
 
@@ -209,8 +201,6 @@
     if(ret < 0)
     {
         LOGE("mbtk_lpm_init FAIL.\n");
-        dlclose(dlHandle_sleep);
-        dlHandle_sleep = NULL;
         return GSW_HAL_NORMAL_FAIL;
     }
     return GSW_HAL_SUCCESS;
@@ -248,8 +238,6 @@
     if(ret < 0)
     {
         LOGE("mbtk_wakelock_unlock FAIL.\n");
-        dlclose(dlHandle_sleep);
-        dlHandle_sleep = NULL;
         return GSW_HAL_NORMAL_FAIL;
     }
 
@@ -258,8 +246,6 @@
     if(ret < 0)
     {
         LOGE("mbtk_wakelock_destroy FAIL.\n");
-        dlclose(dlHandle_sleep);
-        dlHandle_sleep = NULL;
         return GSW_HAL_NORMAL_FAIL;
     }
     if (lock_name[i].name != NULL)
@@ -268,9 +254,6 @@
         lock_name[i].name = NULL;
         lock_name[i].fd = -1;
     }
-    
-    dlclose(dlHandle_sleep);
-    dlHandle_sleep = NULL;
     return GSW_HAL_SUCCESS;
 }
 
@@ -326,8 +309,6 @@
     lock_name[i].fd = lock_fd;
     ret = GSW_HAL_SUCCESS;
 end:
-    dlclose(dlHandle_sleep);
-    dlHandle_sleep = NULL;
     return ret;
 }
 
