diff --git a/meta-sdk/meta/meta-mediatek-ivt/recipes-core/busybox/busybox/ring_buf.patch b/meta-sdk/meta/meta-mediatek-ivt/recipes-core/busybox/busybox/ring_buf.patch
index 968cb53..89b810b 100755
--- a/meta-sdk/meta/meta-mediatek-ivt/recipes-core/busybox/busybox/ring_buf.patch
+++ b/meta-sdk/meta/meta-mediatek-ivt/recipes-core/busybox/busybox/ring_buf.patch
@@ -22,20 +22,23 @@
  #define DEBUG 0
  
  /* MARK code is not very useful, is bloat, and broken:
-@@ -210,6 +217,7 @@
- 
- typedef struct logFile_t {
+@@ -212,6 +219,8 @@
  	const char *path;
-+	FILE * fp;
  	int fd;
  	time_t last_log_time;
++   	FILE * fp;
++    int will_flush_bytes;
  #if ENABLE_FEATURE_ROTATE_LOGFILE
-@@ -677,6 +685,79 @@
+ 	unsigned size;
+ 	uint8_t isRegular;
+@@ -677,6 +686,129 @@
  static void log_to_kmsg(int pri UNUSED_PARAM, const char *msg UNUSED_PARAM) {}
  #endif /* FEATURE_KMSG_SYSLOG */
  
 +int g_syslog_buffer_size=8*1024;
 +char g_syslog_buffer[16*1024];
++int g_max_flush_interval=0;
++
 +
 +int syslog_is_buffer_write()
 +{
@@ -51,15 +54,33 @@
 +
 +void syslog_close_fp_fd(FILE * fp, int* fd)
 +{
-+	if(syslog_is_buffer_write() && (*fd) > 1)
-+    {   
-+    	fclose(fp);	
-+    }
-+	else 
-+	{
-+		close(*fd);
-+	}
-+	(*fd) = -1;
++	if((*fd) > 1)
++    {
++        if(syslog_is_buffer_write())
++        {   
++        	fclose(fp);	
++        }
++    	else 
++    	{
++    		close(*fd);
++    	}    
++        (*fd) = -1;
++    }		
++}
++
++void syslog_close_all_fp_fd()
++{
++#if ENABLE_FEATURE_SYSLOGD_CFG	
++	logRule_t *rule;
++
++	for (rule = G.log_rules; rule; rule = rule->next) {		
++        if(rule->file!=NULL)
++        {
++            syslog_close_fp_fd(rule->file->fp,&(rule->file->fd));
++        }        
++	}			
++#endif
++    syslog_close_fp_fd(G.logFile.fp,&(G.logFile.fd));
 +}
 +
 +void syslog_get_fp_fd(const char * path, FILE** fp, int* fd)
@@ -95,22 +116,52 @@
 +	}
 +}
 +
-+int syslog_write(FILE* fp, int fd, char *msg, int len)
++void syslog_get_now_time(time_t* now)
 +{
++
++    time(now);
++}
++
++void syslog_write(FILE* fp, int fd, char *msg, int* len, time_t* last_log_time,int* will_flush_bytes)
++{
++	unsigned long interval;
++    time_t now;
 +	if(syslog_is_buffer_write() && fd > 1)
 +	{
-+	    return fwrite(msg,1,len,fp);
++	    *len = fwrite(msg,1,*len,fp);	 	
++        if(*len > 0 && g_max_flush_interval>0)
++        {          
++            (*will_flush_bytes)+=(*len);
++            syslog_get_now_time(&now);			
++            if((*will_flush_bytes) >=g_syslog_buffer_size)
++            {
++                (*will_flush_bytes)=(*will_flush_bytes)%g_syslog_buffer_size;             
++    
++                *last_log_time=now;
++            }
++            else
++            {
++                interval = difftime(now,*last_log_time);   
++
++                if(interval>=g_max_flush_interval)
++                {
++                    fflush(fp);
++                    *last_log_time=now;
++  				   (*will_flush_bytes) = 0;
++                }
++            }                      
++        }	
 +	}	
 +	else
 +	{
-+		return full_write(fd, msg, len);
++		*len =  full_write(fd, msg, *len);
 +	}
 +}
 +
  /* Print a message to the log file. */
  static void log_locally(time_t now, char *msg, logFile_t *log_file)
  {
-@@ -693,14 +774,24 @@
+@@ -693,14 +825,24 @@
  		 * This costs almost nothing since it happens
  		 * _at most_ once a second for each file, and happens
  		 * only when each file is actually written.
@@ -130,7 +181,7 @@
 +		    }   
 +			if(log_file->last_log_time != now) {
 +				log_file->last_log_time = now;
-+				close(log_file->fd);
++				syslog_close_fp_fd(log_file->fp,&(log_file->fd));                   
 +				goto reopen;				
 +			}					        
  		}
