提交 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 @@ ...@@ -4,10 +4,10 @@
--- ---
# ![](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): 鸿蒙内核源码注释中文版**
# ![](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) [![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 @@ ...@@ -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对博客的推荐支持. 系列篇文章 进入 >\> [鸿蒙系统源码分析(总目录) 【 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 @@ ...@@ -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) ![在这里插入图片描述](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 @@ ...@@ -58,6 +64,7 @@
- ### **新增的zzz目录是干什么的?** - ### **新增的zzz目录是干什么的?**
中文加注版比官方版无新增文件,只多了一个zzz的目录,里面放了一些笔者使用的文件,它与内核代码无关,大家可以忽略它,取名zzz是为了排在最后,减少对原有代码目录级的侵入,zzz的想法源于微信中名称为AAA的那批牛人,你的微信里应该也有他们熟悉的身影吧 :|P 中文加注版比官方版无新增文件,只多了一个zzz的目录,里面放了一些笔者使用的文件,它与内核代码无关,大家可以忽略它,取名zzz是为了排在最后,减少对原有代码目录级的侵入,zzz的想法源于微信中名称为AAA的那批牛人,你的微信里应该也有他们熟悉的身影吧 :|P
- ### **既然选择了远方,就不要怕天高路远,行动起来!** - ### **既然选择了远方,就不要怕天高路远,行动起来!**
......
...@@ -146,7 +146,7 @@ STATIC INLINE UINT32 ArchCurrCpuid(VOID) ...@@ -146,7 +146,7 @@ STATIC INLINE UINT32 ArchCurrCpuid(VOID)
{ {
#if (LOSCFG_KERNEL_SMP == YES)//CPU多核情况 #if (LOSCFG_KERNEL_SMP == YES)//CPU多核情况
return ARM_SYSREG_READ(MPIDR) & MPIDR_CPUID_MASK; return ARM_SYSREG_READ(MPIDR) & MPIDR_CPUID_MASK;
#else//ARM架构通过MPIDR(Multiprocessor Affinity Register)寄存器给每个CPU定一个逻辑地址。 #else//ARM架构通过MPIDR(Multiprocessor Affinity Register)寄存器给每个CPU定一个逻辑地址。
return 0; return 0;
#endif #endif
} }
......
...@@ -356,7 +356,7 @@ BOOL OsArchMmuInit(LosArchMmu *archMmu, VADDR_T *virtTtb) ...@@ -356,7 +356,7 @@ BOOL OsArchMmuInit(LosArchMmu *archMmu, VADDR_T *virtTtb)
LOS_ListInit(&archMmu->ptList);//初始化页表,双循环进程所有物理页框 LOS_ListAdd(&processCB->vmSpace->archMmu.ptList, &(vmPage->node)); 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->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寄存器,存页表的基地址 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; //archMmu->physTtb = (VADDR_T)(UINTPTR)virtTtb + 0x40000000;
return TRUE; return TRUE;
} }
......
...@@ -44,13 +44,13 @@ extern "C" { ...@@ -44,13 +44,13 @@ extern "C" {
#endif /* __cplusplus */ #endif /* __cplusplus */
/* spinlock for hwi module, only available on SMP mode */ /* 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_LOCK(state) LOS_SpinLockSave(&g_hwiSpin, &(state))
#define HWI_UNLOCK(state) LOS_SpinUnlockRestore(&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的感觉 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};//记录每个硬中断的总数量 STATIC UINT32 g_hwiFormCnt[OS_HWI_MAX_NUM] = {0};//记录每个硬中断的总数量
VOID OsIncHwiFormCnt(UINT32 index) //增加一个中断数,递增的,所以只有++ ,没有--, VOID OsIncHwiFormCnt(UINT32 index) //增加一个中断数,递增的,所以只有++ ,没有--,
......
...@@ -261,7 +261,7 @@ typedef struct tagIrqParam { //中断参数 ...@@ -261,7 +261,7 @@ typedef struct tagIrqParam { //中断参数
const CHAR *pName; //名称 const CHAR *pName; //名称
} HwiIrqParam; } 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 * @ingroup los_hwi
......
...@@ -37,7 +37,6 @@ ...@@ -37,7 +37,6 @@
#include <lwip/sockets.h> #include <lwip/sockets.h>
#if !LWIP_COMPAT_SOCKETS #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) #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) int accept(int s, struct sockaddr *addr, socklen_t *addrlen)
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
#include "linux/spinlock.h" #include "linux/spinlock.h"
#include "disk_pri.h" #include "disk_pri.h"
//VFS是Virtual File System(虚拟文件系统)的缩写,它不是一个实际的文件系统,而是一个异构文件系统之上的软件粘合层 //VFS是Virtual File System(虚拟文件系统)的缩写,它不是一个实际的文件系统,而是一个异构文件系统之上的软件粘合层
//虚拟文件系统初始化 //虚拟文件系统初始化 los_vfs_init()只能调用一次,多次调用将会造成文件系统异常
void los_vfs_init(void) void los_vfs_init(void)
{ {
int err; int err;
......
...@@ -1658,31 +1658,31 @@ int osShellCmdChgrp(int argc, const char **argv) ...@@ -1658,31 +1658,31 @@ int osShellCmdChgrp(int argc, const char **argv)
} }
#ifdef LOSCFG_SHELL_CMD_DEBUG #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)) #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(statfs_shellcmd, CMD_TYPE_EX, "statfs", XARGS, (CmdCallBackFunc)osShellCmdStatfs);//#statfs 命令静态注册方式
SHELLCMD_ENTRY(touch_shellcmd, CMD_TYPE_EX, "touch", XARGS, (CmdCallBackFunc)osShellCmdTouch);//采用shell命令静态注册方式 SHELLCMD_ENTRY(touch_shellcmd, CMD_TYPE_EX, "touch", XARGS, (CmdCallBackFunc)osShellCmdTouch);//#touch 命令静态注册方式
#endif #endif
#if (defined(LOSCFG_FS_FAT)) #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 #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 #endif
SHELLCMD_ENTRY(ls_shellcmd, CMD_TYPE_EX, "ls", XARGS, (CmdCallBackFunc)osShellCmdLs);//采用shell命令静态注册方式 SHELLCMD_ENTRY(ls_shellcmd, CMD_TYPE_EX, "ls", XARGS, (CmdCallBackFunc)osShellCmdLs);//#ls 命令静态注册方式
SHELLCMD_ENTRY(pwd_shellcmd, CMD_TYPE_EX, "pwd", XARGS, (CmdCallBackFunc)osShellCmdPwd);//采用shell命令静态注册方式 SHELLCMD_ENTRY(pwd_shellcmd, CMD_TYPE_EX, "pwd", XARGS, (CmdCallBackFunc)osShellCmdPwd);//#pwd 命令静态注册方式
SHELLCMD_ENTRY(cd_shellcmd, CMD_TYPE_EX, "cd", XARGS, (CmdCallBackFunc)osShellCmdCd);//采用shell命令静态注册方式 SHELLCMD_ENTRY(cd_shellcmd, CMD_TYPE_EX, "cd", XARGS, (CmdCallBackFunc)osShellCmdCd);//#cd 命令静态注册方式
SHELLCMD_ENTRY(cat_shellcmd, CMD_TYPE_EX, "cat", XARGS, (CmdCallBackFunc)osShellCmdCat);//采用shell命令静态注册方式 SHELLCMD_ENTRY(cat_shellcmd, CMD_TYPE_EX, "cat", XARGS, (CmdCallBackFunc)osShellCmdCat);//#cat 命令静态注册方式
SHELLCMD_ENTRY(rm_shellcmd, CMD_TYPE_EX, "rm", XARGS, (CmdCallBackFunc)osShellCmdRm);//采用shell命令静态注册方式 SHELLCMD_ENTRY(rm_shellcmd, CMD_TYPE_EX, "rm", XARGS, (CmdCallBackFunc)osShellCmdRm);//#rm 命令静态注册方式
SHELLCMD_ENTRY(rmdir_shellcmd, CMD_TYPE_EX, "rmdir", XARGS, (CmdCallBackFunc)osShellCmdRmdir);//采用shell命令静态注册方式 SHELLCMD_ENTRY(rmdir_shellcmd, CMD_TYPE_EX, "rmdir", XARGS, (CmdCallBackFunc)osShellCmdRmdir);//#rmdir 命令静态注册方式
SHELLCMD_ENTRY(mkdir_shellcmd, CMD_TYPE_EX, "mkdir", XARGS, (CmdCallBackFunc)osShellCmdMkdir);//采用shell命令静态注册方式 SHELLCMD_ENTRY(mkdir_shellcmd, CMD_TYPE_EX, "mkdir", XARGS, (CmdCallBackFunc)osShellCmdMkdir);//#mkdir 命令静态注册方式
SHELLCMD_ENTRY(chmod_shellcmd, CMD_TYPE_EX, "chmod", XARGS, (CmdCallBackFunc)osShellCmdChmod);//采用shell命令静态注册方式 SHELLCMD_ENTRY(chmod_shellcmd, CMD_TYPE_EX, "chmod", XARGS, (CmdCallBackFunc)osShellCmdChmod);//#chmod 命令静态注册方式
SHELLCMD_ENTRY(chown_shellcmd, CMD_TYPE_EX, "chown", XARGS, (CmdCallBackFunc)osShellCmdChown);//采用shell命令静态注册方式 SHELLCMD_ENTRY(chown_shellcmd, CMD_TYPE_EX, "chown", XARGS, (CmdCallBackFunc)osShellCmdChown);//#chown 命令静态注册方式
SHELLCMD_ENTRY(chgrp_shellcmd, CMD_TYPE_EX, "chgrp", XARGS, (CmdCallBackFunc)osShellCmdChgrp);//采用shell命令静态注册方式 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)) #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(mount_shellcmd, CMD_TYPE_EX, "mount", XARGS, (CmdCallBackFunc)osShellCmdMount);//#mount 命令静态注册方式
SHELLCMD_ENTRY(umount_shellcmd, CMD_TYPE_EX, "umount", XARGS, (CmdCallBackFunc)osShellCmdUmount);//采用shell命令静态注册方式 SHELLCMD_ENTRY(umount_shellcmd, CMD_TYPE_EX, "umount", XARGS, (CmdCallBackFunc)osShellCmdUmount);//#umount 命令静态注册方式
#endif #endif
#if (defined(LOSCFG_FS_FAT) || defined(LOSCFG_FS_RAMFS) || defined(LOSCFG_FS_JFFS)) #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
#endif #endif
...@@ -351,12 +351,11 @@ typedef struct { ...@@ -351,12 +351,11 @@ typedef struct {
#endif #endif
} LosTaskCB; } LosTaskCB;
//LosTask结构体是给外部用的 //LosTask结构体是给外部用的
typedef struct {// 可见于..\vendor_hisi_hi3861_hi3861\hi3861\platform\os\Huawei_LiteOS\kernel\base\include\los_task_pri.h typedef struct {
LosTaskCB *runTask; LosTaskCB *runTask;
LosTaskCB *newTask; LosTaskCB *newTask;
} LosTask; } 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 {//进程信号信息 struct ProcessSignalInfo {//进程信号信息
siginfo_t *sigInfo; /**< Signal to be dispatched */ //要发送的信号 例如 9 代表 kill process信号 siginfo_t *sigInfo; /**< Signal to be dispatched */ //要发送的信号 例如 9 代表 kill process信号
LosTaskCB *defaultTcb; /**< Default TCB */ //默认task,指的是信号的发送方 LosTaskCB *defaultTcb; /**< Default TCB */ //默认task,指的是信号的发送方
......
...@@ -56,7 +56,7 @@ typedef struct FilePage { ...@@ -56,7 +56,7 @@ typedef struct FilePage {
UINT32 n_maps; /* num of mapping */ UINT32 n_maps; /* num of mapping */
struct VmPhysSeg *physSeg; /* physical memory that file page belongs to */ struct VmPhysSeg *physSeg; /* physical memory that file page belongs to */
struct VmPage *vmPage; //物理页框 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时使用 VM_OFFSET_T pgoff; //页偏移地址,主要用于seek时使用
UINT32 flags; //标签 UINT32 flags; //标签
UINT16 dirtyOff; //脏页的页内偏移地址 UINT16 dirtyOff; //脏页的页内偏移地址
......
...@@ -50,7 +50,7 @@ extern "C" { ...@@ -50,7 +50,7 @@ extern "C" {
#endif /* __cplusplus */ #endif /* __cplusplus */
#endif /* __cplusplus */ #endif /* __cplusplus */
/* /*
file结构体来自 ..\third_party_NuttX\include\nuttx\fs\fs.h file结构体来自 ..\third_party\NuttX\include\nuttx\fs\fs.h
struct file //打开文件的基本表示形式 struct file //打开文件的基本表示形式
{ {
unsigned int f_magicnum; /* file magic number * / unsigned int f_magicnum; /* file magic number * /
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
#ifndef __VM_ZONE_H__ #ifndef __VM_ZONE_H__
#define __VM_ZONE_H__ #define __VM_ZONE_H__
#include "board.h" #include "board.h" // 由不同的芯片平台提供,例如: hi3516dv300
#ifdef __cplusplus #ifdef __cplusplus
#if __cplusplus #if __cplusplus
...@@ -82,7 +82,7 @@ extern "C" { ...@@ -82,7 +82,7 @@ extern "C" {
| 16M预留区 | | 16M预留区 |
+----------------------------+ 0x00000000U +----------------------------+ 0x00000000U
见于 ..\vendor_hisi_hi35xx_hi3516dv300\config\board\include\board.h 以下定义 可见于 ..\vendor\hi3516dv300\config\board\include\board.h
/* Physical memory address base and size * / //物理内存地址基地址和大小 /* Physical memory address base and size * / //物理内存地址基地址和大小
#ifdef LOSCFG_TEE_ENABLE #ifdef LOSCFG_TEE_ENABLE
......
...@@ -206,8 +206,8 @@ STATIC VOID OsMemNodeSave(LosMemDynNode *node); ...@@ -206,8 +206,8 @@ STATIC VOID OsMemNodeSave(LosMemDynNode *node);
#define OS_MEM_MAGIC_VALID(value) \ #define OS_MEM_MAGIC_VALID(value) \
(((UINTPTR)(value) ^ ((UINTPTR)&(value))) == (UINTPTR)(-1)) (((UINTPTR)(value) ^ ((UINTPTR)&(value))) == (UINTPTR)(-1))
UINT8 *m_aucSysMem0 = NULL; //不明白为什么要两个 UINT8 *m_aucSysMem0 = NULL; //@note_why 不明白鸿蒙对虚拟内存分配为什么要用两个全局变量
UINT8 *m_aucSysMem1 = NULL; UINT8 *m_aucSysMem1 = NULL; //auc是什么意思? 0和1又代表什么意思?
#ifdef LOSCFG_BASE_MEM_NODE_SIZE_CHECK #ifdef LOSCFG_BASE_MEM_NODE_SIZE_CHECK
STATIC UINT8 g_memCheckLevel = LOS_MEM_CHECK_LEVEL_DEFAULT; STATIC UINT8 g_memCheckLevel = LOS_MEM_CHECK_LEVEL_DEFAULT;
......
...@@ -73,7 +73,7 @@ STATIC LosMux g_sysvShmMux; ...@@ -73,7 +73,7 @@ STATIC LosMux g_sysvShmMux;
#define SHM_M 010000 #define SHM_M 010000
#endif #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)//文件权限值意思就是 用户,用户组,其他可读可写. #define ACCESSPERMS (S_IRWXU | S_IRWXG | S_IRWXO)//文件权限值意思就是 用户,用户组,其他可读可写.
#endif //代表含义U:user G:group O:other #endif //代表含义U:user G:group O:other
...@@ -85,7 +85,7 @@ struct shmSegMap { ...@@ -85,7 +85,7 @@ struct shmSegMap {
vaddr_t vaddr; //虚拟地址 vaddr_t vaddr; //虚拟地址
INT32 shmID; //可看出共享内存使用了ID管理机制 INT32 shmID; //可看出共享内存使用了ID管理机制
}; };
//结构体定义可见于..\vendor_hisi_hi3861_hi3861\hi3861\platform\os\Huawei_LiteOS\components\lib\libc\musl\arch\generic\bits\shm.h
struct shmIDSource {//共享存储结构体 struct shmIDSource {//共享存储结构体
struct shmid_ds ds; //是内核为每一个共享内存段维护的数据结构,包含权限,各进程最后操作的时间,进程ID等信息 struct shmid_ds ds; //是内核为每一个共享内存段维护的数据结构,包含权限,各进程最后操作的时间,进程ID等信息
UINT32 status; //状态 SHM_SEG_FREE ... UINT32 status; //状态 SHM_SEG_FREE ...
...@@ -583,8 +583,8 @@ INT32 ShmCtl(INT32 shmid, INT32 cmd, struct shmid_ds *buf) ...@@ -583,8 +583,8 @@ INT32 ShmCtl(INT32 shmid, INT32 cmd, struct shmid_ds *buf)
{ {
struct shmIDSource *seg = NULL; struct shmIDSource *seg = NULL;
INT32 ret = 0; 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 shm_info shmInfo;
struct ipc_perm shm_perm;//前往查看结构体内容 ..\vendor_hisi_hi3861_hi3861\hi3861\platform\os\Huawei_LiteOS\components\lib\libc\musl\arch\generic\bits\ipc.h struct ipc_perm shm_perm;
cmd = ((UINT32)cmd & ~IPC_64); cmd = ((UINT32)cmd & ~IPC_64);
......
...@@ -62,7 +62,7 @@ extern "C" { ...@@ -62,7 +62,7 @@ extern "C" {
extern UINT32 g_uart_fputc_en; extern UINT32 g_uart_fputc_en;
STATIC UINT32 ConsoleSendTask(UINTPTR param); 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); STATIC SPIN_LOCK_INIT(g_consoleSpin);
#define SHELL_ENTRYID_INVALID 0xFFFFFFFF #define SHELL_ENTRYID_INVALID 0xFFFFFFFF
...@@ -1323,13 +1323,13 @@ INT32 system_console_init(const CHAR *deviceName)//deviceName: /dev/serial /dev/ ...@@ -1323,13 +1323,13 @@ INT32 system_console_init(const CHAR *deviceName)//deviceName: /dev/serial /dev/
LOS_SpinLockSave(&g_consoleSpin, &intSave); LOS_SpinLockSave(&g_consoleSpin, &intSave);
g_console[consoleID - 1] = consoleCB;//g_console最大值只有2 g_console[consoleID - 1] = consoleCB;//g_console最大值只有2
if (OsCurrTaskGet() != NULL) { if (OsCurrTaskGet() != NULL) {//当前task
g_taskConsoleIDArray[OsCurrTaskGet()->taskID] = (UINT8)consoleID; g_taskConsoleIDArray[OsCurrTaskGet()->taskID] = (UINT8)consoleID;//任务绑定控制台ID
} }
LOS_SpinUnlockRestore(&g_consoleSpin, intSave); LOS_SpinUnlockRestore(&g_consoleSpin, intSave);
#ifdef LOSCFG_SHELL #ifdef LOSCFG_SHELL
ret = OsShellInit(consoleID); ret = OsShellInit(consoleID);//通过控制台初始化shell
if (ret != LOS_OK) { if (ret != LOS_OK) {
PRINT_ERR("%s, %d\n", __FUNCTION__, __LINE__); PRINT_ERR("%s, %d\n", __FUNCTION__, __LINE__);
LOS_SpinLockSave(&g_consoleSpin, &intSave); LOS_SpinLockSave(&g_consoleSpin, &intSave);
......
...@@ -70,7 +70,7 @@ extern UINT32 __heap_end; // 堆区结束地址 ...@@ -70,7 +70,7 @@ extern UINT32 __heap_end; // 堆区结束地址
* System clock (unit: HZ) * System clock (unit: HZ)
*/ */
#ifndef OS_SYS_CLOCK //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 #endif
/** /**
* @ingroup los_config * @ingroup los_config
...@@ -88,7 +88,7 @@ extern UINT32 __heap_end; // 堆区结束地址 ...@@ -88,7 +88,7 @@ extern UINT32 __heap_end; // 堆区结束地址
#define OS_SYS_FUNC_ADDR_START ((UINTPTR)&__int_stack_start) #define OS_SYS_FUNC_ADDR_START ((UINTPTR)&__int_stack_start)
#endif #endif
#ifndef OS_SYS_FUNC_ADDR_END #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 #endif
/** /**
......
...@@ -646,7 +646,7 @@ LITE_OS_SEC_TEXT_MINOR VOID OsShellKeyDeInit(CmdKeyLink *cmdKeyLink) ...@@ -646,7 +646,7 @@ LITE_OS_SEC_TEXT_MINOR VOID OsShellKeyDeInit(CmdKeyLink *cmdKeyLink)
cmdKeyLink->count = 0; cmdKeyLink->count = 0;
(VOID)LOS_MemFree(m_aucSysMem0, cmdKeyLink); (VOID)LOS_MemFree(m_aucSysMem0, cmdKeyLink);
} }
//向内核注册cmd命令 hwi,watch ==
LITE_OS_SEC_TEXT_MINOR UINT32 OsShellSysCmdRegister(VOID) LITE_OS_SEC_TEXT_MINOR UINT32 OsShellSysCmdRegister(VOID)
{ {
UINT32 i; UINT32 i;
...@@ -663,7 +663,7 @@ LITE_OS_SEC_TEXT_MINOR UINT32 OsShellSysCmdRegister(VOID) ...@@ -663,7 +663,7 @@ LITE_OS_SEC_TEXT_MINOR UINT32 OsShellSysCmdRegister(VOID)
for (i = 0; i < index; ++i) { for (i = 0; i < index; ++i) {
cmdItem = (CmdItemNode *)(cmdItemGroup + i * sizeof(CmdItemNode)); cmdItem = (CmdItemNode *)(cmdItemGroup + i * sizeof(CmdItemNode));
cmdItem->cmd = &g_shellcmd[i]; cmdItem->cmd = &g_shellcmd[i];
OsCmdAscendingInsert(cmdItem); OsCmdAscendingInsert(cmdItem);//按升序方式挂入链表
} }
g_cmdInfo.listNum += index; g_cmdInfo.listNum += index;
return LOS_OK; return LOS_OK;
...@@ -694,7 +694,7 @@ LITE_OS_SEC_TEXT_MINOR VOID OsShellCmdPush(const CHAR *string, CmdKeyLink *cmdKe ...@@ -694,7 +694,7 @@ LITE_OS_SEC_TEXT_MINOR VOID OsShellCmdPush(const CHAR *string, CmdKeyLink *cmdKe
return; return;
} }
//显示命令的历史记录 //显示命令的历史记录 ,shell history
LITE_OS_SEC_TEXT_MINOR VOID OsShellHistoryShow(UINT32 value, ShellCB *shellCB) LITE_OS_SEC_TEXT_MINOR VOID OsShellHistoryShow(UINT32 value, ShellCB *shellCB)
{ {
CmdKeyLink *cmdtmp = NULL; CmdKeyLink *cmdtmp = NULL;
...@@ -823,7 +823,7 @@ STATIC UINT32 OsCmdItemCreate(CmdType cmdType, const CHAR *cmdKey, UINT32 paraNu ...@@ -823,7 +823,7 @@ STATIC UINT32 OsCmdItemCreate(CmdType cmdType, const CHAR *cmdKey, UINT32 paraNu
cmdItemNode->cmd->cmdKey = cmdKey; cmdItemNode->cmd->cmdKey = cmdKey;
(VOID)LOS_MuxLock(&g_cmdInfo.muxLock, LOS_WAIT_FOREVER);//拿锁 (VOID)LOS_MuxLock(&g_cmdInfo.muxLock, LOS_WAIT_FOREVER);//拿锁
OsCmdAscendingInsert(cmdItemNode);//以递升方式 OsCmdAscendingInsert(cmdItemNode);//以递升方式
g_cmdInfo.listNum++; //cmd总数++ g_cmdInfo.listNum++; //cmd总数++
(VOID)LOS_MuxUnlock(&g_cmdInfo.muxLock);//释放锁 (VOID)LOS_MuxUnlock(&g_cmdInfo.muxLock);//释放锁
......
...@@ -44,8 +44,8 @@ extern "C" { ...@@ -44,8 +44,8 @@ extern "C" {
#endif /* __cplusplus */ #endif /* __cplusplus */
#endif /* __cplusplus */ #endif /* __cplusplus */
STATIC BOOL g_shellSourceFlag = FALSE; STATIC BOOL g_shellSourceFlag = FALSE;// 标记shell Cmd 是否已初始化
//初始化shell cmd
STATIC UINT32 OsShellCmdInit(VOID) STATIC UINT32 OsShellCmdInit(VOID)
{ {
UINT32 ret = OsCmdInit(); UINT32 ret = OsCmdInit();
...@@ -121,7 +121,7 @@ ERR_OUT1: ...@@ -121,7 +121,7 @@ ERR_OUT1:
return ret; return ret;
} }
//通过控制台ID 初始化shell
UINT32 OsShellInit(INT32 consoleId) UINT32 OsShellInit(INT32 consoleId)
{ {
if (g_shellSourceFlag == FALSE) { if (g_shellSourceFlag == FALSE) {
......
git add -A git add -A
git commit -m '控制台代码部分注释 ,完善task模块的注释 git commit -m '看完整的kernel_liteos_a源码需引入third,verdor项目,包括FreeBSD/mbedtls/musl/NuttX 和 hi3516dv300
鸿蒙内核源码分析系列 【 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.
先完成此消息的编辑!
想要评论请 注册