static VOID halShellInit (VOID) { API_TShellInit(); /* * 初始化 appl 中间件 shell 接口 */ zlibShellInit(); viShellInit(); /* * 初始化 GDB 调试器 */ gdbInit(); }
/********************************************************************************************************* ** 函数名称: API_TShellCreateEx ** 功能描述: 创建一个 ttiny shell 系统, SylixOS 支持多个终端设备同时运行. ** tshell 可以使用标准 tty 设备, 或者 pty 虚拟终端设备. ** 输 入 : iTtyFd 终端设备的文件描述符 ** ulOption 启动参数 ** pfuncRunCallback 初始化完毕后, 启动回调 ** 输 出 : shell 线程的句柄. ** 全局变量: ** 调用模块: API 函数 *********************************************************************************************************/ LW_API LW_OBJECT_HANDLE API_TShellCreateEx (INT iTtyFd, ULONG ulOption, FUNCPTR pfuncRunCallback) { LW_CLASS_THREADATTR threadattrTShell; LW_OBJECT_HANDLE hTShellHandle; INT iKernelFile; PLW_CLASS_TCB ptcbShell; _DebugHandle(__LOGMESSAGE_LEVEL, "ttniy shell system initialize...\r\n"); if (!isatty(iTtyFd)) { /* 检测是否为终端设备 */ _DebugHandle(__ERRORMESSAGE_LEVEL, "is not a tty or pty device.\r\n"); _DebugHandle(__LOGMESSAGE_LEVEL, "ttniy shell system is not initialize.\r\n"); return (0); } API_TShellInit(); /* 初始化 shell */ if (__PROC_GET_PID_CUR() != 0) { /* 在进程中启动 */ iKernelFile = dup2kernel(iTtyFd); /* 将此文件描述符 dup 到 kernel*/ if (iKernelFile < 0) { return (0); } ulOption |= LW_OPTION_TSHELL_CLOSE_FD; /* 执行完毕后需要关闭文件 */ pfuncRunCallback = LW_NULL; /* 进程创建不得安装回调 */ } else { iKernelFile = iTtyFd; } API_ThreadAttrBuild(&threadattrTShell, _G_stShellStackSize, /* shell 堆栈大小 */ LW_PRIO_T_SHELL, LW_CFG_SHELL_THREAD_OPTION | LW_OPTION_OBJECT_GLOBAL, (PVOID)iKernelFile); /* 构建属性块 */ hTShellHandle = API_ThreadInit("t_tshell", __tshellThread, &threadattrTShell, LW_NULL); /* 创建 tshell 线程 */ if (!hTShellHandle) { if (__PROC_GET_PID_CUR() != 0) { /* 在进程中启动 */ __KERNEL_SPACE_ENTER(); close(iKernelFile); /* 内核中关闭 dup 到内核的文件 */ __KERNEL_SPACE_EXIT(); } _DebugHandle(__ERRORMESSAGE_LEVEL, "tshell thread can not create.\r\n"); _DebugHandle(__LOGMESSAGE_LEVEL, "ttniy shell system is not initialize.\r\n"); return (0); } ptcbShell = __GET_TCB_FROM_INDEX(_ObjectGetIndex(hTShellHandle)); __TTINY_SHELL_SET_OPT(ptcbShell, ulOption); /* 初始化选项 */ __TTINY_SHELL_SET_CALLBACK(ptcbShell, pfuncRunCallback); /* 初始化启动回调 */ API_ThreadStart(hTShellHandle); /* 启动 shell 线程 */ return (hTShellHandle); }