@@ -142,7 +193,7 @@
  	}
  	else if (log_file->fd == 1) {
  		/* We are logging to stdout: do nothing */
-@@ -710,10 +801,8 @@
+@@ -710,10 +852,8 @@
  			log_file->fd = 1;
  			/* log_file->isRegular = 0; - already is */
  		} else {
@@ -155,7 +206,21 @@
  			if (log_file->fd < 0) {
  				/* cannot open logfile? - print to /dev/console then */
  				int fd = device_open(DEV_CONSOLE, O_WRONLY | O_NOCTTY | O_NONBLOCK);
-@@ -759,6 +848,10 @@
+@@ -723,7 +863,12 @@
+ 				if (fd != 2)
+ 					close(fd);
+ 				return;
+-			}
++			}            
++            if(syslog_is_buffer_write())
++            {
++                syslog_get_now_time(&(log_file->last_log_time));                 
++                log_file->will_flush_bytes=0;
++            }            
+ #if ENABLE_FEATURE_ROTATE_LOGFILE
+ 			{
+ 				struct stat statf;
+@@ -759,6 +904,10 @@
  				rename(oldFile, newFile);
  			}
  			/* newFile == "f.0" now */
@@ -166,7 +231,7 @@
  			rename(log_file->path, newFile);
  		}
  
-@@ -776,15 +869,16 @@
+@@ -776,15 +925,18 @@
  		fl.l_type = F_UNLCK;
  		fcntl(log_file->fd, F_SETLKW, &fl);
  #endif
@@ -176,29 +241,47 @@
  	}
  /* TODO: what to do on write errors ("disk full")? */
 -	len = full_write(log_file->fd, msg, len);
-+	len = syslog_write(log_file->fp,log_file->fd,msg,len);	
++	syslog_write(log_file->fp,log_file->fd,msg,&len,&(log_file->last_log_time),&(log_file->will_flush_bytes));	
 +	
  	if (len > 0)
- 		log_file->size += len;
+-		log_file->size += len;
++    {   
++		log_file->size += len;        
++    }
  #else
 -	full_write(log_file->fd, msg, len);
-+	syslog_write(log_file->fp,log_file->fd,msg,len);	
++	syslog_write(log_file->fp,log_file->fd,msg,&len,&(log_file->last_log_time),&(log_file->will_flush_bytes));	
  #endif
  
  #ifdef SYSLOGD_WRLOCK
