# Shell命令开呿Œ‡å¯¼ 新增Shellå‘½ä»¤çš„å…¸åž‹å¼€å‘æµç¨‹å¦‚下: 1. 包å«å¦‚下头文件: ``` #include "shell.h" #include "shcmd.h" ``` 2. 注册命令。用户å¯ä»¥é€‰æ‹©é™æ€æ³¨å†Œå‘½ä»¤æ–¹å¼å’Œç³»ç»Ÿè¿è¡Œæ—¶åŠ¨æ€æ³¨å†Œå‘½ä»¤æ–¹å¼ï¼Œé™æ€æ³¨å†Œå‘½ä»¤æ–¹å¼ä¸€èˆ¬ç”¨åœ¨ç³»ç»Ÿå¸¸ç”¨å‘½ä»¤æ³¨å†Œï¼ŒåŠ¨æ€æ³¨å†Œå‘½ä»¤æ–¹å¼ä¸€èˆ¬ç”¨åœ¨ç”¨æˆ·å‘½ä»¤æ³¨å†Œã€‚ 1. 陿€æ³¨å†Œå‘½ä»¤æ–¹å¼ï¼š 1. 通过å®çš„æ–¹å¼æ³¨å†Œã€‚ 这个å®çš„原型为: ``` SHELLCMD_ENTRY(l, cmdType, cmdKey, paraNum, cmdHook) ``` **表1** SHELLCMD_ENTRY傿•°è¯¦è§£ | 傿•° | æè¿° | | -------- | -------- | | l | 陿€æ³¨å†Œå…¨å±€å˜é‡å(注æ„:ä¸ä¸Žç³»ç»Ÿä¸å…¶ä»–symbolé‡å)。 | | cmdType | 命令类型:<br/>- CMD_TYPE_EXï¼šä¸æ”¯æŒæ ‡å‡†å‘½ä»¤å‚数输入,会把用户填写的命令关键å—å±è”½æŽ‰ï¼Œä¾‹å¦‚:输入ls /ramfsï¼Œä¼ å…¥ç»™æ³¨å†Œå‡½æ•°çš„å‚æ•°åªæœ‰/ramfs,而ls命令关键å—å¹¶ä¸ä¼šè¢«ä¼ 入。<br/>- CMD_TYPE_STD:支æŒçš„æ ‡å‡†å‘½ä»¤å‚数输入,所有输入的å—符都会通过命令解æžåŽè¢«ä¼ 入。 | | cmdKey | 命令关键å—,函数在Shellä¸è®¿é—®çš„å称。 | | paraNum | è°ƒç”¨çš„æ‰§è¡Œå‡½æ•°çš„å…¥å‚æœ€å¤§ä¸ªæ•°ï¼Œæš‚䏿”¯æŒã€‚ | | cmdHook | 命令执行函数地å€ï¼Œå³å‘½ä»¤å®žé™…执行函数。 | 如: ``` SHELLCMD_ENTRY(ls_shellcmd, CMD_TYPE_EX, "ls", XARGS, (CMD_CBK_FUNC)osShellCmdLs) ``` 2. 在build/mk/liteos_tables_ldflags.mk䏿·»åŠ ç›¸åº”é€‰é¡¹ï¼š 如:上述“lsâ€å‘½ä»¤æ³¨å†Œæ—¶ï¼Œéœ€åœ¨build/mk/liteos_tables_ldflags.mk䏿·»åŠ â€œ-uls_shellcmdâ€ã€‚å…¶ä¸-uåŽé¢è·ŸSHELLCMD_ENTRYçš„ç¬¬ä¸€ä¸ªå‚æ•°ã€‚ 2. åŠ¨æ€æ³¨å†Œå‘½ä»¤æ–¹å¼ï¼š 注册函数原型: ``` UINT32 osCmdReg(CmdT ype cmdType, CHAR *cmdKey, UINT32 paraNum, CmdCallBackFunc cmdProc) ``` **表2** UINT32 osCmdReg傿•°è¯¦è§£ | 傿•° | æè¿° | | -------- | -------- | | cmdType | 命令类型:<br/>- CMD_TYPE_EXï¼šä¸æ”¯æŒæ ‡å‡†å‘½ä»¤å‚数输入,会把用户填写的命令关键å—å±è”½æŽ‰ï¼Œä¾‹å¦‚:输入ls /ramfsï¼Œä¼ å…¥ç»™æ³¨å†Œå‡½æ•°çš„å‚æ•°åªæœ‰/ramfs,而ls命令关键å—å¹¶ä¸ä¼šè¢«ä¼ 入。<br/>- CMD_TYPE_STD:支æŒçš„æ ‡å‡†å‘½ä»¤å‚数输入,所有输入的å—符都会通过命令解æžåŽè¢«ä¼ 入。 | | cmdKey | 命令关键å—,函数在Shellä¸è®¿é—®çš„å称。 | | paraNum | è°ƒç”¨çš„æ‰§è¡Œå‡½æ•°çš„å…¥å‚æœ€å¤§ä¸ªæ•°ï¼Œæš‚䏿”¯æŒè¯¥å‚数;当å‰ä¸ºé»˜è®¤å€¼XARGS(0xFFFFFFFF)。 | | cmdHook | 命令执行函数地å€ï¼Œå³å‘½ä»¤å®žé™…执行函数。 | 如: ``` osCmdReg(CMD_TYPE_EX, "ls", XARGS, (CMD_CBK_FUNC)osShellCmdLs) ``` >  **说明:** > 命令关键å—必须是唯一的,也å³ä¸¤ä¸ªä¸åŒçš„命令项ä¸èƒ½æ‹¥æœ‰ç›¸åŒçš„命令关键å—,å¦åˆ™åªä¼šæ‰§è¡Œå…¶ä¸ä¸€ä¸ªã€‚ > > Shell在执行用户命令时,如果å˜åœ¨å¤šä¸ªå‘½ä»¤å…³é”®å—相åŒçš„命令,åªä¼šæ‰§è¡Œå…¶ä¸åœ¨"help"命令䏿ޒåºåœ¨æœ€å‰é¢çš„一个。 3. æ·»åŠ å†…ç½®å‘½ä»¤å‡½æ•°åŽŸåž‹ã€‚ ``` UINT32 osShellCmdLs(UINT32 argc, CHAR **argv) ``` **表3** osShellCmdLs傿•°è¯´æ˜Ž | 傿•° | 傿•°æè¿° | | -------- | -------- | | argc | Shell命令ä¸ï¼Œå‚数个数。 | | argv | 为指针数组,æ¯ä¸ªå…ƒç´ 指å‘一个å—符串,å¯ä»¥æ ¹æ®é€‰æ‹©å‘½ä»¤ç±»åž‹ï¼Œå†³å®šæ˜¯å¦è¦æŠŠå‘½ä»¤å…³é”®å—ä¼ å…¥ç»™æ³¨å†Œå‡½æ•°ã€‚ | 4. 输入Shell命令,有两ç§è¾“入方å¼ï¼š - 在串å£å·¥å…·ä¸ç›´æŽ¥è¾“å…¥Shell命令。 - 在telnet工具ä¸è¾“å…¥Shell命令(telnet使用方å¼è¯¦è§[telnet](../kernel/kernel-small-debug-shell-net-telnet.md))。