Description:[feature] support customized hilog ring buffer size

Change-Id: I5d23deaada5939bbb6fb57505f72c2348bd6afe9
Signed-off-by: shenchenkai <shenchenkai@huawei.com>
This commit is contained in:
shenchenkai 2021-12-17 15:45:15 +08:00
parent 52c12f7c9d
commit 0e48a0dd12
3 changed files with 25 additions and 2 deletions

View File

@ -101,4 +101,7 @@ source "kernel/extended/hidumper/Kconfig"
source "kernel/extended/perf/Kconfig" source "kernel/extended/perf/Kconfig"
######################### config options of lms ######################### ######################### config options of lms #########################
source "kernel/extended/lms/Kconfig" source "kernel/extended/lms/Kconfig"
######################### config options of hilog #########################
source "kernel/extended/hilog/Kconfig"

View File

@ -0,0 +1,15 @@
config HILOG
tristate "Hilog support"
default y
help
hilog buffer manager.
Hilog is a simple log manager for OpenHarmonyOS.
log string write to /dev/hilog, and the hilog driver copy it
to the ring buffer. Ring buffer can be read from userspace.
config HILOG_BUFFER_SIZE
int "hilog buffer size"
default 4096
help
Define the default ring buffer size of hilog

View File

@ -41,7 +41,7 @@
#include "los_vm_lock.h" #include "los_vm_lock.h"
#include "user_copy.h" #include "user_copy.h"
#define HILOG_BUFFER 4096 #define HILOG_BUFFER LOSCFG_HILOG_BUFFER_SIZE
#define DRIVER_MODE 0666 #define DRIVER_MODE 0666
#define HILOG_DRIVER "/dev/hilog" #define HILOG_DRIVER "/dev/hilog"
@ -255,6 +255,7 @@ static void HiLogCoverOldLog(size_t bufLen)
int retval; int retval;
struct HiLogEntry header; struct HiLogEntry header;
size_t totalSize = bufLen + sizeof(struct HiLogEntry); size_t totalSize = bufLen + sizeof(struct HiLogEntry);
int dropLogLines = 0;
while (totalSize + g_hiLogDev.size > HILOG_BUFFER) { while (totalSize + g_hiLogDev.size > HILOG_BUFFER) {
retval = HiLogReadRingBuffer((unsigned char *)&header, sizeof(header)); retval = HiLogReadRingBuffer((unsigned char *)&header, sizeof(header));
@ -262,9 +263,13 @@ static void HiLogCoverOldLog(size_t bufLen)
break; break;
} }
dropLogLines++;
HiLogBufferDec(sizeof(header)); HiLogBufferDec(sizeof(header));
HiLogBufferDec(header.len); HiLogBufferDec(header.len);
} }
if (dropLogLines > 0) {
dprintf("hilog ringbuffer full, drop %d line(s) log", dropLogLines);
}
} }
int HiLogWriteInternal(const char *buffer, size_t bufLen) int HiLogWriteInternal(const char *buffer, size_t bufLen)