-@@ -974,6 +1068,11 @@
+@@ -974,6 +1126,26 @@
  }
  #endif
  
 +static void syslog_signal_handler(int signum) {    
 +	fflush_all();
++	if(syslog_is_buffer_write() && g_max_flush_interval > 0)
++	{
++		time(&(G.logFile.last_log_time));	
++	    G.logFile.will_flush_bytes =0;	
++#if ENABLE_FEATURE_SYSLOGD_CFG	
++    	logRule_t *rule;
++    	for (rule = G.log_rules; rule; rule = rule->next) {		
++            if(rule->file!=NULL)
++            {
++                time(&(rule->file->last_log_time));
++                rule->file->will_flush_bytes =0;	
++            }            
++    	}			
++#endif
++	}	
 +}
 +
 +
  static void do_syslogd(void) NORETURN;
  static void do_syslogd(void)
  {
-@@ -997,6 +1096,7 @@
+@@ -997,6 +1169,7 @@
  	signal(SIGALRM, do_mark);
  	alarm(G.markInterval);
  #endif
@@ -206,15 +289,15 @@
  	xmove_fd(create_socket(), STDIN_FILENO);
  
  	if (option_mask32 & OPT_circularlog)
-@@ -1089,6 +1189,7 @@
+@@ -1089,6 +1262,7 @@
  	} /* while (!bb_got_signal) */
  
  	timestamp_and_log_internal("syslogd exiting");
-+	syslog_close_fp_fd(G.logFile.fp,&(G.logFile.fd));    
++	syslog_close_all_fp_fd();   
  	remove_pidfile(CONFIG_PID_FILE_PATH "/syslogd.pid");
  	ipcsyslog_cleanup();
  	if (option_mask32 & OPT_kmsg)
-@@ -1097,11 +1198,45 @@
+@@ -1097,11 +1271,45 @@
  #undef recvbuf
  }
  
@@ -234,13 +317,14 @@
 +    }
 +}
 +
-+void syslog_get_uci_config(int* lynq_syslog_filesize, int* lynq_syslog_rotate, int* lynq_syslog_buffer_size)
++void syslog_get_uci_config(int* lynq_syslog_filesize, int* lynq_syslog_rotate, int* lynq_syslog_buffer_size,int* lynq_max_flush_interval)
 +{
 +	if(NULL != lynq_get_value && (NULL != lynq_set_value))
 +	{
 +	    syslog_get_uci_config_item("syslog_flie_size",lynq_syslog_filesize);
 +	    syslog_get_uci_config_item("syslog_flie_rotate",lynq_syslog_rotate); 
-+           syslog_get_uci_config_item("syslog_flie_buffer_size",lynq_syslog_buffer_size);         	
++        syslog_get_uci_config_item("syslog_flie_buffer_size",lynq_syslog_buffer_size);
++        syslog_get_uci_config_item("syslog_flie_max_flush_interval",lynq_max_flush_interval);
 +	}
 +}
 +
@@ -255,19 +339,18 @@
 +    int lynq_syslog_filesize = 80*1024*1024;
 +    int lynq_syslog_rotate = 10;
 +    const char *lynq_libpath_uci = "/lib64/liblynq-uci.so";
-+    int lynq_syslog_buffer_size = 8*1024;
 +    
  #if ENABLE_FEATURE_REMOTE_LOG
  	llist_t *remoteAddrList = NULL;
  #endif
-@@ -1157,6 +1292,14 @@
+@@ -1157,6 +1365,14 @@
  	//umask(0); - why??
  	write_pidfile(CONFIG_PID_FILE_PATH "/syslogd.pid");
  
 +    handle_uci = dlopen(lynq_libpath_uci,RTLD_NOW); 
 +    lynq_get_value = (int (*)(void))dlsym(handle_uci,"lynq_get_value");
 +    lynq_set_value = (int (*)(char *section, char *key, char *value))dlsym(handle_uci,"lynq_set_value");
-+    syslog_get_uci_config(&lynq_syslog_filesize, &lynq_syslog_rotate, &g_syslog_buffer_size);
++    syslog_get_uci_config(&lynq_syslog_filesize, &lynq_syslog_rotate, &g_syslog_buffer_size,&g_max_flush_interval);
 +
 +	G.logFileSize = lynq_syslog_filesize;
 +	G.logFileRotate = lynq_syslog_rotate;
@@ -275,7 +358,7 @@
  	do_syslogd();
  	/* return EXIT_SUCCESS; */
  }
-@@ -1171,3 +1314,6 @@
+@@ -1171,3 +1387,6 @@
  #undef OPTION_STR
  #undef OPTION_DECL
  #undef OPTION_PARAM
