OpenHarmony内核源码分析(Shell解析篇) | 应用窥视内核的窗口

🚥往期推文全新看点(文中附带最新·鸿蒙全栈笔记)

1️⃣ 鸿蒙(HarmonyOS)北向开发知识点记录~

2️⃣ 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~

3️⃣ 鸿蒙应用开发与鸿蒙系统开发哪个更有前景?

4️⃣ 嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~

5️⃣ 对于大前端开发来说,转鸿蒙开发究竟是福还是祸?

6️⃣ 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?

7️⃣ 记录一场鸿蒙开发岗位面试经历~

8️⃣ 持续更新中……


系列篇从内核视角用一句话概括shell的底层实现为:两个任务,三个阶段。其本质是独立进程,因而划到进程管理模块。每次创建shell进程都会再创建两个任务。

  • 客户端任务(ShellEntry): 负责接受来自终端(控制台)敲入的一个个字符,字符按VT规范组装成一句句的命令。
  • 服务端任务(ShellTask): 对命令进行解析并执行,将结果输出到控制台。
    而按命令生命周期可分三个阶段.
  • 编辑: 鸿蒙在这个部分实现了一个简单的编辑器功能,处理控制台输入的每个字符,主要包括了对控制字符 例如 <ESC>,\t,\b,\n,\r,四个方向键0x41 ~ 0x44 的处理。
  • 解析: 对编辑后的字符串进行解析,解析出命令项和参数项,找到对应的命令项执行函数。
  • 执行: 命令可通过静态和动态两种方式注册到内核,解析出具体命令后在注册表中找到对应函数回调。将结果输出到控制台。

编辑部分由客户端任务完成,后两个部分由服务端任务完成,命令全局注册由内核完成。

  • 本篇主要说 服务端任务 和 解析/执行过程.
  • 客户端任务 和 编辑过程 已在 (Shell编辑篇) 中说明,请自行翻看.
总体过程
  • 第一步: 将支持的shell命令注册进全局链表,支持静态和动态两种方式,内容包括命令项,参数信息和回调函数.
  • 第二步: 由独立任务解析出用户输入的命令行,拆分出命令项和参数内容
  • 第三步: 通过命令项在全局链表中遍历找到已注册的回调函数,并执行.
结构体

鸿蒙对命令的注册用了三个结构体,个人感觉前两个可以合成一个,降低代码阅读难度.

STATIC CmdModInfo g_cmdInfo;//shell 命令模块信息,上面挂了所有的命令项(ls,cd ,cp ==)

typedef struct {//命令项
    CmdType cmdType;	//命令类型
		//CMD_TYPE_EX:不支持标准命令参数输入,会把用户填写的命令关键字屏蔽掉,例如:输入ls /ramfs,传入给注册函数的参数只有/ramfs,而ls命令关键字并不会被传入。
		//CMD_TYPE_STD:支持的标准命令参数输入,所有输入的字符都会通过命令解析后被传入。
    const CHAR *cmdKey;	//命令关键字,例如:ls 函数在Shell中访问的名称。
    UINT32 paraNum;		//调
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值