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

注解支持doxygen,输出 http://weharmonyos.com/doxygen

    百万汉字注解 + 百篇博客分析 => 挖透鸿蒙内核源码
    博客输出站点(国内):http://weharmonyos.com
    博客输出站点(国外):https://weharmony.github.io
    注解文件系统:https://gitee.com/weharmony/third_party_NuttX
    注解协议栈:https://gitee.com/weharmony/third_party_lwip
    注解编译子系统:https://gitee.com/weharmony/build_lite
上级 ebb85c74
......@@ -22,3 +22,4 @@ tags
# Build temp files
/out
zzz/doxygen
子曰:“里仁为美。择不处仁,焉得知?”《论语》:里仁篇
[![在这里插入图片描述](https://gitee.com/weharmony/docs/raw/master/pic/other/io1.png)](http://weharmonyos.com/)
百篇博客系列篇.本篇为:
v13.xx 鸿蒙内核源码分析(源码注释篇) | 每天死磕一点点
前因后果相关篇为:
* [v08.03 鸿蒙内核源码分析(总目录) | 百万汉字注解 百篇博客分析](https://my.oschina.net/weharmony/blog/4626852)
* [v09.04 鸿蒙内核源码分析(调度故事) | 用故事说内核调度](https://my.oschina.net/weharmony/blog/4634668)
* [v10.03 鸿蒙内核源码分析(内存主奴) | 皇上和奴才如何相处](https://my.oschina.net/weharmony/blog/4646802)
* [v13.05 鸿蒙内核源码分析(源码注释) | 每天死磕一点点](https://my.oschina.net/weharmony/blog/4686747)
* [v18.02 鸿蒙内核源码分析(源码结构) | 内核文件各自含义](https://my.oschina.net/weharmony/blog/4869137)
* [v52.05 鸿蒙内核源码分析(静态站点) | 码农都不爱写注释和文档](https://my.oschina.net/weharmony/blog/5042657)
[![](https://gitee.com/weharmonyos/resources/raw/master/common/io.png)](http://weharmonyos.com/)
百篇博客分析.本篇为: (源码注释篇) | 每天死磕一点点
### 几点说明
**中文注解鸿蒙内核 | [kernel_liteos_a_note](https://gitee.com/weharmony/kernel_liteos_a_note)**
**中文注解鸿蒙内核 | [kernel_liteos_a_note](https://gitee.com/weharmony/kernel_liteos_a_note)**
是在 `OpenHarmony`[kernel_liteos_a](https://gitee.com/openharmony/kernel_liteos_a) 基础上给内核源码加上中文注解的版本.与官方源码按月保持同步,同步历史如下:
......@@ -35,12 +22,14 @@ v13.xx 鸿蒙内核源码分析(源码注释篇) | 每天死磕一点点
**鸿蒙研究站 | [weharmonyos.com](http://weharmonyos.com)**
分成部分内容
分成部分内容
* [OpenHarmony开发者文档](http://weharmonyos.com/openharmony) 是对官方文档 [docs](https://gitee.com/openharmony/docs) 做的非常炫酷的静态站点,支持侧边栏/面包屑/搜索/中英文,非常方便的查看官方文档,大大提高学习和开发效率
* [鸿蒙内核源码分析](http://weharmonyos.com/weharmony) 是对内核源码注解过程中整理出来的`100`篇博客输出.
* 分析内核的工具和书籍 如: [鸿蒙源码分析.离线文档](http://weharmonyos.com/history.html) , [GNU汇编](http://weharmonyos.com/book/assembly.html), [gn参考手册](http://weharmonyos.com/gn/docs/)
* [鸿蒙内核源码分析](http://weharmonyos.com/weharmony) 是对内核源码注解过程中整理出来的`100`篇博客输出.
* [源码文档输出](http://weharmonyos.com/doxygen/index.html) 是通过`doxygen`对内核源码注解的直接输出,有了详细的函数调用关系和行级代码注解,更快的熟悉内核运行机制. 快去体验下吧
* 分析内核的工具和书籍 如: [鸿蒙源码分析.离线文档](http://weharmonyos.com/history.html) , [GNU汇编](http://weharmonyos.com/book/assembly.html), [gn参考手册](http://weharmonyos.com/gn/docs/)
**注解子系统仓库**
在给鸿蒙内核源码加注过程中发现仅仅注解内核仓库还不够,因为它关联了其他子系统,若对这些子系统不了解是很难完整的注解鸿蒙内核,所以也对这些关联仓库进行了部分注解,这些仓库包括:
......@@ -49,7 +38,7 @@ v13.xx 鸿蒙内核源码分析(源码注释篇) | 每天死磕一点点
* [协议栈 | lwip](https://gitee.com/weharmony/third_party_lwip)
* [文件系统 | NuttX](https://gitee.com/weharmony/third_party_NuttX)
* [标准库 | musl](https://gitee.com/weharmony/third_party_musl)
### 为何要精读内核源码?
* 码农的学职生涯,都应精读一遍内核源码。以浇筑好计算机知识大厦的地基,地基纵深的坚固程度,很大程度能决定未来大厦能盖多高。那为何一定要精读细品呢?
* 因为内核代码本身并不太多,都是浓缩的精华,精读是让各个知识点高频出现,不孤立成点状记忆,没有足够连接点的知识点是很容易忘的,点点成线,线面成体,连接越多,记得越牢,如此短时间内容易结成一张高浓度,高密度的系统化知识网,训练大脑肌肉记忆,驻入大脑直觉区,想抹都抹不掉,终生携带,随时调取。跟骑单车一样,一旦学会,即便多年不骑,照样跨上就走,游刃有余。
......@@ -69,17 +58,24 @@ v13.xx 鸿蒙内核源码分析(源码注释篇) | 每天死磕一点点
在重要模块的.c/.h文件开始位置先对模块功能做整体的介绍,例如异常接管模块注解如图所示:
![在这里插入图片描述](https://gitee.com/weharmony/docs/raw/master/pic/other/ycjg.png)
![](https://gitee.com/weharmonyos/resources/raw/master/13/ycjg.png)
注解过程中查阅了很多的资料和书籍,在具体代码处都附上了参考链接。
* 而函数级注解会详细到重点行,甚至每一行, 例如申请互斥锁的主体函数,不可谓不重要,而官方注释仅有一行,如图所示
![在这里插入图片描述](https://gitee.com/weharmony/docs/raw/master/pic/other/sop.png)
![](https://gitee.com/weharmonyos/resources/raw/master/13/sop.png)
* 另外画了一些字符图方便理解,直接嵌入到头文件中,比如虚拟内存的全景图,因没有这些图是很难理解虚拟内存是如何管理的。
![在这里插入图片描述](https://gitee.com/weharmony/docs/raw/master/pic/other/vm.png)
![](https://gitee.com/weharmonyos/resources/raw/master/13/vm.png)
### 输出注解文档 | 注释结合图形
为了很好的输出注解内容,注解支持 `doxygen` 格式
[![](https://gitee.com/weharmonyos/resources/raw/master/73/4.png)](http://weharmonyos.com/doxygen/index.html)
[![](https://gitee.com/weharmonyos/resources/raw/master/73/3.png)](http://weharmonyos.com/doxygen/index.html)
可前往 >> [鸿蒙研究站 | 源码文档版块 ](http://weharmonyos.com/doxygen/index.html) 搜索 **OsSchedStart** 体验
### 有哪些特殊的记号
- [x] 搜索 `@note_pic` 可查看绘制的全部字符图
- [x] 搜索 `@note_why` 是尚未看明白的地方,有看明白的,请Pull Request完善
......@@ -131,17 +127,18 @@ v13.xx 鸿蒙内核源码分析(源码注释篇) | 每天死磕一点点
# 它与内核代码无关,大家可以忽略它,取名zzz是为了排在最后,减少对原有代码目录级的侵入,
# zzz 的想法源于微信中名称为AAA的那帮朋友,你的微信里应该也有他们熟悉的身影吧 :|P
```
### **参与贡献**
### 参与贡献
* [新建 Pull Request](https://gitee.com/weharmony/kernel_liteos_a_note/pull/new/weharmony:master...weharmony:master)
* [新建 Issue](https://gitee.com/weharmony/kernel_liteos_a_note/issues)
### 微信 | QQ 群
前往 >> [http://weharmonyos.com/qun.html](http://weharmonyos.com/qun.html)
### 捐赠记录,再次感谢!!!
前往 >> [http://weharmonyos.com/donate.html](http://weharmonyos.com/donate.html)
### **百篇博客分析.深挖内核地基**
### 百篇博客分析.深挖内核地基
* 给鸿蒙内核源码加注释过程中,整理出以下文章。内容立足源码,常以生活场景打比方尽可能多的将内核知识点置入某种场景,具有画面感,容易理解记忆。说别人能听得懂的话很重要! 百篇博客绝不是百度教条式的在说一堆诘屈聱牙的概念,那没什么意思。更希望让内核变得栩栩如生,倍感亲切.确实有难度,自不量力,但已经出发,回头已是不可能的了。 😛
* 与代码有bug需不断debug一样,文章和注解内容会存在不少错漏之处,请多包涵,但会反复修正,持续更新,v**.xx 代表文章序号和修改的次数,精雕细琢,言简意赅,力求打造精品内容。
......@@ -219,24 +216,11 @@ v13.xx 鸿蒙内核源码分析(源码注释篇) | 每天死磕一点点
* [v70.05 鸿蒙内核源码分析(管道文件) | 如何降低数据流动成本](https://my.oschina.net/weharmony/blog/5258434)
* [v71.03 鸿蒙内核源码分析(Shell编辑) | 两个任务 三个阶段](https://my.oschina.net/weharmony/blog/5269307)
* [v72.01 鸿蒙内核源码分析(Shell解析) | 应用窥伺内核的窗口](https://my.oschina.net/weharmony/blog/5282207)
* [v73.01 鸿蒙内核源码分析(注释文档) | 鸿蒙所有函数调用关系图](https://my.oschina.net/weharmony/blog/5042657)
### 关注不迷路.代码即人生
按功能模块:
|前因后果|基础工具|加载运行|进程管理
|:-:|:-:|:-:|:-:|
[总目录](https://my.oschina.net/weharmony/blog/4626852) [调度故事](https://my.oschina.net/weharmony/blog/4634668) [内存主奴](https://my.oschina.net/weharmony/blog/4646802) [源码注释](https://my.oschina.net/weharmony/blog/4686747) [源码结构](https://my.oschina.net/weharmony/blog/4869137) [静态站点](https://my.oschina.net/weharmony/blog/5042657) |[双向链表](https://my.oschina.net/weharmony/blog/4572304) [位图管理](https://my.oschina.net/weharmony/blog/4888467) [用栈方式](https://my.oschina.net/weharmony/blog/4893388) [定时器](https://my.oschina.net/weharmony/blog/4951625) [原子操作](https://my.oschina.net/weharmony/blog/4955290) [时间管理](https://my.oschina.net/weharmony/blog/4956163) |[ELF格式](https://my.oschina.net/weharmony/blog/5030288) [ELF解析](https://my.oschina.net/weharmony/blog/5048746) [静态链接](https://my.oschina.net/weharmony/blog/5049918) [重定位](https://my.oschina.net/weharmony/blog/5055124) [进程映像](https://my.oschina.net/weharmony/blog/5060359) |[进程管理](https://my.oschina.net/weharmony/blog/4574429) [进程概念](https://my.oschina.net/weharmony/blog/4937521) [Fork](https://my.oschina.net/weharmony/blog/5010301) [特殊进程](https://my.oschina.net/weharmony/blog/5014444) [进程回收](https://my.oschina.net/weharmony/blog/5017716) [信号生产](https://my.oschina.net/weharmony/blog/5022149) [信号消费](https://my.oschina.net/weharmony/blog/5027224) [Shell编辑](https://my.oschina.net/weharmony/blog/5269307) [Shell解析](https://my.oschina.net/weharmony/blog/5282207) |
|编译构建|进程通讯|内存管理|任务管理
[编译环境](https://my.oschina.net/weharmony/blog/5028613) [编译过程](https://my.oschina.net/weharmony/blog/5064209) [环境脚本](https://my.oschina.net/weharmony/blog/5132725) [构建工具](https://my.oschina.net/weharmony/blog/5135157) [gn应用](https://my.oschina.net/weharmony/blog/5137565) [忍者ninja](https://my.oschina.net/weharmony/blog/5139034) |[自旋锁](https://my.oschina.net/weharmony/blog/4944129) [互斥锁](https://my.oschina.net/weharmony/blog/4945465) [进程通讯](https://my.oschina.net/weharmony/blog/4947398) [信号量](https://my.oschina.net/weharmony/blog/4949720) [事件控制](https://my.oschina.net/weharmony/blog/4950956) [消息队列](https://my.oschina.net/weharmony/blog/4952961) |[内存分配](https://my.oschina.net/weharmony/blog/4646802) [内存管理](https://my.oschina.net/weharmony/blog/4652284) [内存汇编](https://my.oschina.net/weharmony/blog/4692156) [内存映射](https://my.oschina.net/weharmony/blog/4694841) [内存规则](https://my.oschina.net/weharmony/blog/4698384) [物理内存](https://my.oschina.net/weharmony/blog/4842408) |[时钟任务](https://my.oschina.net/weharmony/blog/4574493) [任务调度](https://my.oschina.net/weharmony/blog/4595539) [任务管理](https://my.oschina.net/weharmony/blog/4603919) [调度队列](https://my.oschina.net/weharmony/blog/4606916) [调度机制](https://my.oschina.net/weharmony/blog/4623040) [线程概念](https://my.oschina.net/weharmony/blog/4915543) [并发并行](https://my.oschina.net/weharmony/blog/4940329) [CPU](https://my.oschina.net/weharmony/blog/4952034) [系统调用](https://my.oschina.net/weharmony/blog/4967613) [任务切换](https://my.oschina.net/weharmony/blog/4988628) |
|文件系统|硬件架构
[文件概念](https://my.oschina.net/weharmony/blog/5152858) [文件系统](https://my.oschina.net/weharmony/blog/5165752) [索引节点](https://my.oschina.net/weharmony/blog/5168716) [挂载目录](https://my.oschina.net/weharmony/blog/5172566) [根文件系统](https://my.oschina.net/weharmony/blog/5177087) [字符设备](https://my.oschina.net/weharmony/blog/5200946) [VFS](https://my.oschina.net/weharmony/blog/5211662) [文件句柄](https://my.oschina.net/weharmony/blog/5253251) [管道文件](https://my.oschina.net/weharmony/blog/5258434) |[汇编基础](https://my.oschina.net/weharmony/blog/4920361) [汇编传参](https://my.oschina.net/weharmony/blog/4927892) [工作模式](https://my.oschina.net/weharmony/blog/4965052) [寄存器](https://my.oschina.net/weharmony/blog/4969487) [异常接管](https://my.oschina.net/weharmony/blog/4973016) [汇编汇总](https://my.oschina.net/weharmony/blog/4977924) [中断切换](https://my.oschina.net/weharmony/blog/4990948) [中断概念](https://my.oschina.net/weharmony/blog/4992750) [中断管理](https://my.oschina.net/weharmony/blog/4995800) |
### **百万汉字注解.精读内核源码**
四大码仓中文注解 . 定期同步官方代码
[![WeHarmony/kernel_liteos_a_note](https://gitee.com/weharmony/kernel_liteos_a_note/widgets/widget_card.svg?colors=4183c4,ffffff,ffffff,e3e9ed,666666,9b9b9b)](https://gitee.com/weharmony/kernel_liteos_a_note)
![](https://gitee.com/weharmonyos/resources/raw/master/common/so1so.png)
鸿蒙研究站( weharmonyos ) | 每天死磕一点点,原创不易,欢迎转载,请注明出处。若能支持点赞则更佳,感谢每一份支持。
### **关注不迷路.代码即人生**
![鸿蒙内核源码分析](https://gitee.com/weharmony/docs/raw/master/pic/other/so1so.png)
**QQ群 790015635 | 入群密码 666**
......@@ -50,7 +50,8 @@ extern "C" {
* @file los_arch_mmu.h
* @brief 简介
* @details 细节
* @mainpage https://blog.csdn.net/kuangyufei/article/details/109032636
* @attention
https://blog.csdn.net/kuangyufei/article/details/109032636
https://blog.csdn.net/qq_38410730/article/details/81036768
虚拟内存空间中的地址叫做“虚拟地址”;而实际物理内存空间中的地址叫做“实际物理地址”或“物理地址”。处理器
运算器和应用程序设计人员看到的只是虚拟内存空间和虚拟地址,而处理器片外的地址总线看到的只是物理地址空间和物理地址。
......
......@@ -44,16 +44,16 @@ extern "C" {
#endif /* __cplusplus */
#endif /* __cplusplus */
#define OS_SCHEDULE_IN_IRQ 0x0 //因中断产生调度
#define OS_SCHEDULE_IN_TASK 0x1 //因任务产生调度
#define OS_SCHEDULE_IN_IRQ 0x0 ///< 因中断产生调度
#define OS_SCHEDULE_IN_TASK 0x1 ///< 因任务产生调度
#define PSR_T_ARM 0x00000000u //工作状态:arm
#define PSR_T_THUMB 0x00000020u //工作状态:thumb
#define PSR_MODE_SVC 0x00000013u //管理模式
#define PSR_MODE_SYS 0x0000001Fu //系统模式
#define PSR_FIQ_DIS 0x00000040u //禁止快中断
#define PSR_IRQ_DIS 0x00000080u //禁止普通中断
#define PSR_MODE_USR 0x00000010u //用户模式
#define PSR_T_ARM 0x00000000u ///< 工作状态:arm
#define PSR_T_THUMB 0x00000020u ///< 工作状态:thumb
#define PSR_MODE_SVC 0x00000013u ///< 管理模式
#define PSR_MODE_SYS 0x0000001Fu ///< 系统模式
#define PSR_FIQ_DIS 0x00000040u ///< 禁止快中断
#define PSR_IRQ_DIS 0x00000080u ///< 禁止普通中断
#define PSR_MODE_USR 0x00000010u ///< 用户模式
#define PSR_MODE_SVC_THUMB (PSR_MODE_SVC | PSR_T_THUMB | PSR_FIQ_DIS | PSR_IRQ_DIS)
#define PSR_MODE_SVC_ARM (PSR_MODE_SVC | PSR_T_ARM | PSR_FIQ_DIS | PSR_IRQ_DIS)
......@@ -64,11 +64,11 @@ extern "C" {
#define PSR_MODE_USR_THUMB (PSR_MODE_USR | PSR_T_THUMB)
#define PSR_MODE_USR_ARM (PSR_MODE_USR | PSR_T_ARM)
#define LOS_CHECK_SCHEDULE ((!OS_INT_ACTIVE) && OsPreemptable()) //检查是否可以调度
#define LOS_CHECK_SCHEDULE ((!OS_INT_ACTIVE) && OsPreemptable()) ///< 检查是否可以调度
typedef struct {//CPU供货商描述符
const UINT32 partNo; //编号
const CHAR *cpuName; //CPU名称
const UINT32 partNo; ///< 编号
const CHAR *cpuName; ///< CPU名称
} CpuVendor;
extern CpuVendor g_cpuTable[];
......
......@@ -50,27 +50,28 @@ typedef enum {
CPU_EXC /* cpu in the exc */ //CPU处于异常状态
} ExcFlag;
#endif
/*
* per-CPU变量是linux系统一个非常有趣的特性,它为系统中的每个处理器都分配了该变量的副本。
* 这样做的好处是,在多处理器系统中,当处理器操作属于它的变量副本时,不需要考虑与其他处理器的竞争的问题,
*/
/**
* @brief per-CPU变量是linux系统一个非常有趣的特性,它为系统中的每个处理器都分配了该变量的副本。
* 这样做的好处是,在多处理器系统中,当处理器操作属于它的变量副本时,不需要考虑与其他处理器的竞争的问题,
*/
typedef struct {//内核对cpu的描述
SortLinkAttribute taskSortLink; /* task sort link */ //挂等待和延时的任务
SPIN_LOCK_S taskSortLinkSpin; /* task sort link spin lock *///操作taskSortLink链表的自旋锁
SortLinkAttribute swtmrSortLink; /* swtmr sort link */ //挂还没到时间的定时器
SPIN_LOCK_S swtmrSortLinkSpin; /* swtmr sort link spin lock *///操作swtmrSortLink链表的自旋锁
UINT64 responseTime; /* Response time for current nuclear Tick interrupts *///当前CPU核 Tick 中断的响应时间
UINT64 tickStartTime; /* The time when the tick interrupt starts processing */
UINT32 responseID; /* The response ID of the current nuclear TICK interrupt *///当前CPU核TICK中断的响应ID
SortLinkAttribute taskSortLink; /* task sort link \n 挂等待和延时的任务 */
SPIN_LOCK_S taskSortLinkSpin; /* task sort link spin lock \n 操作taskSortLink链表的自旋锁 */
SortLinkAttribute swtmrSortLink; /* swtmr sort link \n 挂还没到时间的定时器 */
SPIN_LOCK_S swtmrSortLinkSpin; /* swtmr sort link spin lock \n* 操作swtmrSortLink链表的自旋锁 */
UINT64 responseTime; /* Response time for current nuclear Tick interrupts \n 当前CPU核 Tick 中断的响应时间 */
UINT64 tickStartTime; /* The time when the tick interrupt starts processing \n */
UINT32 responseID; /* The response ID of the current nuclear TICK interrupt \n 当前CPU核TICK中断的响应ID */
UINTPTR runProcess; /* The address of the process control block pointer to which
the current kernel is running *///当前进程控制块地址
UINT32 idleTaskID; /* idle task id */ //每个CPU都有一个空闲任务 见于 OsIdleTaskCreate
UINT32 taskLockCnt; /* task lock flag */ //任务锁的数量,当 > 0 的时候,需要重新调度了
UINT32 swtmrHandlerQueue; /* software timer timeout queue id */ //软时钟超时队列句柄
UINT32 swtmrTaskID; /* software timer task id */ //软时钟任务ID
UINT32 schedFlag; /* pending scheduler flag */ //调度标识 INT_NO_RESCH INT_PEND_RESCH
the current kernel is running \n 当前进程控制块地址 */
UINT32 idleTaskID; /* idle task id \n 每个CPU都有一个空闲任务 见于 OsIdleTaskCreate */
UINT32 taskLockCnt; /* task lock flag \n 任务锁的数量,当 > 0 的时候,需要重新调度了 */
UINT32 swtmrHandlerQueue; /* software timer timeout queue id \n 软时钟超时队列句柄 */
UINT32 swtmrTaskID; /* software timer task id \n 软时钟任务ID */
UINT32 schedFlag; /* pending scheduler flag \n 调度标识 INT_NO_RESCH INT_PEND_RESCH */
#ifdef LOSCFG_KERNEL_SMP
UINT32 excFlag; /* cpu halt or exc flag *///cpu 停止或 异常 标志
UINT32 excFlag; /* cpu halt or exc flag \n cpu 停止或 异常 标志 */
#ifdef LOSCFG_KERNEL_SMP_CALL
LOS_DL_LIST funcLink; /* mp function call link */
#endif
......
......@@ -209,8 +209,10 @@ typedef struct SigInfoListNode {
struct SigInfoListNode *next;
siginfo_t info;
} SigInfoListNode;
typedef struct {//信号控制块(描述符)
/**
* @brief 信号控制块(描述符)
*/
typedef struct {
sigset_t sigFlag; //不屏蔽的信号集
sigset_t sigPendFlag; //信号阻塞标签集,记录那些信号来过,任务依然阻塞的集合.即:这些信号不能唤醒任务
sigset_t sigprocmask; /* Signals that are blocked */ //任务屏蔽了哪些信号
......
......@@ -32,10 +32,12 @@
#include "los_config.h"
#include "los_sched_pri.h"
/******************************************************************************
内核入口函数,由汇编调用,见于reset_vector_up.S 和 reset_vector_mp.S
up指单核CPU, mp指多核CPU bl main
******************************************************************************/
/**
* @brief
* 内核入口函数,由汇编调用,见于reset_vector_up.S 和 reset_vector_mp.S \n
* up指单核CPU, mp指多核CPU bl main
* @return LITE_OS_SEC_TEXT_INIT
*/
LITE_OS_SEC_TEXT_INIT INT32 main(VOID)//由主CPU执行,默认0号CPU 为主CPU
{
UINT32 uwRet;
......
......@@ -85,36 +85,42 @@ extern "C" {
#define PF_R 0x4 //只读
#define PF_W 0x2 //只写
#define PF_X 0x1 //可执行
//ELF信息结构体,
/**@struct
* @brief ELF信息结构体
*/
typedef struct {
LD_ELF_EHDR elfEhdr; //ELF头信息
LD_ELF_PHDR *elfPhdr; //ELF程序头信息,也称段头信息
UINT32 fileLen; //文件长度
INT32 procfd; //文件描述符
LD_ELF_EHDR elfEhdr; ///< ELF头信息
LD_ELF_PHDR *elfPhdr; ///< ELF程序头信息,也称段头信息
UINT32 fileLen; ///< 文件长度
INT32 procfd; ///< 文件描述符
} ELFInfo;
//ELF加载信息
/**@struct
* @brief ELF加载信息
*/
typedef struct {
ELFInfo execInfo; //可执行文件信息
ELFInfo interpInfo;//解析器文件信息 lib/libc.so
const CHAR *fileName;//文件名称
CHAR *execName;//程序名称
INT32 argc; //参数个数
INT32 envc; //环境变量个数
CHAR *const *argv; //参数数组
CHAR *const *envp; //环境变量数组
UINTPTR stackTop;//栈底位置,递减满栈下,stackTop是高地址位
UINTPTR stackTopMax;//栈最大上限
UINTPTR stackBase;//栈顶位置
UINTPTR stackParamBase;//栈参数空间,放置启动ELF时的外部参数,大小为 USER_PARAM_BYTE_MAX 4K
UINT32 stackSize;//栈大小
INT32 stackProt;//LD_PT_GNU_STACK栈的权限 ,例如(RW)
ELFInfo execInfo; ///< 可执行文件信息
ELFInfo interpInfo;///< 解析器文件信息 lib/libc.so
const CHAR *fileName;///< 文件名称
CHAR *execName;///< 程序名称
INT32 argc; ///< 参数个数
INT32 envc; ///< 环境变量个数
CHAR *const *argv; ///< 参数数组
CHAR *const *envp; ///< 环境变量数组
UINTPTR stackTop;///< 栈底位置,递减满栈下,stackTop是高地址位
UINTPTR stackTopMax;///< 栈最大上限
UINTPTR stackBase;///< 栈顶位置
UINTPTR stackParamBase;///< 栈参数空间,放置启动ELF时的外部参数,大小为 USER_PARAM_BYTE_MAX 4K
UINT32 stackSize;///< 栈大小
INT32 stackProt;///< LD_PT_GNU_STACK栈的权限 ,例如(RW)
UINTPTR argStart;
UINTPTR loadAddr; //加载地址
UINTPTR elfEntry; //装载点地址 即: _start 函数地址
UINTPTR topOfMem; //虚拟空间顶部位置,loadInfo->topOfMem = loadInfo->stackTopMax - sizeof(UINTPTR);
UINTPTR oldFiles; //旧空间的文件映像
LosVmSpace *newSpace;//新虚拟空间
LosVmSpace *oldSpace;//旧虚拟空间
UINTPTR loadAddr; ///< 加载地址
UINTPTR elfEntry; ///< 装载点地址 即: _start 函数地址
UINTPTR topOfMem; ///< 虚拟空间顶部位置,loadInfo->topOfMem = loadInfo->stackTopMax - sizeof(UINTPTR);
UINTPTR oldFiles; ///< 旧空间的文件映像
LosVmSpace *newSpace;///< 新虚拟空间
LosVmSpace *oldSpace;///< 旧虚拟空间
INT32 randomDevFD;
} ELFLoadInfo;
//不超过用户空间顶部位置
......
git add -A
git commit -m ' 开始对注解调整/规范,以便支持docxgen
git commit -m ' 注解支持doxygen,输出 http://weharmonyos.com/doxygen
百万汉字注解 + 百篇博客分析 => 挖透鸿蒙内核源码
博客输出站点(国内):http://weharmonyos.com
博客输出站点(国外):https://weharmony.github.io
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册