diff --git a/meta/meta-mediatek-ivt/recipes-core/busybox/busybox/ring_buf.patch b/meta/meta-mediatek-ivt/recipes-core/busybox/busybox/ring_buf.patch
index 968cb53..89b810b 100755
--- a/meta/meta-mediatek-ivt/recipes-core/busybox/busybox/ring_buf.patch
+++ b/meta/meta-mediatek-ivt/recipes-core/busybox/busybox/ring_buf.patch
@@ -22,20 +22,23 @@
  #define DEBUG 0
  
  /* MARK code is not very useful, is bloat, and broken:
-@@ -210,6 +217,7 @@
- 
- typedef struct logFile_t {
+@@ -212,6 +219,8 @@
  	const char *path;
-+	FILE * fp;
  	int fd;
  	time_t last_log_time;
++   	FILE * fp;
++    int will_flush_bytes;
  #if ENABLE_FEATURE_ROTATE_LOGFILE
-@@ -677,6 +685,79 @@
+ 	unsigned size;
+ 	uint8_t isRegular;
+@@ -677,6 +686,129 @@
  static void log_to_kmsg(int pri UNUSED_PARAM, const char *msg UNUSED_PARAM) {}
  #endif /* FEATURE_KMSG_SYSLOG */
  
 +int g_syslog_buffer_size=8*1024;
 +char g_syslog_buffer[16*1024];
++int g_max_flush_interval=0;
++
 +
 +int syslog_is_buffer_write()
 +{
@@ -51,15 +54,33 @@
 +
 +void syslog_close_fp_fd(FILE * fp, int* fd)
 +{
-+	if(syslog_is_buffer_write() && (*fd) > 1)
-+    {   
-+    	fclose(fp);	
-+    }
-+	else 
-+	{
-+		close(*fd);
-+	}
-+	(*fd) = -1;
++	if((*fd) > 1)
++    {
++        if(syslog_is_buffer_write())
++        {   
++        	fclose(fp);	
++        }
++    	else 
++    	{
++    		close(*fd);
++    	}    
++        (*fd) = -1;
++    }		
++}
++
++void syslog_close_all_fp_fd()
++{
++#if ENABLE_FEATURE_SYSLOGD_CFG	
++	logRule_t *rule;
++
++	for (rule = G.log_rules; rule; rule = rule->next) {		
++        if(rule->file!=NULL)
++        {
++            syslog_close_fp_fd(rule->file->fp,&(rule->file->fd));
++        }        
++	}			
++#endif
++    syslog_close_fp_fd(G.logFile.fp,&(G.logFile.fd));
 +}
 +
 +void syslog_get_fp_fd(const char * path, FILE** fp, int* fd)
@@ -95,22 +116,52 @@
 +	}
 +}
 +
-+int syslog_write(FILE* fp, int fd, char *msg, int len)
++void syslog_get_now_time(time_t* now)
 +{
++
++    time(now);
++}
++
++void syslog_write(FILE* fp, int fd, char *msg, int* len, time_t* last_log_time,int* will_flush_bytes)
++{
++	unsigned long interval;
++    time_t now;
 +	if(syslog_is_buffer_write() && fd > 1)
 +	{
-+	    return fwrite(msg,1,len,fp);
++	    *len = fwrite(msg,1,*len,fp);	 	
++        if(*len > 0 && g_max_flush_interval>0)
++        {          
++            (*will_flush_bytes)+=(*len);
++            syslog_get_now_time(&now);			
++            if((*will_flush_bytes) >=g_syslog_buffer_size)
++            {
++                (*will_flush_bytes)=(*will_flush_bytes)%g_syslog_buffer_size;             
++    
++                *last_log_time=now;
++            }
++            else
++            {
++                interval = difftime(now,*last_log_time);   
++
++                if(interval>=g_max_flush_interval)
++                {
++                    fflush(fp);
++                    *last_log_time=now;
++  				   (*will_flush_bytes) = 0;
++                }
++            }                      
++        }	
 +	}	
 +	else
 +	{
-+		return full_write(fd, msg, len);
++		*len =  full_write(fd, msg, *len);
 +	}
 +}
 +
  /* Print a message to the log file. */
  static void log_locally(time_t now, char *msg, logFile_t *log_file)
  {
-@@ -693,14 +774,24 @@
+@@ -693,14 +825,24 @@
  		 * This costs almost nothing since it happens
  		 * _at most_ once a second for each file, and happens
  		 * only when each file is actually written.
@@ -130,7 +181,7 @@
 +		    }   
 +			if(log_file->last_log_time != now) {
 +				log_file->last_log_time = now;
-+				close(log_file->fd);
++				syslog_close_fp_fd(log_file->fp,&(log_file->fd));                   
 +				goto reopen;				
 +			}					        
  		}
