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

浏览源代码.

函数

UINT32 OsLkLoggerInit (VOID)
 内核日志初始化 更多...
 
UINT32 ShellEntry (UINTPTR param)
 读取命令行内容 更多...
 
UINT32 ShellTask (UINTPTR param1, UINTPTR param2, UINTPTR param3, UINTPTR param4)
 shell 任务,处理解析,执行命令 更多...
 

变量

CmdItem g_shellcmd []
 
CmdItem g_shellcmdEnd
 

函数说明

◆ 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 OsLkTraceLvSet(INT32 level)
Definition: shell_lk.c:83
VOID OsLkDefaultFunc(INT32 level, const CHAR *func, INT32 line, const CHAR *fmt, va_list ap)
内核打印函数,在LOS_LkPrint中回调
Definition: shell_lk.c:199
STATIC Logger g_logger
Definition: shell_lk.c:67
函数调用图:

◆ ShellEntry()

UINT32 ShellEntry ( UINTPTR  param)

读取命令行内容

在文件 shmsg.c345 行定义.

346{
347 CHAR ch;
348 INT32 n = 0;
349 ShellCB *shellCB = (ShellCB *)param;
350
351 CONSOLE_CB *consoleCB = OsGetConsoleByID((INT32)shellCB->consoleID);//获取绑定的控制台,目的是从控制台读数据
352 if (consoleCB == NULL) {
353 PRINT_ERR("Shell task init error!\n");
354 return 1;
355 }
356
357 (VOID)memset_s(shellCB->shellBuf, SHOW_MAX_LEN, 0, SHOW_MAX_LEN);//重置shell命令buf
358
359 while (1) {
360#ifdef LOSCFG_PLATFORM_CONSOLE
361 if (!IsConsoleOccupied(consoleCB)) {//控制台是否被占用
362#endif
363 /* is console ready for shell ? */
364 n = read(consoleCB->fd, &ch, 1);//系统调用,从控制台读取一个字符内容,字符一个个处理
365 if (n == 1) {//如果能读到一个字符
366 ShellCmdLineParse(ch, (pf_OUTPUT)dprintf, shellCB);
367 }
368 if (is_nonblock(consoleCB)) {//在非阻塞模式下暂停 50ms
369 LOS_Msleep(50); /* 50: 50MS for sleep */
370 }
371#ifdef LOSCFG_PLATFORM_CONSOLE
372 }
373#endif
374 }
375}
void ShellCmdLineParse(char c, OutputFunc outputFunc, ShellCB *shellCB)
Definition: shmsg.c:271
BOOL is_nonblock(const CONSOLE_CB *consoleCB)
Definition: console.c:1508
BOOL IsConsoleOccupied(const CONSOLE_CB *consoleCB)
控制台是否被占用
Definition: console.c:173
CONSOLE_CB * OsGetConsoleByID(INT32 consoleID)
获取参数控制台ID 获取对应的控制台控制块(描述符)
Definition: console.c:1546
LITE_OS_SEC_TEXT_MINOR VOID LOS_Msleep(UINT32 msecs)
Sleep the current task.
Definition: los_misc.c:44
void dprintf(const char *fmt,...)
Format and print data.
VOID(* pf_OUTPUT)(const CHAR *fmt,...)
Definition: los_printf.h:70
signed int INT32
Definition: los_typedef.h:60
char CHAR
Definition: los_typedef.h:63
控制台控制块(描述符)
Definition: console.h:105
INT32 fd
系统文件句柄, 由内核分配
Definition: console.h:112
Definition: shell.h:71
char shellBuf[SHOW_MAX_LEN]
接受shell命令 buf大小
Definition: shell.h:83
unsigned int consoleID
控制台ID
Definition: shell.h:72
函数调用图:

◆ ShellTask()

UINT32 ShellTask ( UINTPTR  param1,
UINTPTR  param2,
UINTPTR  param3,
UINTPTR  param4 
)

shell 任务,处理解析,执行命令

在文件 shmsg.c392 行定义.

396{
397 UINT32 ret;
398 ShellCB *shellCB = (ShellCB *)param1;
399 (VOID)param2;
400 (VOID)param3;
401 (VOID)param4;
402
403 while (1) {
404 PRINTK("\nOHOS # ");//在没有事件的时候,会一直停留在此, 读取shell 输入事件 例如: cat weharmony.net 命令
405 ret = LOS_EventRead(&shellCB->shellEvent,
406 0xFFF, LOS_WAITMODE_OR | LOS_WAITMODE_CLR, LOS_WAIT_FOREVER);
407 if (ret == SHELL_CMD_PARSE_EVENT) {//获得解析命令事件
408 ShellCmdProcess(shellCB);//处理命令
409 } else if (ret == CONSOLE_SHELL_KEY_EVENT) {//退出shell事件
410 break;
411 }
412 }
415 (VOID)LOS_EventDestroy(&shellCB->shellEvent);//注销事件
416 (VOID)LOS_MemFree((VOID *)m_aucSysMem0, shellCB);//释放shell控制块
417 return 0;
418}
void OsShellKeyDeInit(CmdKeyLink *cmdKeyLink)
shell的析构函数
Definition: shcmd.c:497
LITE_OS_SEC_TEXT_INIT UINT32 LOS_EventDestroy(PEVENT_CB_S eventCB)
销毁指定的事件控制块
Definition: los_event.c:334
LITE_OS_SEC_TEXT UINT32 LOS_EventRead(PEVENT_CB_S eventCB, UINT32 eventMask, UINT32 mode, UINT32 timeout)
读取指定事件类型,超时时间为相对时间:单位为Tick
Definition: los_event.c:313
UINT32 LOS_MemFree(VOID *pool, VOID *ptr)
释放从指定动态内存中申请的内存
Definition: los_memory.c:1369
UINT8 * m_aucSysMem0
异常交互动态内存池地址的起始地址,当不支持异常交互特性时,m_aucSysMem0等于m_aucSysMem1。
Definition: los_memory.c:107
unsigned int UINT32
Definition: los_typedef.h:57
STATIC VOID ShellCmdProcess(ShellCB *shellCB)
Definition: shmsg.c:378
EVENT_CB_S shellEvent
事件类型触发
Definition: shell.h:141
void * cmdKeyLink
命令链表,所有敲过的命令链表
Definition: shell.h:75
void * cmdHistoryKeyLink
命令的历史记录链表,去重,10个
Definition: shell.h:76
函数调用图:

变量说明

◆ g_shellcmd

CmdItem g_shellcmd[]
extern

◆ g_shellcmdEnd

CmdItem g_shellcmdEnd
extern