更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
shell_lk.c 文件参考

浏览源代码.

结构体

struct  Logger
 

枚举

enum  MODULE_FLAG {
  MODULE0 = 0 , MODULE1 = 1 , MODULE2 = 2 , MODULE3 = 3 ,
  MODULE4 = 4
}
 

函数

VOID OsLkDefaultFunc (INT32 level, const CHAR *func, INT32 line, const CHAR *fmt, va_list ap)
 内核打印函数,在LOS_LkPrint中回调 更多...
 
STATIC INLINE INT32 OsLkTraceLvGet (VOID)
 
const CHAROsLkCurLogLvGet (VOID)
 
VOID OsLkTraceLvSet (INT32 level)
 
VOID OsLkModuleLvSet (INT32 level)
 
INT32 OsLkModuleLvGet (VOID)
 
VOID OsLkLogFileSet (const CHAR *str)
 
FILE * OsLogFpGet (VOID)
 
INT32 CmdLog (INT32 argc, const CHAR **argv)
 log命令用于修改&查询日志配置,即选择打印哪种日志? 该命令依赖于LOSCFG_SHELL_LK,使用时通过menuconfig在配置项中开启"Enable Shell lk": Debug —> Enable a Debug Version —> Enable Shell —> Enable Shell lK。 log level命令用于配置日志的打印等级,包括6个等级 TRACE_EMG = 0, TRACE_COMMON = 1, TRACE_ERROR = 2, TRACE_WARN = 3, TRACE_INFO = 4, TRACE_DEBUG = 5 若level不在有效范围内,会打印提示信息。 若log level命令不加[levelNum]参数,则默认查看当前打印等级,并且提示使用方法。 输入log level 4 更多...
 
STATIC INLINE VOID OsLogCycleRecord (INT32 level)
 日志循环记录 更多...
 
VOID LOS_LkPrint (INT32 level, const CHAR *func, INT32 line, const CHAR *fmt,...)
 打印 更多...
 
VOID LOS_LkRegHook (LK_FUNC hook)
 设置回调函数 更多...
 
UINT32 OsLkLoggerInit (VOID)
 内核日志初始化 更多...
 
 SHELLCMD_ENTRY (log_shellcmd, CMD_TYPE_EX, "log", 1,(CmdCallBackFunc) CmdLog)
 
 LOS_MODULE_INIT (OsLkLoggerInit, LOS_INIT_LEVEL_EARLIEST)
 日志模块初始化 更多...
 

变量

STATIC INT32 g_tracelevel
 日志等级 更多...
 
STATIC INT32 g_modulelevel
 模块等级 更多...
 
STATIC Logger g_logger = { 0 }
 
LK_FUNC g_osLkHook = (LK_FUNC)OsLkDefaultFunc
 

枚举类型说明

◆ MODULE_FLAG

枚举值
MODULE0 
MODULE1 
MODULE2 
MODULE3 
MODULE4 

在文件 shell_lk.c48 行定义.