@@ -142,7 +193,7 @@
  	}
  	else if (log_file->fd == 1) {
  		/* We are logging to stdout: do nothing */
-@@ -710,10 +801,8 @@
+@@ -710,10 +852,8 @@
  			log_file->fd = 1;
  			/* log_file->isRegular = 0; - already is */
  		} else {
@@ -155,7 +206,21 @@
  			if (log_file->fd < 0) {
  				/* cannot open logfile? - print to /dev/console then */
  				int fd = device_open(DEV_CONSOLE, O_WRONLY | O_NOCTTY | O_NONBLOCK);
-@@ -759,6 +848,10 @@
+@@ -723,7 +863,12 @@
+ 				if (fd != 2)
+ 					close(fd);
+ 				return;
+-			}
++			}            
++            if(syslog_is_buffer_write())
++            {
++                syslog_get_now_time(&(log_file->last_log_time));                 
++                log_file->will_flush_bytes=0;
++            }            
+ #if ENABLE_FEATURE_ROTATE_LOGFILE
+ 			{
+ 				struct stat statf;
+@@ -759,6 +904,10 @@
  				rename(oldFile, newFile);
  			}
  			/* newFile == "f.0" now */
@@ -166,7 +231,7 @@
  			rename(log_file->path, newFile);
  		}
  
-@@ -776,15 +869,16 @@
+@@ -776,15 +925,18 @@
  		fl.l_type = F_UNLCK;
  		fcntl(log_file->fd, F_SETLKW, &fl);
  #endif
@@ -176,29 +241,47 @@
  	}
  /* TODO: what to do on write errors ("disk full")? */
 -	len = full_write(log_file->fd, msg, len);
-+	len = syslog_write(log_file->fp,log_file->fd,msg,len);	
++	syslog_write(log_file->fp,log_file->fd,msg,&len,&(log_file->last_log_time),&(log_file->will_flush_bytes));	
 +	
  	if (len > 0)
- 		log_file->size += len;
+-		log_file->size += len;
++    {   
++		log_file->size += len;        
++    }
  #else
 -	full_write(log_file->fd, msg, len);
-+	syslog_write(log_file->fp,log_file->fd,msg,len);	
++	syslog_write(log_file->fp,log_file->fd,msg,&len,&(log_file->last_log_time),&(log_file->will_flush_bytes));	
  #endif
  
  #ifdef SYSLOGD_WRLOCK
