提交 304f2136 编写于 作者: 鸿蒙内核源码分析's avatar 鸿蒙内核源码分析

控制台代码部分注释 ,完善task模块的注释

鸿蒙内核源码分析系列 【 CSDN | OSCHINA | WIKI 】
鸿蒙内核源码注释中文版 【 CSDN仓 | Gitee仓 | Github仓 | Coding仓 】四大仓库每日同步更新代码和wiki
项目给鸿蒙内核源码逐行加上中文注解,详细阐述框架和代码细节, 精读 HarmonyOS 内核源码, 将迅速拔高对计算机整体理解,从此高屋建瓴看问题.
上级 98ce816a
[鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note) | [ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note) | [ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note) | [ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files) 给 HarmonyOS 源码逐行加上中文注解,详细阐述设计细节, 助你快速精读 HarmonyOS 内核源码, 掌握整个鸿蒙内核运行机制,四大码仓和wiki每日同步更新. [鸿蒙内核源码注释中文版 【 Gitee仓 ](https://gitee.com/weharmony/kernel_liteos_a_note) | [ CSDN仓 ](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note) | [ Github仓 ](https://github.com/kuangyufei/kernel_liteos_a_note) | [ Coding仓 】](https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files) 给 HarmonyOS 源码加上中文注解,详细阐述架构设计和代码实现细节, 快速精读鸿蒙内核源码, 掌握整个鸿蒙内核运行机制,四大码仓每日同步更新.
[鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852) [| WIKI 】](https://gitee.com/weharmony/kernel_liteos_a_note/wikis/pages) 从 HarmonyOS 架构层视角整理成文, 并首创用生活场景讲故事的方式试图去解构内核,一窥究竟。 [鸿蒙源码分析系列篇 【 CSDN ](https://blog.csdn.net/kuangyufei/article/details/108727970) [| OSCHINA ](https://my.oschina.net/u/3751245/blog/4626852) [| WIKI 】](https://gitee.com/weharmony/kernel_liteos_a_note/wikis/pages) 从 HarmonyOS 架构层视角整理成文, 并首创用生活场景讲故事的方式试图去解构内核,一窥究竟。
--- ---
# ![](https://oscimg.oschina.net/oscnet/up-c1f5f5e88b38fcb25f274a2062384b0c61e.png)
# **[kernel\_liteos\_a_note](https://gitee.com/weharmony/kernel_liteos_a_note): 鸿蒙内核源码注释中文版** # **[kernel\_liteos\_a_note](https://gitee.com/weharmony/kernel_liteos_a_note): 鸿蒙内核源码注释中文版**
[![star](https://gitee.com/weharmony/kernel_liteos_a_note/badge/star.svg?theme=dark)](https://gitee.com/weharmony/kernel_liteos_a_note)[![fork](https://gitee.com/weharmony/kernel_liteos_a_note/badge/fork.svg?theme=dark)](https://gitee.com/weharmony/kernel_liteos_a_note) [![star](https://gitee.com/weharmony/kernel_liteos_a_note/badge/star.svg?theme=dark)](https://gitee.com/weharmony/kernel_liteos_a_note)[![fork](https://gitee.com/weharmony/kernel_liteos_a_note/badge/fork.svg?theme=dark)](https://gitee.com/weharmony/kernel_liteos_a_note)
......
...@@ -107,7 +107,7 @@ VOID OsInterrupt(UINT32 intNum)//中断实际处理函数 ...@@ -107,7 +107,7 @@ VOID OsInterrupt(UINT32 intNum)//中断实际处理函数
#endif #endif
++g_hwiFormCnt[intNum];//中断数量计数器++ ++g_hwiFormCnt[intNum];//中断数量计数器++
*intCnt = *intCnt - 1; //@note_why 这里没看明白什么要 -1 *intCnt = *intCnt - 1; //@note_why 这里没看明白什么要 -1
#ifdef LOSCFG_CPUP_INCLUDE_IRQ //开启查询系统CPU的占用率的中断 #ifdef LOSCFG_CPUP_INCLUDE_IRQ //开启查询系统CPU的占用率的中断
OsCpupIrqEnd(intNum); OsCpupIrqEnd(intNum);
#endif #endif
...@@ -167,7 +167,7 @@ STATIC UINT32 OsHwiCreateNoShared(HWI_HANDLE_T hwiNum, HWI_MODE_T hwiMode, ...@@ -167,7 +167,7 @@ STATIC UINT32 OsHwiCreateNoShared(HWI_HANDLE_T hwiNum, HWI_MODE_T hwiMode,
HWI_UNLOCK(intSave); HWI_UNLOCK(intSave);
return LOS_OK; return LOS_OK;
} }
#else //删除一个共性的中断 #else //删除一个共中断
STATIC UINT32 OsHwiDelShared(HWI_HANDLE_T hwiNum, const HwiIrqParam *irqParam) STATIC UINT32 OsHwiDelShared(HWI_HANDLE_T hwiNum, const HwiIrqParam *irqParam)
{ {
HwiHandleForm *hwiForm = NULL; HwiHandleForm *hwiForm = NULL;
......
...@@ -101,6 +101,11 @@ static inline int GOOD_SIGNO(unsigned int sig) ...@@ -101,6 +101,11 @@ static inline int GOOD_SIGNO(unsigned int sig)
{ {
return (sig < _NSIG) ? 1 : 0; return (sig < _NSIG) ? 1 : 0;
} }
/********************************************************************
Musl官网 http://musl.libc.org/
musl是构建在Linux系统调用API之上的C标准库的实现,包括在基本语言标准POSIX中定义的接口,
以及广泛认可的扩展。musl是轻量级的,快速的,简单的,自由的.
********************************************************************/
#define MAX_SIG_ARRAY_IN_MUSL 128 #define MAX_SIG_ARRAY_IN_MUSL 128
......
...@@ -58,7 +58,7 @@ int raise(int sig) ...@@ -58,7 +58,7 @@ int raise(int sig)
int OsSigIsMember(const sigset_t *set, int signo) int OsSigIsMember(const sigset_t *set, int signo)
{ {
int ret = LOS_NOK; int ret = LOS_NOK;
/* In musl, sig No bits 00000100 present sig No 3, but 1<< 3 = 00001000, so signo needs minus 1 */ /* In musl, sig No bits 00000100 present sig No 3, but 1<< 3 = 00001000, so signo needs minus 1 */ //@note_why 这里对musl的说明没看明白,为什么要-1呢?
signo -= 1; signo -= 1;
/* Verify the signal */ /* Verify the signal */
if (GOOD_SIGNO(signo)) { if (GOOD_SIGNO(signo)) {
......
...@@ -66,12 +66,12 @@ STATIC UINT8 g_taskConsoleIDArray[LOSCFG_BASE_CORE_TSK_LIMIT]; ...@@ -66,12 +66,12 @@ STATIC UINT8 g_taskConsoleIDArray[LOSCFG_BASE_CORE_TSK_LIMIT];
STATIC SPIN_LOCK_INIT(g_consoleSpin); STATIC SPIN_LOCK_INIT(g_consoleSpin);
#define SHELL_ENTRYID_INVALID 0xFFFFFFFF #define SHELL_ENTRYID_INVALID 0xFFFFFFFF
#define SHELL_TASK_PRIORITY 9 #define SHELL_TASK_PRIORITY 9 //shell 的优先级为 9
#define CONSOLE_CIRBUF_EVENT 0x02U #define CONSOLE_CIRBUF_EVENT 0x02U //控制台清除buffer事件
#define CONSOLE_SEND_TASK_EXIT 0x04U #define CONSOLE_SEND_TASK_EXIT 0x04U //控制台发送任务退出事件
#define CONSOLE_SEND_TASK_RUNNING 0x10U #define CONSOLE_SEND_TASK_RUNNING 0x10U //控制台发送任务正在执行事件
CONSOLE_CB *g_console[CONSOLE_NUM]; CONSOLE_CB *g_console[CONSOLE_NUM];//控制台全局变量 默认为 2
#define MIN(a, b) ((a) < (b) ? (a) : (b)) #define MIN(a, b) ((a) < (b) ? (a) : (b))
/* /*
...@@ -272,12 +272,12 @@ STATIC CONSOLE_CB *OsGetConsoleByDevice(const CHAR *deviceName) ...@@ -272,12 +272,12 @@ STATIC CONSOLE_CB *OsGetConsoleByDevice(const CHAR *deviceName)
return NULL; return NULL;
} }
} }
//获取一个控制台ID
STATIC INT32 OsGetConsoleID(const CHAR *deviceName) STATIC INT32 OsGetConsoleID(const CHAR *deviceName)
{ {
if ((deviceName != NULL) && if ((deviceName != NULL) &&
(strlen(deviceName) == strlen(SERIAL)) && (strlen(deviceName) == strlen(SERIAL)) &&
(!strncmp(deviceName, SERIAL, strlen(SERIAL)))) { (!strncmp(deviceName, SERIAL, strlen(SERIAL)))) {//
return CONSOLE_SERIAL; return CONSOLE_SERIAL;
} }
#ifdef LOSCFG_NET_TELNET #ifdef LOSCFG_NET_TELNET
...@@ -1226,11 +1226,11 @@ STATIC VOID OsConsoleCBDeinit(CONSOLE_CB *consoleCB) ...@@ -1226,11 +1226,11 @@ STATIC VOID OsConsoleCBDeinit(CONSOLE_CB *consoleCB)
consoleCB->name = NULL; consoleCB->name = NULL;
(VOID)LOS_MemFree((VOID *)m_aucSysMem0, consoleCB); (VOID)LOS_MemFree((VOID *)m_aucSysMem0, consoleCB);
} }
//创建一个控制台
STATIC CONSOLE_CB *OsConsoleCreate(UINT32 consoleID, const CHAR *deviceName) STATIC CONSOLE_CB *OsConsoleCreate(UINT32 consoleID, const CHAR *deviceName)
{ {
INT32 ret; INT32 ret;
CONSOLE_CB *consoleCB = OsConsoleCBInit(consoleID); CONSOLE_CB *consoleCB = OsConsoleCBInit(consoleID);//
if (consoleCB == NULL) { if (consoleCB == NULL) {
PRINT_ERR("console malloc error.\n"); PRINT_ERR("console malloc error.\n");
return NULL; return NULL;
...@@ -1298,9 +1298,9 @@ STATIC UINT32 OsConsoleDelete(CONSOLE_CB *consoleCB) ...@@ -1298,9 +1298,9 @@ STATIC UINT32 OsConsoleDelete(CONSOLE_CB *consoleCB)
return ret; return ret;
} }
//初始化系统控制台并返回stdinfd stdoutfd stderrfd
/* Initialized system console and return stdinfd stdoutfd stderrfd */ /* Initialized system console and return stdinfd stdoutfd stderrfd */
INT32 system_console_init(const CHAR *deviceName) INT32 system_console_init(const CHAR *deviceName)//deviceName: /dev/serial /dev/telnet
{ {
#ifdef LOSCFG_SHELL #ifdef LOSCFG_SHELL
UINT32 ret; UINT32 ret;
...@@ -1309,20 +1309,20 @@ INT32 system_console_init(const CHAR *deviceName) ...@@ -1309,20 +1309,20 @@ INT32 system_console_init(const CHAR *deviceName)
UINT32 intSave; UINT32 intSave;
CONSOLE_CB *consoleCB = NULL; CONSOLE_CB *consoleCB = NULL;
consoleID = OsGetConsoleID(deviceName); consoleID = OsGetConsoleID(deviceName);//获取控制台ID CONSOLE_SERIAL,CONSOLE_TELNET ,-1三种方式
if (consoleID == -1) { if (consoleID == -1) {
PRINT_ERR("device is full.\n"); PRINT_ERR("device is full.\n");
return VFS_ERROR; return VFS_ERROR;
} }
consoleCB = OsConsoleCreate((UINT32)consoleID, deviceName); consoleCB = OsConsoleCreate((UINT32)consoleID, deviceName);//创建一个控制台CB
if (consoleCB == NULL) { if (consoleCB == NULL) {
PRINT_ERR("%s, %d\n", __FUNCTION__, __LINE__); PRINT_ERR("%s, %d\n", __FUNCTION__, __LINE__);
return VFS_ERROR; return VFS_ERROR;
} }
LOS_SpinLockSave(&g_consoleSpin, &intSave); LOS_SpinLockSave(&g_consoleSpin, &intSave);
g_console[consoleID - 1] = consoleCB; g_console[consoleID - 1] = consoleCB;//g_console最大值只有2
if (OsCurrTaskGet() != NULL) { if (OsCurrTaskGet() != NULL) {
g_taskConsoleIDArray[OsCurrTaskGet()->taskID] = (UINT8)consoleID; g_taskConsoleIDArray[OsCurrTaskGet()->taskID] = (UINT8)consoleID;
} }
......
...@@ -52,13 +52,13 @@ extern "C" { ...@@ -52,13 +52,13 @@ extern "C" {
#ifdef LOSCFG_FS_VFS #ifdef LOSCFG_FS_VFS
/* Define two fixed console id for Console ID. */ /* Define two fixed console id for Console ID. */
#define CONSOLE_SERIAL 1 #define CONSOLE_SERIAL 1 //串行方式
#define CONSOLE_TELNET 2 #define CONSOLE_TELNET 2 //远程登录
#define LOSCFG_PLATFORM_CONSOLE #define LOSCFG_PLATFORM_CONSOLE
#define STDIN 0 #define STDIN 0 //标准输入
#define STDOUT 1 #define STDOUT 1 //标准输出
#define STDERR 2 #define STDERR 2 //错误
#define CONSOLE "/dev/console" #define CONSOLE "/dev/console"
#define CONSOLE_NAMELEN 16 #define CONSOLE_NAMELEN 16
...@@ -76,13 +76,13 @@ typedef struct { ...@@ -76,13 +76,13 @@ typedef struct {
CirBuf cirBufCB; /* Circular buffer CB */ CirBuf cirBufCB; /* Circular buffer CB */
EVENT_CB_S sendEvent; /* Inform telnet send task */ EVENT_CB_S sendEvent; /* Inform telnet send task */
} CirBufSendCB; } CirBufSendCB;
//控制台控制块结构体
typedef struct { typedef struct {
UINT32 consoleID; UINT32 consoleID; //控制台ID
UINT32 consoleType; UINT32 consoleType; //控制台类型
UINT32 consoleSem; UINT32 consoleSem; //
UINT32 shellEntryId; UINT32 shellEntryId;//shell的入口ID
UINT32 consoleMask; UINT32 consoleMask;
struct inode *devInode; struct inode *devInode;
CHAR *name; CHAR *name;
INT32 fd; INT32 fd;
......
...@@ -56,13 +56,13 @@ extern "C" { ...@@ -56,13 +56,13 @@ extern "C" {
#define OS_ERRNO_SHELL_FIFO_ERROR LOS_ERRNO_OS_ERROR(LOS_MOD_SHELL, 0x10) #define OS_ERRNO_SHELL_FIFO_ERROR LOS_ERRNO_OS_ERROR(LOS_MOD_SHELL, 0x10)
/* Max len of show str */ /* Max len of show str */
#define SHOW_MAX_LEN CMD_MAX_LEN #define SHOW_MAX_LEN CMD_MAX_LEN //shell命令的最大长度
#define XARGS 0xFFFFFFFF /* default args */ #define XARGS 0xFFFFFFFF /* default args */
#define CMD_MAX_PARAS 32 #define CMD_MAX_PARAS 32
#define CMD_KEY_LEN 16U #define CMD_KEY_LEN 16U
#define CMD_MAX_LEN (256U + CMD_KEY_LEN) #define CMD_MAX_LEN (256U + CMD_KEY_LEN) //256+16 = 272
#define CMD_KEY_NUM 32 #define CMD_KEY_NUM 32
#define CMD_HISTORY_LEN 10 #define CMD_HISTORY_LEN 10
#define CMD_MAX_PATH 256 #define CMD_MAX_PATH 256
...@@ -85,17 +85,17 @@ extern "C" { ...@@ -85,17 +85,17 @@ extern "C" {
typedef struct { typedef struct {
UINT32 consoleID; //控制台ID UINT32 consoleID; //控制台ID
UINT32 shellTaskHandle; //shell task 的入口函数,这是用于创建 task时指定,类似 应用程序的main函数 UINT32 shellTaskHandle; //创建 shell task 的入口函数,这是用于创建 task时指定,类似 应用程序的main函数
UINT32 shellEntryHandle; UINT32 shellEntryHandle;
VOID *cmdKeyLink; VOID *cmdKeyLink;
VOID *cmdHistoryKeyLink; VOID *cmdHistoryKeyLink;
VOID *cmdMaskKeyLink; VOID *cmdMaskKeyLink;
UINT32 shellBufOffset; UINT32 shellBufOffset;
UINT32 shellKeyType; UINT32 shellKeyType; //
EVENT_CB_S shellEvent; EVENT_CB_S shellEvent; //shell 事件
pthread_mutex_t keyMutex; pthread_mutex_t keyMutex; //键盘输入互斥锁
pthread_mutex_t historyMutex; pthread_mutex_t historyMutex;//历史记录互斥锁
CHAR shellBuf[SHOW_MAX_LEN]; CHAR shellBuf[SHOW_MAX_LEN];//shell命令的最大长度 不能大于 272个字符
CHAR shellWorkingDirectory[PATH_MAX]; CHAR shellWorkingDirectory[PATH_MAX];
} ShellCB; } ShellCB;
......
...@@ -154,7 +154,7 @@ STATIC INT32 ShellCmdLineCheckUDRL(const CHAR ch, ShellCB *shellCB) ...@@ -154,7 +154,7 @@ STATIC INT32 ShellCmdLineCheckUDRL(const CHAR ch, ShellCB *shellCB)
} }
return LOS_NOK; return LOS_NOK;
} }
//对shell命令的解析
LITE_OS_SEC_TEXT_MINOR VOID ShellCmdLineParse(CHAR c, pf_OUTPUT outputFunc, ShellCB *shellCB) LITE_OS_SEC_TEXT_MINOR VOID ShellCmdLineParse(CHAR c, pf_OUTPUT outputFunc, ShellCB *shellCB)
{ {
const CHAR ch = c; const CHAR ch = c;
...@@ -364,21 +364,21 @@ LITE_OS_SEC_TEXT_MINOR UINT32 ShellEntry(UINTPTR param) ...@@ -364,21 +364,21 @@ LITE_OS_SEC_TEXT_MINOR UINT32 ShellEntry(UINTPTR param)
} }
} }
#endif #endif
//处理shell 命令
STATIC VOID ShellCmdProcess(ShellCB *shellCB) STATIC VOID ShellCmdProcess(ShellCB *shellCB)
{ {
CHAR *buf = NULL; CHAR *buf = NULL;
while (1) { while (1) {
buf = ShellGetInputBuf(shellCB); buf = ShellGetInputBuf(shellCB);//获取输入buffer
if (buf == NULL) { if (buf == NULL) {
break; break;
} }
(VOID)ShellMsgParse(buf); (VOID)ShellMsgParse(buf);//对buffer进行解析,执行
ShellSaveHistoryCmd(buf, shellCB); ShellSaveHistoryCmd(buf, shellCB);//保存buffer到历史记录
shellCB->cmdMaskKeyLink = shellCB->cmdHistoryKeyLink; shellCB->cmdMaskKeyLink = shellCB->cmdHistoryKeyLink;
} }
} }
//shell 任务的入口函数
LITE_OS_SEC_TEXT_MINOR UINT32 ShellTask(UINTPTR param1, LITE_OS_SEC_TEXT_MINOR UINT32 ShellTask(UINTPTR param1,
UINTPTR param2, UINTPTR param2,
UINTPTR param3, UINTPTR param3,
...@@ -393,17 +393,17 @@ LITE_OS_SEC_TEXT_MINOR UINT32 ShellTask(UINTPTR param1, ...@@ -393,17 +393,17 @@ LITE_OS_SEC_TEXT_MINOR UINT32 ShellTask(UINTPTR param1,
while (1) { while (1) {
PRINTK("\nOHOS # "); PRINTK("\nOHOS # ");
ret = LOS_EventRead(&shellCB->shellEvent, ret = LOS_EventRead(&shellCB->shellEvent,
0xFFF, LOS_WAITMODE_OR | LOS_WAITMODE_CLR, LOS_WAIT_FOREVER); 0xFFF, LOS_WAITMODE_OR | LOS_WAITMODE_CLR, LOS_WAIT_FOREVER);//等待用户的输入完成 读取cmd命令
if (ret == SHELL_CMD_PARSE_EVENT) { if (ret == SHELL_CMD_PARSE_EVENT) {//收到解析cmd事件
ShellCmdProcess(shellCB); ShellCmdProcess(shellCB);//处理shell 命令
} else if (ret == CONSOLE_SHELL_KEY_EVENT) { } else if (ret == CONSOLE_SHELL_KEY_EVENT) {
break; break;
} }
} }
OsShellKeyDeInit((CmdKeyLink *)shellCB->cmdKeyLink); OsShellKeyDeInit((CmdKeyLink *)shellCB->cmdKeyLink);
OsShellKeyDeInit((CmdKeyLink *)shellCB->cmdHistoryKeyLink); OsShellKeyDeInit((CmdKeyLink *)shellCB->cmdHistoryKeyLink);
(VOID)LOS_EventDestroy(&shellCB->shellEvent); (VOID)LOS_EventDestroy(&shellCB->shellEvent);//删除shell的事件
(VOID)LOS_MemFree((VOID *)m_aucSysMem0, shellCB); (VOID)LOS_MemFree((VOID *)m_aucSysMem0, shellCB);//释放shell所用虚拟内存
return 0; return 0;
} }
...@@ -411,7 +411,7 @@ LITE_OS_SEC_TEXT_MINOR UINT32 ShellTask(UINTPTR param1, ...@@ -411,7 +411,7 @@ LITE_OS_SEC_TEXT_MINOR UINT32 ShellTask(UINTPTR param1,
#define SERIAL_ENTRY_TASK_NAME "SerialEntryTask" #define SERIAL_ENTRY_TASK_NAME "SerialEntryTask"
#define TELNET_SHELL_TASK_NAME "TelnetShellTask" #define TELNET_SHELL_TASK_NAME "TelnetShellTask"
#define TELNET_ENTRY_TASK_NAME "TelnetEntryTask" #define TELNET_ENTRY_TASK_NAME "TelnetEntryTask"
//shell 任务的初始化
LITE_OS_SEC_TEXT_MINOR UINT32 ShellTaskInit(ShellCB *shellCB) LITE_OS_SEC_TEXT_MINOR UINT32 ShellTaskInit(ShellCB *shellCB)
{ {
CHAR *name = NULL; CHAR *name = NULL;
...@@ -425,18 +425,18 @@ LITE_OS_SEC_TEXT_MINOR UINT32 ShellTaskInit(ShellCB *shellCB) ...@@ -425,18 +425,18 @@ LITE_OS_SEC_TEXT_MINOR UINT32 ShellTaskInit(ShellCB *shellCB)
return LOS_NOK; return LOS_NOK;
} }
initParam.pfnTaskEntry = (TSK_ENTRY_FUNC)ShellTask; initParam.pfnTaskEntry = (TSK_ENTRY_FUNC)ShellTask; //任务入口函数
initParam.usTaskPrio = 9; /* 9:shell task priority */ initParam.usTaskPrio = 9; /* 9:shell task priority */
initParam.auwArgs[0] = (UINTPTR)shellCB; initParam.auwArgs[0] = (UINTPTR)shellCB;
initParam.uwStackSize = 0x3000; initParam.uwStackSize = 0x3000; //
initParam.pcName = name; initParam.pcName = name;
initParam.uwResved = LOS_TASK_STATUS_DETACHED; initParam.uwResved = LOS_TASK_STATUS_DETACHED; //线程分离模式
(VOID)LOS_EventInit(&shellCB->shellEvent); (VOID)LOS_EventInit(&shellCB->shellEvent);//事件初始化
return LOS_TaskCreate(&shellCB->shellTaskHandle, &initParam); return LOS_TaskCreate(&shellCB->shellTaskHandle, &initParam);//创建任务,并加入就绪队列,进行调度
} }
//shell
LITE_OS_SEC_TEXT_MINOR UINT32 ShellEntryInit(ShellCB *shellCB) LITE_OS_SEC_TEXT_MINOR UINT32 ShellEntryInit(ShellCB *shellCB)
{ {
UINT32 ret; UINT32 ret;
......
...@@ -55,7 +55,7 @@ STATIC UINT32 OsShellCmdInit(VOID) ...@@ -55,7 +55,7 @@ STATIC UINT32 OsShellCmdInit(VOID)
return OsShellSysCmdRegister(); return OsShellSysCmdRegister();
} }
//创建shell task
STATIC UINT32 OsShellCreateTask(ShellCB *shellCB) STATIC UINT32 OsShellCreateTask(ShellCB *shellCB)
{ {
UINT32 ret = ShellTaskInit(shellCB); UINT32 ret = ShellTaskInit(shellCB);
......
git add -A git add -A
git commit -m 'posix 线程代码部分注释 ,完善task模块的注释 git commit -m '控制台代码部分注释 ,完善task模块的注释
鸿蒙内核源码分析系列 【 CSDN | OSCHINA | WIKI 】 鸿蒙内核源码分析系列 【 CSDN | OSCHINA | WIKI 】
鸿蒙内核源码注释中文版 【 CSDN仓 | Gitee仓 | Github仓 | Coding仓 】四大仓库每日同步更新代码和wiki 鸿蒙内核源码注释中文版 【 CSDN仓 | Gitee仓 | Github仓 | Coding仓 】四大仓库每日同步更新代码和wiki
项目给鸿蒙内核源码逐行加上中文注解,详细阐述框架和代码细节, 精读 HarmonyOS 内核源码, 将迅速拔高对计算机整体理解,从此高屋建瓴看问题.' 项目给鸿蒙内核源码逐行加上中文注解,详细阐述框架和代码细节, 精读 HarmonyOS 内核源码, 将迅速拔高对计算机整体理解,从此高屋建瓴看问题.'
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册