对几个关键宏的注解

    百万汉字注解 + 百篇博客分析 => 挖透鸿蒙内核源码
    博客输出站点(国内):http://weharmonyos.com
    博客输出站点(国外):https://openharmony.github.io
    注解文件系统:https://gitee.com/weharmony/third_party_NuttX
    注解协议栈:https://gitee.com/weharmony/third_party_lwip
    注解编译子系统:https://gitee.com/weharmony/build_lite
上级 80b19410
......@@ -111,11 +111,11 @@ static int DoShellExec(char **argv)
}
cmdLine[len - 2] = '\0';
ret = syscall(__NR_shellexec, argv[0], cmdLine);
ret = syscall(__NR_shellexec, argv[0], cmdLine);//执行 系统调用 __NR_shellexec 对应为 SysShellExec
free(cmdLine);
return ret;
}
//shell进程的入口函数
int main(int argc, char **argv)
{
int ret = SH_NOK;
......@@ -128,35 +128,35 @@ int main(int argc, char **argv)
setbuf(stdout, NULL);
shellCB = (ShellCB *)malloc(sizeof(ShellCB));
shellCB = (ShellCB *)malloc(sizeof(ShellCB));//申请shell控制块
if (shellCB == NULL) {
goto ERR_OUT1;
}
ret = memset_s(shellCB, sizeof(ShellCB), 0, sizeof(ShellCB));
ret = memset_s(shellCB, sizeof(ShellCB), 0, sizeof(ShellCB));//初始化控制块
if (ret != SH_OK) {
goto ERR_OUT1;
}
ret = pthread_mutex_init(&shellCB->keyMutex, NULL);
ret = pthread_mutex_init(&shellCB->keyMutex, NULL);//初始化待处理命令链表互斥量
if (ret != SH_OK) {
goto ERR_OUT1;
}
ret = pthread_mutex_init(&shellCB->historyMutex, NULL);
ret = pthread_mutex_init(&shellCB->historyMutex, NULL);//初始化命令历史记录链表互斥量
if (ret != SH_OK) {
goto ERR_OUT2;
}
ret = (int)OsShellKeyInit(shellCB);
ret = (int)OsShellKeyInit(shellCB);//初始化待处理命令
if (ret != SH_OK) {
goto ERR_OUT3;
}
}//设置工作目录
(void)strncpy_s(shellCB->shellWorkingDirectory, PATH_MAX, "/", 2); /* 2:space for "/" */
sem_init(&shellCB->shellSem, 0, 0);
sem_init(&shellCB->shellSem, 0, 0);//信号量初始化
g_shellCB = shellCB;
return OsShellCreateTask(shellCB);
g_shellCB = shellCB;//全局变量,说明鸿蒙同时只支持一个shell进程
return OsShellCreateTask(shellCB);//初始化两个任务
ERR_OUT3:
(void)pthread_mutex_destroy(&shellCB->historyMutex);
......
......@@ -53,7 +53,16 @@ HAL层主要功能是实现轻OpenHarmony与芯片的解耦,
".previous\n" \
)
#endif
/*
如: LOS_HAL_TABLE_BEGIN(g_shellcmd, shellcmd);
扩展后如下:
.section ".liteos.table.shellcmd.begin","aw"
.globl g_shellcmd
.type g_shellcmd, object
.p2align 3
g_shellcmd :
.previous
*/
#ifndef LOS_HAL_TABLE_END
#define LOS_HAL_TABLE_END(label, name) \
__asm__(".section \".liteos.table." X_STRING(name) ".finish\",\"aw\"\n" \
......@@ -64,6 +73,16 @@ HAL层主要功能是实现轻OpenHarmony与芯片的解耦,
".previous\n" \
)
#endif
/*
如: LOS_HAL_TABLE_END(g_shellcmdEnd, shellcmd);
扩展后如下:
.section ".liteos.table.shellcmd.finish","aw"
.globl g_shellcmdEnd
.type g_shellcmdEnd, object
.p2align 3
g_shellcmdEnd :
.previous
*/
/* This macro must be applied to any types whose objects are to be placed in tables */
#ifndef LOS_HAL_TABLE_TYPE
......@@ -80,7 +99,12 @@ HAL层主要功能是实现轻OpenHarmony与芯片的解耦,
LOSBLD_ATTRIB_SECTION(".liteos.table." X_STRING(name) ".data") \
LOSBLD_ATTRIB_USED
#endif
/*
如: LOS_HAL_TABLE_ENTRY(shellcmd)
扩展后如下:
__attribute__((section(".liteos.table.shellcmd.data")))
__attribute__((used))
*/
#ifndef LOS_HAL_TABLE_QUALIFIED_ENTRY
#define LOS_HAL_TABLE_QUALIFIED_ENTRY(name, _qual) \
LOSBLD_ATTRIB_SECTION(".liteos.table." X_STRING(name) ".data." X_STRING(_qual)) \
......
......@@ -70,7 +70,7 @@ typedef struct {//shell 模块的全局信息
UINT32 listNum;//节点数量
UINT32 initMagicFlag;//初始魔法标签 0xABABABAB
LosMux muxLock; //操作链表互斥锁
CmdVerifyTransID transIdHook;
CmdVerifyTransID transIdHook;//暂不知何意.
} CmdModInfo;
//一个shell命令的结构体,命令有长有短,鸿蒙采用了可变数组的方式实现
typedef struct {
......
......@@ -120,11 +120,11 @@ LITE_OS_SEC_TEXT_MINOR UINT32 OsCmdTokenSplit(CHAR *cmdStr, CHAR split, CmdParse
}
switch (state) {
case STAT_INIT:
case STAT_TOKEN_IN:
case STAT_TOKEN_IN://开始参数获取
if ((*p == split) && QUOTES_STATUS_CLOSE(quotes)) {
*p = '\0';
ret = OsCmdParseOneToken(cmdParsed, count++, token);//解析一个令牌
state = STAT_TOKEN_OUT;
ret = OsCmdParseOneToken(cmdParsed, count++, token);//解析一个令牌参数
state = STAT_TOKEN_OUT;//参数获取完成
}
break;
case STAT_TOKEN_OUT:
......@@ -144,7 +144,7 @@ LITE_OS_SEC_TEXT_MINOR UINT32 OsCmdTokenSplit(CHAR *cmdStr, CHAR split, CmdParse
return ret;
}
//解析cmd命令
//解析cmd命令,将关键字,参数分离出来
LITE_OS_SEC_TEXT_MINOR UINT32 OsCmdParse(CHAR *cmdStr, CmdParsed *cmdParsed)
{
if ((cmdStr == NULL) || (cmdParsed == NULL) || (strlen(cmdStr) == 0)) {
......
......@@ -388,7 +388,7 @@ STATIC VOID ShellCmdProcess(ShellCB *shellCB)
shellCB->cmdMaskKeyLink = shellCB->cmdHistoryKeyLink;
}
}
//shell 任务
//shell 任务,处理解析,执行命令
LITE_OS_SEC_TEXT_MINOR UINT32 ShellTask(UINTPTR param1,
UINTPTR param2,
UINTPTR param3,
......@@ -401,8 +401,8 @@ LITE_OS_SEC_TEXT_MINOR UINT32 ShellTask(UINTPTR param1,
(VOID)param4;
while (1) {
PRINTK("\nOHOS # ");
ret = LOS_EventRead(&shellCB->shellEvent,//读取shell 输入事件 例如: cat weharmony.net 命令
PRINTK("\nOHOS # ");//读取shell 输入事件 例如: cat weharmony.net 命令
ret = LOS_EventRead(&shellCB->shellEvent,
0xFFF, LOS_WAITMODE_OR | LOS_WAITMODE_CLR, LOS_WAIT_FOREVER);
if (ret == SHELL_CMD_PARSE_EVENT) {//获得解析命令事件
ShellCmdProcess(shellCB);//处理命令
......
......@@ -784,6 +784,11 @@ ERR_OUT:
}
SHELLCMD_ENTRY(dmesg_shellcmd, CMD_TYPE_STD, "dmesg", XARGS, (CmdCallBackFunc)OsShellCmdDmesg);
/*
将扩展如下:
CmdItem dmesg_shellcmd __attribute__((section(".liteos.table.shellcmd.data")))
__attribute__((used)) = {CMD_TYPE_STD,"dmesg",XARGS,OsShellCmdDmesg}
*/
LOS_MODULE_INIT(OsDmesgInit, LOS_INIT_LEVEL_EARLIEST);//在非常早期调用
#endif
......@@ -104,10 +104,10 @@ int SysReboot(int magic, int magic2, int type)
}
return -EFAULT;
}
//执行 shell 命令
#ifdef LOSCFG_SHELL
int SysShellExec(const char *msgName, const char *cmdString)
{//执行 shell 命令
{
int ret;
unsigned int uintRet;
errno_t err;
......@@ -197,7 +197,7 @@ int SysGetrusage(int what, struct rusage *ru)
}
return 0;
}
//系统配置
long SysSysconf(int name)
{
long ret;
......
git add -A
git commit -m ' 注解shell底层实现
git commit -m ' 对几个关键宏的注解
百万汉字注解 + 百篇博客分析 => 挖透鸿蒙内核源码
博客输出站点(国内):http://weharmonyos.com
博客输出站点(国外):https://openharmony.github.io
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册