[Feature][T108][system][task-view-1640]optimize sdk boot time
Only Configure: No
Affected branch: GSW_V1453
Affected module: sys
Is it affected on IC: only ASR
Self-test: yes
Doc Update: no
Change-Id: Ifdb7019430a2ec751cfb931ef034a107019afe28
diff --git a/mbtk/libgsw_lib/gsw_pm_interface.c b/mbtk/libgsw_lib/gsw_pm_interface.c
index f16b5da..0d1aec4 100755
--- a/mbtk/libgsw_lib/gsw_pm_interface.c
+++ b/mbtk/libgsw_lib/gsw_pm_interface.c
@@ -13,6 +13,7 @@
#include <sys/ioctl.h>
#include <dlfcn.h>
#include <stdint.h>
+#include <sys/time.h>
#include "gsw_pm_interface.h"
#ifndef LOG_ERR_LEVEL
@@ -105,6 +106,11 @@
#define LOCK_MAX_SIZE 129
+#define SDK_READY_CMD "uci get persist.mbtk.sdk__state"
+#define CHECK_SYSTEM(cmd) do { \
+ int _ret = system(cmd); \
+ if (_ret == -1) perror("system error"); \
+} while(0)
typedef void (*GSW_PM_WAKEUPCALLBACK)(int32_t wakeup_in);
typedef void (*mbtk_lpm_handler_t)(int32_t wakeup_in);
typedef void (*mbtk_log)(int level, const char *format,...);
@@ -128,6 +134,42 @@
static void *dlHandle_sleep = NULL;
char *lynqLib_sleep = "/lib/libmbtk_lib.so";
+//0 success,1 timeout,the timeout is 60s
+static int wait_sdk_ready()
+{
+ char buffer[8] = {0};
+ int sdk_value = -1;
+ int timeout = 0;
+ const char *s_kmsg = "echo \"check_sdk_ready ready\" > /dev/kmsg";
+ const char *f_kmsg = "echo \"check_sdk_ready timeout\" > /dev/kmsg";
+ while(timeout < 500) // ~= 60s
+ {
+ timeout++;
+ FILE *fp = popen(SDK_READY_CMD, "r");
+ if(NULL == fp)
+ {
+ continue;
+ }
+ memset(buffer,0,sizeof(buffer));
+ if(fgets(buffer, sizeof(buffer), fp) == NULL)
+ {
+ pclose(fp);
+ perror("fgets failed:");
+ continue;
+ }
+ pclose(fp);
+ printf("gsw wait_sdk_ready:%s",buffer);
+ sdk_value = atoi(buffer);
+ if(sdk_value == 0) //sdk ready
+ {
+ CHECK_SYSTEM(s_kmsg);
+ return 0;
+ }
+ usleep(1000*100);//100ms
+ }
+ CHECK_SYSTEM(f_kmsg);
+ return 1;
+}
/**
* @brief Enable autosleep
@@ -191,7 +233,9 @@
*/
int32_t gsw_pm_sdk_init(GSW_PM_WAKEUPCALLBACK wakeup_callback)
{
- int ret;
+ int ret = 0;
+ ret = wait_sdk_ready(); //Continue to execute even if timed out
+ printf("wait_sdk_ready ret:%d\n",ret); //due to the LOG* can not use
if (handle())
return GSW_HAL_NORMAL_FAIL;
mbtk_lpm_init=(int(*)(mbtk_lpm_handler_t))dlsym(dlHandle_sleep, "mbtk_lpm_init");
diff --git a/mbtk/rootfs/etc/init.d/gsw_start b/mbtk/rootfs/etc/init.d/gsw_start
index 3fe84d2..0fe39dd 100755
--- a/mbtk/rootfs/etc/init.d/gsw_start
+++ b/mbtk/rootfs/etc/init.d/gsw_start
@@ -1,10 +1,12 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2011 OpenWrt.org
-START=20
+START=12
start_service() {
echo "gsw start--" > /dev/kmsg
rmmod mfp #temp for gsw
echo 255 > /sys/class/leds/red/brightness #when start oemapp up GPIO08
+ ifconfig eth0 up
+ ifconfig eth0 mtu 1500
if [ -f /etc/gsw_oemapp_start.sh ]
then
/etc/gsw_oemapp_start.sh &