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

浏览源代码.

结构体

struct  DmesgInfo
 

函数

UINT32 OsDmesgInit (VOID)
 初始化 dmesg 更多...
 
UINT32 OsDmesgLvGet (VOID)
 
UINT32 OsCheckConsoleLock (VOID)
 
UINT32 OsCheckUartLock (VOID)
 
VOID OsLogShow (VOID)
 使用串口打印日志 更多...
 
UINT32 OsLogRecordStr (const CHAR *str, UINT32 len)
 记录一个字符串 更多...
 
INT32 OsLogMemcpyRecord (const CHAR *buf, UINT32 logLen)
 内存拷贝日志 更多...
 

函数说明

◆ OsCheckConsoleLock()

UINT32 OsCheckConsoleLock ( VOID  )

在文件 dmesg.c323 行定义.

324{
325 return g_consoleLock;
326}
STATIC UINT32 g_consoleLock
用于关闭和打开控制台
Definition: dmesg.c:82
这是这个函数的调用关系图:

◆ OsCheckUartLock()

UINT32 OsCheckUartLock ( VOID  )

在文件 dmesg.c328 行定义.

329{
330 return g_uartLock;
331}
STATIC UINT32 g_uartLock
用于关闭和打开串口
Definition: dmesg.c:83
这是这个函数的调用关系图:

◆ OsDmesgInit()

UINT32 OsDmesgInit ( VOID  )

初始化 dmesg

在文件 dmesg.c333 行定义.

334{
335 CHAR* buffer = NULL;
336
337 buffer = (CHAR *)malloc(KERNEL_LOG_BUF_SIZE + sizeof(DmesgInfo));//总内存分 头 + 体两部分
338 if (buffer == NULL) {
339 return LOS_NOK;
340 }
341 g_mallocAddr = buffer;
342 g_dmesgInfo = (DmesgInfo *)buffer;//全局变量
343 g_dmesgInfo->logHead = 0;//读取开始位置 记录在头部
344 g_dmesgInfo->logTail = 0;//写入开始位置 记录在头部
345 g_dmesgInfo->logSize = 0;//日志已占用数量 记录在头部
346 g_dmesgInfo->logBuf = buffer + sizeof(DmesgInfo);//身体部分开始位置
347 g_logBufSize = KERNEL_LOG_BUF_SIZE;//身体部分总大小位置
348
349 return LOS_OK;
350}
STATIC UINT32 g_logBufSize
缓冲区内容体大小
Definition: dmesg.c:79
STATIC VOID * g_mallocAddr
缓存区开始位置,即头位置
Definition: dmesg.c:80
STATIC DmesgInfo * g_dmesgInfo
保存在 g_mallocAddr 的开始位置,即头信息
Definition: dmesg.c:78
char CHAR
Definition: los_typedef.h:63
void * malloc(size_t size)
动态分配内存块大小
Definition: malloc.c:81
UINT32 logTail
Definition: dmesg_pri.h:51
UINT32 logSize
Definition: dmesg_pri.h:49
UINT32 logHead
Definition: dmesg_pri.h:50
CHAR * logBuf
Definition: dmesg_pri.h:52
函数调用图:

◆ OsDmesgLvGet()

UINT32 OsDmesgLvGet ( VOID  )

在文件 dmesg.c606 行定义.

607{
608 return g_dmesgLogLevel;
609}
STATIC UINT32 g_dmesgLogLevel
日志等级
Definition: dmesg.c:81
这是这个函数的调用关系图:

◆ OsLogMemcpyRecord()

INT32 OsLogMemcpyRecord ( const CHAR buf,
UINT32  logLen 
)

内存拷贝日志

在文件 dmesg.c508 行定义.

509{
510 UINT32 intSave;
511
512 LOS_SpinLockSave(&g_dmesgSpin, &intSave);
513 if (OsCheckError()) {
514 LOS_SpinUnlockRestore(&g_dmesgSpin, intSave);
515 return -1;
516 }
519 OsWriteTailToEnd(buf, logLen);
520 } else {
521 OsWriteTailToHead(buf, logLen);
522 }
523 } else {
524 OsBufFullWrite(buf, logLen);
525 }
526 LOS_SpinUnlockRestore(&g_dmesgSpin, intSave);
527
528 return LOS_OK;
529}
STATIC VOID OsWriteTailToHead(const CHAR *dst, UINT32 logLen)
从头写入
Definition: dmesg.c:435
STATIC UINT32 OsCheckError(VOID)
读取dmesg日志
Definition: dmesg.c:113
STATIC VOID OsWriteTailToEnd(const CHAR *dst, UINT32 logLen)
从尾写入
Definition: dmesg.c:470
STATIC VOID OsBufFullWrite(const CHAR *dst, UINT32 logLen)
Definition: dmesg.c:382
VOID LOS_SpinUnlockRestore(SPIN_LOCK_S *lock, UINT32 intSave)
Definition: los_spinlock.c:108
VOID LOS_SpinLockSave(SPIN_LOCK_S *lock, UINT32 *intSave)
Definition: los_spinlock.c:98
unsigned int UINT32
Definition: los_typedef.h:57
函数调用图:
这是这个函数的调用关系图:

◆ OsLogRecordStr()

UINT32 OsLogRecordStr ( const CHAR str,
UINT32  len 
)

记录一个字符串

在文件 dmesg.c368 行定义.

369{
370 UINT32 i = 0;
371 UINTPTR intSave;
372
373 LOS_SpinLockSave(&g_dmesgSpin, &intSave);
374 while (len--) {
375 (VOID)OsLogRecordChar(str[i]);
376 i++;
377 }
378 LOS_SpinUnlockRestore(&g_dmesgSpin, intSave);
379 return i;
380}
STATIC CHAR OsLogRecordChar(CHAR c)
只记录一个字符
Definition: dmesg.c:352
unsigned long UINTPTR
Definition: los_typedef.h:68
函数调用图:
这是这个函数的调用关系图:

◆ OsLogShow()

VOID OsLogShow ( VOID  )

使用串口打印日志

在文件 dmesg.c531 行定义.

532{
533 UINT32 intSave;
534 UINT32 index;
535 UINT32 i = 0;
536 CHAR *p = NULL;
537
538 LOS_SpinLockSave(&g_dmesgSpin, &intSave);
539 index = g_dmesgInfo->logHead;
540
541 p = (CHAR *)malloc(g_dmesgInfo->logSize + 1);
542 if (p == NULL) {
543 LOS_SpinUnlockRestore(&g_dmesgSpin, intSave);
544 return;
545 }
546 (VOID)memset_s(p, g_dmesgInfo->logSize + 1, 0, g_dmesgInfo->logSize + 1);
547
548 while (i < g_dmesgInfo->logSize) {//一个一个字符拷贝
549 *(p + i) = *(g_dmesgInfo->logBuf + index++);
550 if (index > BUF_MAX_INDEX) {//循环buf,读到尾了得从头开始读
551 index = 0;
552 }
553 i++;
554 if (index == g_dmesgInfo->logTail) {//一直读到写入位置,才退出
555 break;
556 }
557 }
558 LOS_SpinUnlockRestore(&g_dmesgSpin, intSave);
559 UartPuts(p, i, UART_WITH_LOCK);//串口输出
560 free(p);//释放内存
561}
void free(void *ptr)
释放ptr所指向的内存空间
Definition: malloc.c:66
VOID UartPuts(const CHAR *s, UINT32 len, BOOL isLock)
函数调用图:
这是这个函数的调用关系图: