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

看完整的kernel_liteos_a源码需引入third,verdor项目,包括FreeBSD/mbedtls/musl/NuttX 和 hi3516dv300

鸿蒙内核源码分析系列 【 CSDN | OSCHINA | WIKI 】
鸿蒙内核源码注释中文版 【 CSDN仓 | Gitee仓 | Github仓 | Coding仓 】四大仓库每日同步更新代码和wiki
项目给鸿蒙内核源码逐行加上中文注解,详细阐述框架和代码细节, 精读 HarmonyOS 内核源码, 将迅速拔高对计算机整体理解,从此高屋建瓴看问题.
上级 304f2136
......@@ -4,10 +4,10 @@
---
# ![](https://oscimg.oschina.net/oscnet/up-c1f5f5e88b38fcb25f274a2062384b0c61e.png)
# **[kernel\_liteos\_a_note](https://gitee.com/weharmony/kernel_liteos_a_note): 鸿蒙内核源码注释中文版**
# ![](https://oscimg.oschina.net/oscnet/up-c1f5f5e88b38fcb25f274a2062384b0c61e.png)
[![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)
每个码农,职业生涯,都应精读一遍内核源码. 鸿蒙内核源码就是很好的精读项目.一旦熟悉内核代码级实现,将迅速拔高对计算机整体理解,从此高屋建瓴看问题.
......@@ -39,7 +39,7 @@
系列篇文章 进入 >\> [鸿蒙系统源码分析(总目录) 【 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)查看,两大站点持续更新,感谢CSDN和OSCHINA对博客的推荐支持.
注释中文版 进入 >\> [鸿蒙内核源码注释中文版 【 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)阅读,四大仓库和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)阅读,四大仓库每日同步更新...
- ### **加注释方式是怎样的?**
......@@ -50,6 +50,12 @@
另外用字符画了一些图方便理解,直接嵌入到头文件中,比如虚拟内存的全景图,因没有这些图是很难理解内存是如何管理的,后续还会陆续加入更多的图方便理解.
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201028154344813.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2t1YW5neXVmZWk=,size_16,color_FFFFFF,t_70#pic_center)
### **有哪些方便查找的记号**
搜索 @note_why 是笔者暂时没看懂的代码和疑惑, 如果有兴趣请帮笔者一起完善注解,让鸿蒙内核注解越来越清晰.
搜索 @note_pic 是笔者用字符画的一些图,用于方便理解. 目前所绘制的图不多,会陆续增加.
联系方式: kuangyufei@126.com 有好的建议请邮箱或私信联系.
- ### **仰望星空还是埋头走路**
......@@ -58,6 +64,7 @@
- ### **新增的zzz目录是干什么的?**
中文加注版比官方版无新增文件,只多了一个zzz的目录,里面放了一些笔者使用的文件,它与内核代码无关,大家可以忽略它,取名zzz是为了排在最后,减少对原有代码目录级的侵入,zzz的想法源于微信中名称为AAA的那批牛人,你的微信里应该也有他们熟悉的身影吧 :|P
- ### **既然选择了远方,就不要怕天高路远,行动起来!**
......
......@@ -146,7 +146,7 @@ STATIC INLINE UINT32 ArchCurrCpuid(VOID)
{
#if (LOSCFG_KERNEL_SMP == YES)//CPU多核情况
return ARM_SYSREG_READ(MPIDR) & MPIDR_CPUID_MASK;
#else//ARM架构通过MPIDR(Multiprocessor Affinity Register)寄存器给每个CPU定一个逻辑地址。
#else//ARM架构通过MPIDR(Multiprocessor Affinity Register)寄存器给每个CPU定一个逻辑地址。
return 0;
#endif
}
......
......@@ -356,7 +356,7 @@ BOOL OsArchMmuInit(LosArchMmu *archMmu, VADDR_T *virtTtb)
LOS_ListInit(&archMmu->ptList);//初始化页表,双循环进程所有物理页框 LOS_ListAdd(&processCB->vmSpace->archMmu.ptList, &(vmPage->node));
archMmu->virtTtb = virtTtb;//为L1页表在内存位置 section(".bss.prebss.translation_table") UINT8 g_firstPageTable[MMU_DESCRIPTOR_L1_SMALL_ENTRY_NUMBERS]
archMmu->physTtb = (VADDR_T)(UINTPTR)virtTtb - KERNEL_ASPACE_BASE + SYS_MEM_BASE;// TTB寄存器是CP15协处理器的C2寄存器,存页表的基地址
//SYS_MEM_BASE = 0x80000000 KERNEL_ASPACE_BASE = 0x40000000 见于 ..\vendor_hisi_hi35xx_hi3516dv300\config\board\include\board.h
//SYS_MEM_BASE = 0x80000000 KERNEL_ASPACE_BASE = 0x40000000 见于 ..\vendor\hi3516dv300\config\board\include\board.h
//archMmu->physTtb = (VADDR_T)(UINTPTR)virtTtb + 0x40000000;
return TRUE;
}
......
......@@ -44,13 +44,13 @@ extern "C" {
#endif /* __cplusplus */
/* spinlock for hwi module, only available on SMP mode */
LITE_OS_SEC_BSS SPIN_LOCK_INIT(g_hwiSpin);
LITE_OS_SEC_BSS SPIN_LOCK_INIT(g_hwiSpin); //注意全局变量 g_hwiSpin 是在宏里面定义的
#define HWI_LOCK(state) LOS_SpinLockSave(&g_hwiSpin, &(state))
#define HWI_UNLOCK(state) LOS_SpinUnlockRestore(&g_hwiSpin, (state))
size_t g_intCount[LOSCFG_KERNEL_CORE_NUM] = {0};//记录每个CPU core的中断数量
size_t g_intCount[LOSCFG_KERNEL_CORE_NUM] = {0};//记录每个CPU core的中断数量
HwiHandleForm g_hwiForm[OS_HWI_MAX_NUM]; //记录每个硬件中断实体内容 @note_what 表用 form 来表示?有种写 HTML的感觉
STATIC CHAR *g_hwiFormName[OS_HWI_MAX_NUM] = {0};//记录每个硬中断的名称
STATIC CHAR *g_hwiFormName[OS_HWI_MAX_NUM] = {0};//记录每个硬中断的名称 OS_HWI_MAX_NUM = 128 定义于 hi3516dv300
STATIC UINT32 g_hwiFormCnt[OS_HWI_MAX_NUM] = {0};//记录每个硬中断的总数量
VOID OsIncHwiFormCnt(UINT32 index) //增加一个中断数,递增的,所以只有++ ,没有--,
......
......@@ -261,7 +261,7 @@ typedef struct tagIrqParam { //中断参数
const CHAR *pName; //名称
} HwiIrqParam;
extern HwiHandleForm g_hwiForm[OS_HWI_MAX_NUM];//最大中断数量,OS_HWI_MAX_NUM 见于 ..\vendor_hisi_hi3861_hi3861\hi3861\platform\os\Huawei_LiteOS\arch\los_hwi.h
extern HwiHandleForm g_hwiForm[OS_HWI_MAX_NUM];
/**
* @ingroup los_hwi
......
......@@ -37,7 +37,6 @@
#include <lwip/sockets.h>
#if !LWIP_COMPAT_SOCKETS
// 详见: ..\vendor_hisi_hi3861_hi3861\hi3861\third_party\lwip_sack\include\lwip\sockets.h
#define CHECK_NULL_PTR(ptr) do { if (ptr == NULL) { set_errno(EFAULT); return -1; } } while (0)
//接受连接
int accept(int s, struct sockaddr *addr, socklen_t *addrlen)
......
......@@ -38,7 +38,7 @@
#include "linux/spinlock.h"
#include "disk_pri.h"
//VFS是Virtual File System(虚拟文件系统)的缩写,它不是一个实际的文件系统,而是一个异构文件系统之上的软件粘合层
//虚拟文件系统初始化
//虚拟文件系统初始化 los_vfs_init()只能调用一次,多次调用将会造成文件系统异常
void los_vfs_init(void)
{
int err;
......
......@@ -1658,31 +1658,31 @@ int osShellCmdChgrp(int argc, const char **argv)
}
#ifdef LOSCFG_SHELL_CMD_DEBUG
SHELLCMD_ENTRY(lsfd_shellcmd, CMD_TYPE_EX, "lsfd", XARGS, (CmdCallBackFunc)osShellCmdLsfd);//采用shell命令静态注册方式
SHELLCMD_ENTRY(lsfd_shellcmd, CMD_TYPE_EX, "lsfd", XARGS, (CmdCallBackFunc)osShellCmdLsfd);//#lsfd 命令静态注册方式
#if (defined(LOSCFG_FS_FAT) || defined(LOSCFG_FS_RAMFS) || defined(LOSCFG_FS_JFFS))
SHELLCMD_ENTRY(statfs_shellcmd, CMD_TYPE_EX, "statfs", XARGS, (CmdCallBackFunc)osShellCmdStatfs);//采用shell命令静态注册方式
SHELLCMD_ENTRY(touch_shellcmd, CMD_TYPE_EX, "touch", XARGS, (CmdCallBackFunc)osShellCmdTouch);//采用shell命令静态注册方式
SHELLCMD_ENTRY(statfs_shellcmd, CMD_TYPE_EX, "statfs", XARGS, (CmdCallBackFunc)osShellCmdStatfs);//#statfs 命令静态注册方式
SHELLCMD_ENTRY(touch_shellcmd, CMD_TYPE_EX, "touch", XARGS, (CmdCallBackFunc)osShellCmdTouch);//#touch 命令静态注册方式
#endif
#if (defined(LOSCFG_FS_FAT))
SHELLCMD_ENTRY(sync_shellcmd, CMD_TYPE_EX, "sync", XARGS, (CmdCallBackFunc)osShellCmdSync);//采用shell命令静态注册方式
SHELLCMD_ENTRY(sync_shellcmd, CMD_TYPE_EX, "sync", XARGS, (CmdCallBackFunc)osShellCmdSync);//#sync 命令静态注册方式
#endif
SHELLCMD_ENTRY(su_shellcmd, CMD_TYPE_EX, "su", XARGS, (CmdCallBackFunc)osShellCmdSu);//采用shell命令静态注册方式
SHELLCMD_ENTRY(su_shellcmd, CMD_TYPE_EX, "su", XARGS, (CmdCallBackFunc)osShellCmdSu);//#su 命令静态注册方式
#endif
SHELLCMD_ENTRY(ls_shellcmd, CMD_TYPE_EX, "ls", XARGS, (CmdCallBackFunc)osShellCmdLs);//采用shell命令静态注册方式
SHELLCMD_ENTRY(pwd_shellcmd, CMD_TYPE_EX, "pwd", XARGS, (CmdCallBackFunc)osShellCmdPwd);//采用shell命令静态注册方式
SHELLCMD_ENTRY(cd_shellcmd, CMD_TYPE_EX, "cd", XARGS, (CmdCallBackFunc)osShellCmdCd);//采用shell命令静态注册方式
SHELLCMD_ENTRY(cat_shellcmd, CMD_TYPE_EX, "cat", XARGS, (CmdCallBackFunc)osShellCmdCat);//采用shell命令静态注册方式
SHELLCMD_ENTRY(rm_shellcmd, CMD_TYPE_EX, "rm", XARGS, (CmdCallBackFunc)osShellCmdRm);//采用shell命令静态注册方式
SHELLCMD_ENTRY(rmdir_shellcmd, CMD_TYPE_EX, "rmdir", XARGS, (CmdCallBackFunc)osShellCmdRmdir);//采用shell命令静态注册方式
SHELLCMD_ENTRY(mkdir_shellcmd, CMD_TYPE_EX, "mkdir", XARGS, (CmdCallBackFunc)osShellCmdMkdir);//采用shell命令静态注册方式
SHELLCMD_ENTRY(chmod_shellcmd, CMD_TYPE_EX, "chmod", XARGS, (CmdCallBackFunc)osShellCmdChmod);//采用shell命令静态注册方式
SHELLCMD_ENTRY(chown_shellcmd, CMD_TYPE_EX, "chown", XARGS, (CmdCallBackFunc)osShellCmdChown);//采用shell命令静态注册方式
SHELLCMD_ENTRY(chgrp_shellcmd, CMD_TYPE_EX, "chgrp", XARGS, (CmdCallBackFunc)osShellCmdChgrp);//采用shell命令静态注册方式
SHELLCMD_ENTRY(ls_shellcmd, CMD_TYPE_EX, "ls", XARGS, (CmdCallBackFunc)osShellCmdLs);//#ls 命令静态注册方式
SHELLCMD_ENTRY(pwd_shellcmd, CMD_TYPE_EX, "pwd", XARGS, (CmdCallBackFunc)osShellCmdPwd);//#pwd 命令静态注册方式
SHELLCMD_ENTRY(cd_shellcmd, CMD_TYPE_EX, "cd", XARGS, (CmdCallBackFunc)osShellCmdCd);//#cd 命令静态注册方式
SHELLCMD_ENTRY(cat_shellcmd, CMD_TYPE_EX, "cat", XARGS, (CmdCallBackFunc)osShellCmdCat);//#cat 命令静态注册方式
SHELLCMD_ENTRY(rm_shellcmd, CMD_TYPE_EX, "rm", XARGS, (CmdCallBackFunc)osShellCmdRm);//#rm 命令静态注册方式
SHELLCMD_ENTRY(rmdir_shellcmd, CMD_TYPE_EX, "rmdir", XARGS, (CmdCallBackFunc)osShellCmdRmdir);//#rmdir 命令静态注册方式
SHELLCMD_ENTRY(mkdir_shellcmd, CMD_TYPE_EX, "mkdir", XARGS, (CmdCallBackFunc)osShellCmdMkdir);//#mkdir 命令静态注册方式
SHELLCMD_ENTRY(chmod_shellcmd, CMD_TYPE_EX, "chmod", XARGS, (CmdCallBackFunc)osShellCmdChmod);//#chmod 命令静态注册方式
SHELLCMD_ENTRY(chown_shellcmd, CMD_TYPE_EX, "chown", XARGS, (CmdCallBackFunc)osShellCmdChown);//#chown 命令静态注册方式
SHELLCMD_ENTRY(chgrp_shellcmd, CMD_TYPE_EX, "chgrp", XARGS, (CmdCallBackFunc)osShellCmdChgrp);//#chgrp 命令静态注册方式
#if (defined(LOSCFG_FS_FAT) || defined(LOSCFG_FS_RAMFS) || defined(LOSCFG_FS_JFFS))
SHELLCMD_ENTRY(mount_shellcmd, CMD_TYPE_EX, "mount", XARGS, (CmdCallBackFunc)osShellCmdMount);//采用shell命令静态注册方式
SHELLCMD_ENTRY(umount_shellcmd, CMD_TYPE_EX, "umount", XARGS, (CmdCallBackFunc)osShellCmdUmount);//采用shell命令静态注册方式
SHELLCMD_ENTRY(mount_shellcmd, CMD_TYPE_EX, "mount", XARGS, (CmdCallBackFunc)osShellCmdMount);//#mount 命令静态注册方式
SHELLCMD_ENTRY(umount_shellcmd, CMD_TYPE_EX, "umount", XARGS, (CmdCallBackFunc)osShellCmdUmount);//#umount 命令静态注册方式
#endif
#if (defined(LOSCFG_FS_FAT) || defined(LOSCFG_FS_RAMFS) || defined(LOSCFG_FS_JFFS))
SHELLCMD_ENTRY(cp_shellcmd, CMD_TYPE_EX, "cp", XARGS, (CmdCallBackFunc)osShellCmdCp);//采用shell命令静态注册方式
SHELLCMD_ENTRY(cp_shellcmd, CMD_TYPE_EX, "cp", XARGS, (CmdCallBackFunc)osShellCmdCp);//#cp 命令静态注册方式
#endif
#endif
......@@ -351,12 +351,11 @@ typedef struct {
#endif
} LosTaskCB;
//LosTask结构体是给外部用的
typedef struct {// 可见于..\vendor_hisi_hi3861_hi3861\hi3861\platform\os\Huawei_LiteOS\kernel\base\include\los_task_pri.h
typedef struct {
LosTaskCB *runTask;
LosTaskCB *newTask;
} LosTask;
//typedef struct __sigset_t { unsigned long __bits[128/sizeof(long)]; } sigset_t;
//见于 ..\vendor_hisi_hi3861_hi3861\hi3861\platform\os\Huawei_LiteOS\components\lib\libc\musl\include\bits\alltypes.h
struct ProcessSignalInfo {//进程信号信息
siginfo_t *sigInfo; /**< Signal to be dispatched */ //要发送的信号 例如 9 代表 kill process信号
LosTaskCB *defaultTcb; /**< Default TCB */ //默认task,指的是信号的发送方
......
......@@ -56,7 +56,7 @@ typedef struct FilePage {
UINT32 n_maps; /* num of mapping */
struct VmPhysSeg *physSeg; /* physical memory that file page belongs to */
struct VmPage *vmPage; //物理页框
struct page_mapping *mapping; //此结构由文件系统提供,用于描述装入点 见于 ..\third_party_NuttX\include\nuttx\fs\fs.h
struct page_mapping *mapping; //此结构由文件系统提供,用于描述装入点 见于 ..\third_party\NuttX\include\nuttx\fs\fs.h
VM_OFFSET_T pgoff; //页偏移地址,主要用于seek时使用
UINT32 flags; //标签
UINT16 dirtyOff; //脏页的页内偏移地址
......
......@@ -50,7 +50,7 @@ extern "C" {
#endif /* __cplusplus */
#endif /* __cplusplus */
/*
file结构体来自 ..\third_party_NuttX\include\nuttx\fs\fs.h
file结构体来自 ..\third_party\NuttX\include\nuttx\fs\fs.h
struct file //打开文件的基本表示形式
{
unsigned int f_magicnum; /* file magic number * /
......
......@@ -32,7 +32,7 @@
#ifndef __VM_ZONE_H__
#define __VM_ZONE_H__
#include "board.h"
#include "board.h" // 由不同的芯片平台提供,例如: hi3516dv300
#ifdef __cplusplus
#if __cplusplus
......@@ -82,7 +82,7 @@ extern "C" {
| 16M预留区 |
+----------------------------+ 0x00000000U
见于 ..\vendor_hisi_hi35xx_hi3516dv300\config\board\include\board.h
以下定义 可见于 ..\vendor\hi3516dv300\config\board\include\board.h
/* Physical memory address base and size * / //物理内存地址基地址和大小
#ifdef LOSCFG_TEE_ENABLE
......
......@@ -206,8 +206,8 @@ STATIC VOID OsMemNodeSave(LosMemDynNode *node);
#define OS_MEM_MAGIC_VALID(value) \
(((UINTPTR)(value) ^ ((UINTPTR)&(value))) == (UINTPTR)(-1))
UINT8 *m_aucSysMem0 = NULL; //不明白为什么要两个
UINT8 *m_aucSysMem1 = NULL;
UINT8 *m_aucSysMem0 = NULL; //@note_why 不明白鸿蒙对虚拟内存分配为什么要用两个全局变量
UINT8 *m_aucSysMem1 = NULL; //auc是什么意思? 0和1又代表什么意思?
#ifdef LOSCFG_BASE_MEM_NODE_SIZE_CHECK
STATIC UINT8 g_memCheckLevel = LOS_MEM_CHECK_LEVEL_DEFAULT;
......
......@@ -73,7 +73,7 @@ STATIC LosMux g_sysvShmMux;
#define SHM_M 010000
#endif
#ifndef ACCESSPERMS //出工程区了,详见..\vendor_hisi_hi3861_hi3861\hi3861\platform\os\Huawei_LiteOS\components\lib\libc\musl\include\sys\stat.h
#ifndef ACCESSPERMS
#define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO)//文件权限值意思就是 用户,用户组,其他可读可写.
#endif //代表含义U:user G:group O:other
......@@ -85,7 +85,7 @@ struct shmSegMap {
vaddr_t vaddr; //虚拟地址
INT32 shmID; //可看出共享内存使用了ID管理机制
};
//结构体定义可见于..\vendor_hisi_hi3861_hi3861\hi3861\platform\os\Huawei_LiteOS\components\lib\libc\musl\arch\generic\bits\shm.h
struct shmIDSource {//共享存储结构体
struct shmid_ds ds; //是内核为每一个共享内存段维护的数据结构,包含权限,各进程最后操作的时间,进程ID等信息
UINT32 status; //状态 SHM_SEG_FREE ...
......@@ -583,8 +583,8 @@ INT32 ShmCtl(INT32 shmid, INT32 cmd, struct shmid_ds *buf)
{
struct shmIDSource *seg = NULL;
INT32 ret = 0;
struct shm_info shmInfo;//前往查看结构体内容 ..\vendor_hisi_hi3861_hi3861\hi3861\platform\os\Huawei_LiteOS\components\lib\libc\musl\arch\generic\bits\shm.h
struct ipc_perm shm_perm;//前往查看结构体内容 ..\vendor_hisi_hi3861_hi3861\hi3861\platform\os\Huawei_LiteOS\components\lib\libc\musl\arch\generic\bits\ipc.h
struct shm_info shmInfo;
struct ipc_perm shm_perm;
cmd = ((UINT32)cmd & ~IPC_64);
......
......@@ -62,7 +62,7 @@ extern "C" {
extern UINT32 g_uart_fputc_en;
STATIC UINT32 ConsoleSendTask(UINTPTR param);
STATIC UINT8 g_taskConsoleIDArray[LOSCFG_BASE_CORE_TSK_LIMIT];
STATIC UINT8 g_taskConsoleIDArray[LOSCFG_BASE_CORE_TSK_LIMIT];//task 控制台数组,同步task数量,理论上每个task都可以有一个自己的控制台
STATIC SPIN_LOCK_INIT(g_consoleSpin);
#define SHELL_ENTRYID_INVALID 0xFFFFFFFF
......@@ -1323,13 +1323,13 @@ INT32 system_console_init(const CHAR *deviceName)//deviceName: /dev/serial /dev/
LOS_SpinLockSave(&g_consoleSpin, &intSave);
g_console[consoleID - 1] = consoleCB;//g_console最大值只有2
if (OsCurrTaskGet() != NULL) {
g_taskConsoleIDArray[OsCurrTaskGet()->taskID] = (UINT8)consoleID;
if (OsCurrTaskGet() != NULL) {//当前task
g_taskConsoleIDArray[OsCurrTaskGet()->taskID] = (UINT8)consoleID;//任务绑定控制台ID
}
LOS_SpinUnlockRestore(&g_consoleSpin, intSave);
#ifdef LOSCFG_SHELL
ret = OsShellInit(consoleID);
ret = OsShellInit(consoleID);//通过控制台初始化shell
if (ret != LOS_OK) {
PRINT_ERR("%s, %d\n", __FUNCTION__, __LINE__);
LOS_SpinLockSave(&g_consoleSpin, &intSave);
......
......@@ -70,7 +70,7 @@ extern UINT32 __heap_end; // 堆区结束地址
* System clock (unit: HZ)
*/
#ifndef OS_SYS_CLOCK //HZ:是每秒中的周期性变动重复次数的计量
#define OS_SYS_CLOCK (get_bus_clk()) //50000000 即50微秒 见于 ..\vendor_hisi_hi35xx_hi3516dv300\config\board\include\hisoc\clock.h
#define OS_SYS_CLOCK (get_bus_clk()) //50000000 即50微秒 见于 ..\vendor\hi3516dv300\config\board\include\hisoc\clock.h
#endif
/**
* @ingroup los_config
......@@ -88,7 +88,7 @@ extern UINT32 __heap_end; // 堆区结束地址
#define OS_SYS_FUNC_ADDR_START ((UINTPTR)&__int_stack_start)
#endif
#ifndef OS_SYS_FUNC_ADDR_END
#define OS_SYS_FUNC_ADDR_END (KERNEL_VMM_BASE + SYS_MEM_SIZE_DEFAULT)
#define OS_SYS_FUNC_ADDR_END (KERNEL_VMM_BASE + SYS_MEM_SIZE_DEFAULT) //SYS_MEM_SIZE_DEFAULT 见于 ..\vendor\hi3516dv300
#endif
/**
......
......@@ -646,7 +646,7 @@ LITE_OS_SEC_TEXT_MINOR VOID OsShellKeyDeInit(CmdKeyLink *cmdKeyLink)
cmdKeyLink->count = 0;
(VOID)LOS_MemFree(m_aucSysMem0, cmdKeyLink);
}
//向内核注册cmd命令 hwi,watch ==
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellSysCmdRegister(VOID)
{
UINT32 i;
......@@ -663,7 +663,7 @@ LITE_OS_SEC_TEXT_MINOR UINT32 OsShellSysCmdRegister(VOID)
for (i = 0; i < index; ++i) {
cmdItem = (CmdItemNode *)(cmdItemGroup + i * sizeof(CmdItemNode));
cmdItem->cmd = &g_shellcmd[i];
OsCmdAscendingInsert(cmdItem);
OsCmdAscendingInsert(cmdItem);//按升序方式挂入链表
}
g_cmdInfo.listNum += index;
return LOS_OK;
......@@ -694,7 +694,7 @@ LITE_OS_SEC_TEXT_MINOR VOID OsShellCmdPush(const CHAR *string, CmdKeyLink *cmdKe
return;
}
//显示命令的历史记录
//显示命令的历史记录 ,shell history
LITE_OS_SEC_TEXT_MINOR VOID OsShellHistoryShow(UINT32 value, ShellCB *shellCB)
{
CmdKeyLink *cmdtmp = NULL;
......@@ -823,7 +823,7 @@ STATIC UINT32 OsCmdItemCreate(CmdType cmdType, const CHAR *cmdKey, UINT32 paraNu
cmdItemNode->cmd->cmdKey = cmdKey;
(VOID)LOS_MuxLock(&g_cmdInfo.muxLock, LOS_WAIT_FOREVER);//拿锁
OsCmdAscendingInsert(cmdItemNode);//以递升方式
OsCmdAscendingInsert(cmdItemNode);//以递升方式
g_cmdInfo.listNum++; //cmd总数++
(VOID)LOS_MuxUnlock(&g_cmdInfo.muxLock);//释放锁
......
......@@ -44,8 +44,8 @@ extern "C" {
#endif /* __cplusplus */
#endif /* __cplusplus */
STATIC BOOL g_shellSourceFlag = FALSE;
STATIC BOOL g_shellSourceFlag = FALSE;// 标记shell Cmd 是否已初始化
//初始化shell cmd
STATIC UINT32 OsShellCmdInit(VOID)
{
UINT32 ret = OsCmdInit();
......@@ -121,7 +121,7 @@ ERR_OUT1:
return ret;
}
//通过控制台ID 初始化shell
UINT32 OsShellInit(INT32 consoleId)
{
if (g_shellSourceFlag == FALSE) {
......
git add -A
git commit -m '控制台代码部分注释 ,完善task模块的注释
git commit -m '看完整的kernel_liteos_a源码需引入third,verdor项目,包括FreeBSD/mbedtls/musl/NuttX 和 hi3516dv300
鸿蒙内核源码分析系列 【 CSDN | OSCHINA | WIKI 】
鸿蒙内核源码注释中文版 【 CSDN仓 | Gitee仓 | Github仓 | Coding仓 】四大仓库每日同步更新代码和wiki
项目给鸿蒙内核源码逐行加上中文注解,详细阐述框架和代码细节, 精读 HarmonyOS 内核源码, 将迅速拔高对计算机整体理解,从此高屋建瓴看问题.'
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册