-@@ -974,6 +1068,11 @@
+@@ -974,6 +1126,26 @@
  }
  #endif
  
 +static void syslog_signal_handler(int signum) {    
 +	fflush_all();
++	if(syslog_is_buffer_write() && g_max_flush_interval > 0)
++	{
++		time(&(G.logFile.last_log_time));	
++	    G.logFile.will_flush_bytes =0;	
++#if ENABLE_FEATURE_SYSLOGD_CFG	
++    	logRule_t *rule;
++    	for (rule = G.log_rules; rule; rule = rule->next) {		
++            if(rule->file!=NULL)
++            {
++                time(&(rule->file->last_log_time));
++                rule->file->will_flush_bytes =0;	
++            }            
++    	}			
++#endif
++	}	
 +}
 +
 +
  static void do_syslogd(void) NORETURN;
  static void do_syslogd(void)
  {
-@@ -997,6 +1096,7 @@
+@@ -997,6 +1169,7 @@
  	signal(SIGALRM, do_mark);
  	alarm(G.markInterval);
  #endif
@@ -206,15 +289,15 @@
  	xmove_fd(create_socket(), STDIN_FILENO);
  
  	if (option_mask32 & OPT_circularlog)
-@@ -1089,6 +1189,7 @@
+@@ -1089,6 +1262,7 @@
  	} /* while (!bb_got_signal) */
  
  	timestamp_and_log_internal("syslogd exiting");
-+	syslog_close_fp_fd(G.logFile.fp,&(G.logFile.fd));    
++	syslog_close_all_fp_fd();   
  	remove_pidfile(CONFIG_PID_FILE_PATH "/syslogd.pid");
  	ipcsyslog_cleanup();
  	if (option_mask32 & OPT_kmsg)
-@@ -1097,11 +1198,45 @@
+@@ -1097,11 +1271,45 @@
  #undef recvbuf
  }
  
@@ -234,13 +317,14 @@
 +    }
 +}
 +
-+void syslog_get_uci_config(int* lynq_syslog_filesize, int* lynq_syslog_rotate, int* lynq_syslog_buffer_size)
++void syslog_get_uci_config(int* lynq_syslog_filesize, int* lynq_syslog_rotate, int* lynq_syslog_buffer_size,int* lynq_max_flush_interval)
 +{
 +	if(NULL != lynq_get_value && (NULL != lynq_set_value))
 +	{
 +	    syslog_get_uci_config_item("syslog_flie_size",lynq_syslog_filesize);
 +	    syslog_get_uci_config_item("syslog_flie_rotate",lynq_syslog_rotate); 
-+           syslog_get_uci_config_item("syslog_flie_buffer_size",lynq_syslog_buffer_size);         	
++        syslog_get_uci_config_item("syslog_flie_buffer_size",lynq_syslog_buffer_size);
++        syslog_get_uci_config_item("syslog_flie_max_flush_interval",lynq_max_flush_interval);
 +	}
 +}
 +
@@ -255,19 +339,18 @@
 +    int lynq_syslog_filesize = 80*1024*1024;
 +    int lynq_syslog_rotate = 10;
 +    const char *lynq_libpath_uci = "/lib64/liblynq-uci.so";
-+    int lynq_syslog_buffer_size = 8*1024;
 +    
  #if ENABLE_FEATURE_REMOTE_LOG
  	llist_t *remoteAddrList = NULL;
  #endif
-@@ -1157,6 +1292,14 @@
+@@ -1157,6 +1365,14 @@
  	//umask(0); - why??
  	write_pidfile(CONFIG_PID_FILE_PATH "/syslogd.pid");
  
 +    handle_uci = dlopen(lynq_libpath_uci,RTLD_NOW); 
 +    lynq_get_value = (int (*)(void))dlsym(handle_uci,"lynq_get_value");
 +    lynq_set_value = (int (*)(char *section, char *key, char *value))dlsym(handle_uci,"lynq_set_value");
-+    syslog_get_uci_config(&lynq_syslog_filesize, &lynq_syslog_rotate, &g_syslog_buffer_size);
++    syslog_get_uci_config(&lynq_syslog_filesize, &lynq_syslog_rotate, &g_syslog_buffer_size,&g_max_flush_interval);
 +
 +	G.logFileSize = lynq_syslog_filesize;
 +	G.logFileRotate = lynq_syslog_rotate;
@@ -275,7 +358,7 @@
  	do_syslogd();
  	/* return EXIT_SUCCESS; */
  }
-@@ -1171,3 +1314,6 @@
+@@ -1171,3 +1387,6 @@
  #undef OPTION_STR
  #undef OPTION_DECL
  #undef OPTION_PARAM