48 {//模块等级
49 MODULE0 = 0,
50 MODULE1 = 1,
51 MODULE2 = 2,
52 MODULE3 = 3,
53 MODULE4 = 4,
MODULE_FLAG
Definition: shell_lk.c:48
@ MODULE0
Definition: shell_lk.c:49
@ MODULE3
Definition: shell_lk.c:52
@ MODULE2
Definition: shell_lk.c:51
@ MODULE4
Definition: shell_lk.c:53
@ MODULE1
Definition: shell_lk.c:50

函数说明

◆ CmdLog()

INT32 CmdLog ( INT32  argc,
const CHAR **  argv 
)

log命令用于修改&查询日志配置,即选择打印哪种日志? 该命令依赖于LOSCFG_SHELL_LK,使用时通过menuconfig在配置项中开启"Enable Shell lk": Debug —> Enable a Debug Version —> Enable Shell —> Enable Shell lK。 log level命令用于配置日志的打印等级,包括6个等级 TRACE_EMG = 0, TRACE_COMMON = 1, TRACE_ERROR = 2, TRACE_WARN = 3, TRACE_INFO = 4, TRACE_DEBUG = 5 若level不在有效范围内,会打印提示信息。 若log level命令不加[levelNum]参数,则默认查看当前打印等级,并且提示使用方法。 输入log level 4

在文件 shell_lk.c141 行定义.

142{
143 size_t level;
144 size_t module;
145 CHAR *p = NULL;
146
147 if ((argc != 2) || (argv == NULL)) { /* 2:count of parameter */
148 PRINTK("Usage: log level <num>\n");
149 PRINTK("Usage: log module <num>\n");
150 PRINTK("Usage: log path <PATH>\n");
151 return -1;
152 }
153
154 if (!strncmp(argv[0], "level", strlen(argv[0]) + 1)) {
155 level = strtoul(argv[1], &p, 0);
156 if ((*p != 0) || (level > LOS_TRACE_LEVEL) || (level < LOS_EMG_LEVEL)) {
157 PRINTK("current log level %s\n", OsLkCurLogLvGet());
158 PRINTK("log %s [num] can access as 0:EMG 1:COMMON 2:ERROR 3:WARN 4:INFO 5:DEBUG\n", argv[0]);
159 } else {
160 OsLkTraceLvSet(level);
161 PRINTK("Set current log level %s\n", OsLkCurLogLvGet());
162 }
163 } else if (!strncmp(argv[0], "module", strlen(argv[0]) + 1)) {
164 module = strtoul(argv[1], &p, 0);
165 if ((*p != 0) || (module > MODULE4) || (module < MODULE0)) {
166 PRINTK("log %s can't access %s\n", argv[0], argv[1]);
167 PRINTK("not support yet\n");
168 return -1;
169 } else {
170 OsLkModuleLvSet(module);
171 PRINTK("not support yet\n");
172 }
173 } else if (!strncmp(argv[0], "path", strlen(argv[0]) + 1)) {
174 OsLkLogFileSet(argv[1]);
175 PRINTK("not support yet\n");
176 } else {
177 PRINTK("Usage: log level <num>\n");
178 PRINTK("Usage: log module <num>\n");
179 PRINTK("Usage: log path <PATH>\n");
180 return -1;
181 }
182
183 return 0;
184}
char CHAR
Definition: los_typedef.h:63
VOID OsLkTraceLvSet(INT32 level)
Definition: shell_lk.c:83
VOID OsLkModuleLvSet(INT32 level)
Definition: shell_lk.c:90
VOID OsLkLogFileSet(const CHAR *str)
Definition: shell_lk.c:102
const CHAR * OsLkCurLogLvGet(VOID)
Definition: shell_lk.c:78
函数调用图:

◆ LOS_MODULE_INIT()

LOS_MODULE_INIT ( OsLkLoggerInit  ,
LOS_INIT_LEVEL_EARLIEST   
)

日志模块初始化

◆ OsLkCurLogLvGet()

const CHAR * OsLkCurLogLvGet ( VOID  )

在文件 shell_lk.c78 行定义.

79{
81}
const CHAR * OsLogLvGet(INT32 level)
Definition: los_printf.c:64
STATIC INT32 g_tracelevel
日志等级
Definition: shell_lk.c:64
函数调用图:
这是这个函数的调用关系图:

◆ OsLkDefaultFunc()

VOID OsLkDefaultFunc ( INT32  level,
const CHAR func,
INT32  line,
const CHAR fmt,
va_list  ap 
)

内核打印函数,在LOS_LkPrint中回调

在文件 shell_lk.c199 行定义.

200{
201 if (level > OsLkTraceLvGet()) {
202#ifdef LOSCFG_SHELL_DMESG
203 if ((UINT32)level <= OsDmesgLvGet()) {
204 OsLogCycleRecord(level);
205 DmesgPrintf(fmt, ap);
206 }
207#endif
208 return;
209 }
210 if ((level != LOS_COMMON_LEVEL) && ((level > LOS_EMG_LEVEL) && (level <= LOS_TRACE_LEVEL))) {
211 dprintf("[%s][%s:%s]", OsLogLvGet(level),
212 ((OsCurrProcessGet() == NULL) ? "NULL" : OsCurrProcessGet()->processName),
213 ((OsCurrTaskGet() == NULL) ? "NULL" : OsCurrTaskGet()->taskName));
214 }
215 LkDprintf(fmt, ap);
216}
UINT32 OsDmesgLvGet(VOID)
Definition: dmesg.c:606
void dprintf(const char *fmt,...)
Format and print data.
VOID LkDprintf(const CHAR *fmt, va_list ap)
LK 注者的理解是 log kernel(内核日志)
Definition: los_printf.c:217
VOID DmesgPrintf(const CHAR *fmt, va_list ap)
Definition: los_printf.c:228
STATIC INLINE LosProcessCB * OsCurrProcessGet(VOID)
STATIC INLINE LosTaskCB * OsCurrTaskGet(VOID)
unsigned int UINT32
Definition: los_typedef.h:57
STATIC INLINE VOID OsLogCycleRecord(INT32 level)
日志循环记录
Definition: shell_lk.c:188
STATIC INLINE INT32 OsLkTraceLvGet(VOID)
Definition: shell_lk.c:73
函数调用图:
这是这个函数的调用关系图:

◆ OsLkLogFileSet()

VOID OsLkLogFileSet ( const CHAR str)

在文件 shell_lk.c102 行定义.

103{
104 FILE *fp = NULL;
105 FILE *oldfp = g_logger.fp;
106
107 if (str == NULL) {
108 return;
109 }
110 fp = fopen(str, "w+");
111 if (fp == NULL) {
112 printf("Error can't open the %s file\n",str);
113 return;
114 }
115
116 g_logger.fp = fp;
117 if (oldfp != NULL) {
118 fclose(oldfp);
119 }
120}
STATIC Logger g_logger
Definition: shell_lk.c:67
FILE * fp
文件描述结构体
Definition: shell_lk.c:61
这是这个函数的调用关系图:

◆ OsLkLoggerInit()

UINT32 OsLkLoggerInit ( VOID  )

内核日志初始化

在文件 shell_lk.c233 行定义.

234{
235 (VOID)memset_s(&g_logger, sizeof(Logger), 0, sizeof(Logger));
236 OsLkTraceLvSet(TRACE_DEFAULT);
237 LOS_LkRegHook(OsLkDefaultFunc);//注册钩子函数,将在 LOS_LkPrint中回调钩子
238#ifdef LOSCFG_SHELL_DMESG
239 (VOID)LOS_DmesgLvSet(TRACE_DEFAULT);
240#endif
241 return LOS_OK;
242}
UINT32 LOS_DmesgLvSet(UINT32 level)
Set the dmesg level
Definition: dmesg.c:611
VOID LOS_LkRegHook(LK_FUNC hook)
设置回调函数
Definition: shell_lk.c:228
VOID OsLkDefaultFunc(INT32 level, const CHAR *func, INT32 line, const CHAR *fmt, va_list ap)
内核打印函数,在LOS_LkPrint中回调
Definition: shell_lk.c:199
函数调用图:

◆ OsLkModuleLvGet()

INT32 OsLkModuleLvGet ( VOID  )

在文件 shell_lk.c97 行定义.

98{
99 return g_modulelevel;
100}
STATIC INT32 g_modulelevel
模块等级
Definition: shell_lk.c:65

◆ OsLkModuleLvSet()

VOID OsLkModuleLvSet ( INT32  level)

在文件 shell_lk.c90 行定义.

91{
92 g_modulelevel = level;
93 g_logger.module_level = level;
94 return;
95}
INT32 module_level
模块等级
Definition: shell_lk.c:59
这是这个函数的调用关系图:

◆ OsLkTraceLvGet()

STATIC INLINE INT32 OsLkTraceLvGet ( VOID  )

在文件 shell_lk.c73 行定义.

74{
75 return g_tracelevel;
76}
这是这个函数的调用关系图:

◆ OsLkTraceLvSet()

VOID OsLkTraceLvSet ( INT32  level)

在文件 shell_lk.c83 行定义.

84{
85 g_tracelevel = level;
86 g_logger.trace_level = level;
87 return;
88}
INT32 trace_level
跟踪等级
Definition: shell_lk.c:60
这是这个函数的调用关系图:

◆ OsLogCycleRecord()

STATIC INLINE VOID OsLogCycleRecord ( INT32  level)

日志循环记录

在文件 shell_lk.c188 行定义.

189{
190 UINT32 tmpLen;
191 if (level != LOS_COMMON_LEVEL && (level > LOS_EMG_LEVEL && level <= LOS_TRACE_LEVEL)) {
192 tmpLen = strlen(OsLogLvGet(level));
193 const CHAR* tmpPtr = OsLogLvGet(level);
194 (VOID)OsLogRecordStr(tmpPtr, tmpLen);
195 }
196}
UINT32 OsLogRecordStr(const CHAR *str, UINT32 len)
记录一个字符串
Definition: dmesg.c:368
函数调用图:
这是这个函数的调用关系图:

◆ OsLogFpGet()

FILE * OsLogFpGet ( VOID  )

在文件 shell_lk.c122 行定义.

123{
124 return g_logger.fp;
125}

◆ SHELLCMD_ENTRY()

SHELLCMD_ENTRY ( log_shellcmd  ,
CMD_TYPE_EX  ,
"log"  ,
,
(CmdCallBackFunc CmdLog 
)

变量说明

◆ g_logger

STATIC Logger g_logger = { 0 }

在文件 shell_lk.c67 行定义.

◆ g_modulelevel

STATIC INT32 g_modulelevel

模块等级

在文件 shell_lk.c65 行定义.

◆ g_osLkHook

在文件 shell_lk.c71 行定义.

◆ g_tracelevel

STATIC INT32 g_tracelevel

日志等级

在文件 shell_lk.c64 行定义.