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

更新 readme

    百图画鸿蒙 + 百文说内核 + 百万注源码  => 挖透鸿蒙内核源码
    鸿蒙研究站 | http://weharmonyos.com (国内)
              | https://weharmony.github.io (国外)
    oschina | https://my.oschina.net/weharmony
    博客园 | https://www.cnblogs.com/weharmony/
    知乎 | https://www.zhihu.com/people/weharmonyos
    csdn | https://blog.csdn.net/kuangyufei
    51cto | https://harmonyos.51cto.com/column/34
    掘金 | https://juejin.cn/user/756888642000808
    公众号 | 鸿蒙研究站 (weharmonyos)
上级 c09fbaf7
......@@ -2,71 +2,38 @@
[![](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)** 是在 `OpenHarmony`[kernel_liteos_a](https://gitee.com/openharmony/kernel_liteos_a) 基础上给内核源码加上中文注解的版本.
**中文注解鸿蒙内核 | [kernel_liteos_a_note](https://gitee.com/weharmony/kernel_liteos_a_note)** 是在 `OpenHarmony`[kernel_liteos_a](https://gitee.com/openharmony/kernel_liteos_a) 基础上给内核源码加上中文注解的版本
### 为何要精读内核源码?
* 码农的学职生涯,都应精读一遍内核源码。以浇筑好计算机知识大厦的地基,地基纵深的坚固程度,很大程度能决定未来大厦能盖多高。那为何一定要精读细品呢?
* 因为内核代码本身并不太多,都是浓缩的精华,精读是让各个知识点高频出现,不孤立成点状记忆,没有足够连接点的知识点是很容易忘的,点点成线,线面成体,连接越多,记得越牢,如此短时间内容易结成一张高浓度,高密度的系统化知识网,训练大脑肌肉记忆,驻入大脑直觉区,想抹都抹不掉,终生携带,随时调取。跟骑单车一样,一旦学会,即便多年不骑,照样跨上就走,游刃有余。
### 热爱是所有的理由和答案
* 因大学时阅读 `linux 2.6` 内核痛并快乐的经历,一直有个心愿,如何让更多对内核感兴趣的朋友减少阅读时间,加速对计算机系统级的理解,而不至于过早的放弃。但因过程种种,多年一直没有行动,基本要放弃这件事了。恰逢 `2020/9/10` 鸿蒙正式开源,重新激活了多年的心愿,就有那么点如黄河之水一发不可收拾了。
* 目前对内核源码的注解已完成了 `80%` ,对内核源码的博客分析已完成了`70+篇` 已持续一年有余, 占用了所有的空闲时间, 但每天都很充实,很兴奋,连做梦内核代码都在鱼贯而入。如此疯狂地做一件事还是当年谈恋爱的时候, 只因热爱, 热爱是所有的理由和答案。 :P
* 因大学时阅读 `linux 26` 内核痛并快乐的经历,一直有个心愿,如何让更多对内核感兴趣的朋友减少阅读时间,加速对计算机系统级的理解,而不至于过早的放弃。但因过程种种,多年一直没有行动,基本要放弃这件事了。恰逢 `2020/9/10` 鸿蒙正式开源,重新激活了多年的心愿,就有那么点如黄河之水一发不可收拾了。
* 目前对内核源码的注解已完成了 `80%` ,对内核源码的博客分析已完成了`70+篇`百图画鸿蒙完成 30%, 已持续一年有余, 占用了所有的空闲时间,但每天都很充实,很兴奋,连做梦内核代码都在鱼贯而入。如此疯狂地做一件事还是当年谈恋爱的时候,只因热爱,热爱是所有的理由和答案。 :P
### (〃・ิ‿・ิ)ゞ鸿蒙内核开发者
* 感谢开放原子开源基金会,致敬鸿蒙内核开发者提供了如此优秀的源码,一了多年的夙愿,津津乐道于此。精读内核源码加注并整理成档是件很有挑战的事,时间上是以年为单位,但正因为很难才值得去做! 干困难事,方有所得;专注聚焦,必有所获。
* 从内核一行行的代码中能深深感受到开发者各中艰辛与坚持,及鸿蒙生态对未来的价值,这些是张嘴就来的网络喷子们永远不能体会到的。可以毫不夸张的说鸿蒙内核源码可作为大学: C语言,数据结构,操作系统,汇编语言,计算机系统结构,计算机组成原理 六门课程的教学项目。如此宝库,不深入研究实在是暴殄天物,于心不忍,注者坚信鸿蒙大势所趋,未来可期,其必定成功,也必然成功,誓做其坚定的追随者和传播者。
### 理解内核的三个层级
* 普通概念映射级: 这一级不涉及专业知识,用大众所熟知的公共认知就能听明白是个什么概念,也就是说用一个普通人都懂的概念去诠释或者映射一个他们从没听过的概念。让陌生的知识点与大脑中烂熟于心的知识点建立多重链接,加深记忆。说别人能听得懂的话这很重要!!! 一个没学过计算机知识的卖菜大妈就不可能知道内核的基本运作了吗? 不一定!在系列篇中试图用故事篇,去引导这一层级的认知,希望能卷入更多的人来关注基础软件,人多了场子热起来了创新就来了。
* 普通概念映射级: 这一级不涉及专业知识,用大众所熟知的公共认知就能听明白是个什么概念,也就是说用一个普通人都懂的概念去诠释或者映射一个他们从没听过的概念。让陌生的知识点与大脑中烂熟于心的知识点建立多重链接,加深记忆。说别人能听得懂的话这很重要!!! 一个没学过计算机知识的卖菜大妈就不可能知道内核的基本运作了吗? 不一定!在系列篇中试图用故事篇去引导这一层级的认知,希望能卷入更多的人来关注基础软件,人多了场子热起来了创新就来了。
* 专业概念抽象级: 对抽象的专业逻辑概念具体化认知, 比如虚拟内存,老百姓是听不懂的,学过计算机的人都懂,具体怎么实现的很多人又都不懂了,但这并不妨碍成为一个优秀的上层应用开发者,因为虚拟内存已经被抽象出来,目的是要屏蔽上层对它具体实现的认知。试图用百篇博客系列篇去拆解那些已经被抽象出来的专业概念, 希望能卷入更多对内核感兴趣的应用软件人才流入基础软硬件生态, 应用软件咱们是无敌宇宙,但基础软件却很薄弱。
* 具体微观代码级: 这一级是具体到每一行代码的实现,到了用代码指令级的地步,这段代码是什么意思?为什么要这么设计?有没有更好的方案? [鸿蒙内核源码注解分析](https://gitee.com/weharmony/kernel_liteos_a_note) 试图从细微处去解释代码实现层,英文真的是天生适合设计成编程语言的人类语言,计算机的01码映射到人类世界的26个字母,诞生了太多的伟大奇迹。但我们的母语注定了很大部分人存在着自然语言层级的理解映射,希望内核注解分析能让更多爱好者快速的理解内核,共同进步。
### 四个维度解剖内核
为了很好的全方位剖析内核,在`中文注释`,`官方文档`,`百篇博客`,`参考手册`四个方向做了努力,试图以`讲故事`,`画图表`,`写文档`,`拆源码`立体的方式表述清楚内核.很喜欢易中天老师的一句话:研究方式不等于表述方式。底层技术并不枯燥,它可以就是我们生活中的场景。
#### 一 : 中文注释 | 源码呈现
为了很好的全方位剖析内核,在`主干百图``百篇博客``中文注释``参考手册`四个方向做了努力,试图以`讲故事``画图表``写文档``拆源码`立体的方式表述清楚内核。很喜欢易中天老师的一句话:研究方式不等于表述方式。底层技术并不枯燥,它可以就是我们生活中的场景。
* 因鸿蒙内核6W+代码量,本身只有较少的注释, 中文注解以不对原有代码侵入为前提,源码中所有英文部分都是原有注释,所有中文部分都是中文版的注释,同时为方便同步官方版本的更新,尽量不去增加代码的行数,不破坏文件的结构,注释多类似以下的方式:
在重要模块的.c/.h文件开始位置先对模块功能做整体的介绍,例如异常接管模块注解如图所示:
![](https://gitee.com/weharmonyos/resources/raw/master/13/ycjg.png)
注解过程中查阅了很多的资料和书籍,在具体代码处都附上了参考链接。
* 而函数级注解会详细到重点行,甚至每一行, 例如申请互斥锁的主体函数,不可谓不重要,而官方注释仅有一行,如图所示
![](https://gitee.com/weharmonyos/resources/raw/master/13/sop.png)
* 另外针对每个知识点画了相对应的图理解,一图胜千言,有些知识点没有图很难理解,例如内核最重要的结构体`双向链表`,说它怎么重要都不为过,其插入删除操作被内核高频,灵活的使用,不理解透彻在分析源码过程中很容易卡壳.
![](https://gitee.com/weharmonyos/resources/raw/master/1/LOS_ListInit.png)
* 注解创建了一些特殊记号,可直接搜索查看
- [x] 搜索 `@note_pic` 可查看绘制的全部字符图
- [x] 搜索 `@note_why` 是尚未看明白的地方,有看明白的,请[新建 Pull Request](https://gitee.com/weharmony/kernel_liteos_a_note/pull/new/weharmony:master...weharmony:master)完善
- [x] 搜索 `@note_thinking` 是一些的思考和建议
- [x] 搜索 `@note_#if0` 是由第三方项目提供不在内核源码中定义的极为重要结构体,为方便理解而添加的。
- [x] 搜索 `@note_link` 是网址链接,方便理解模块信息,来源于官方文档,百篇博客,外部链接
- [x] 搜索 `@note_good` 是给源码点赞的地方
#### 二 : 官方文档 | 静态站点呈现
研究鸿蒙需不断的翻阅资料,吸取别人的精华,其中官方文档必不可少, 为更好的呈现 **OpenHarmony开发者文档** , 特意做了静态站点 [ >> 鸿蒙研究站 | 官方文档](http://weharmonyos.com/openharmony) 来方便搜索,阅读官方资料.
左侧导航栏,右边索引区
![](https://gitee.com/weharmonyos/resources/raw/master/52/4.png)
[鸿蒙研究站](http://weharmonyos.com) 定位于做一个专注而靠谱的技术站, 没有广告,干净简洁,永久免费, 对鸿蒙研究会持续在上面输出。同时感谢资助鸿蒙研究和网站建设的小伙伴,很温暖。 [ >> 送温暖记录](http://weharmonyos.com/donate.html)
#### 一: 百图画鸿蒙 | 一图一主干 | 骨骼系统
如果把鸿蒙比作人的话,百图相当于骨骼系统, 有了它人的骨相就出来,计划对鸿蒙100个重要知识点画出对应的图理解, 目前完成 30% 。例如内核最重要的结构体`双向链表`,说它怎么重要都不为过,其插入删除操作被内核高频,灵活的使用,若不理解透彻在分析源码过程中很容易卡壳。一图说清楚一个大点,每张都是心血之作, 所以会画的比较复杂,高清图会很大,可以从 **公众号** 获取。
![](https://gitee。com/weharmonyos/resources/raw/master/100pic/1_list.png)
#### 三 : 百篇博客 | 文档呈现
* 给鸿蒙内核源码加注释过程中,整理出以下文章。内容立足源码,常以生活场景打比方尽可能多的将内核知识点置入某种场景,具有画面感,容易理解记忆。说别人能听得懂的话很重要! 百篇博客绝不是百度教条式的在说一堆诘屈聱牙的概念,那没什么意思。更希望让内核变得栩栩如生,倍感亲切.确实有难度,自不量力,但已经出发,回头已是不可能的了。 😛
* 与代码有bug需不断debug一样,文章和注解内容会存在不少错漏之处,请多包涵,但会反复修正,持续更新,v**.xx 代表文章序号和修改的次数,精雕细琢,言简意赅,力求打造精品内容。
#### 二: 百文说内核 | 抓住主脉络 | 肌肉器官
* 百文相当于肌肉和器官系统,让人开始丰满有立体感,因是直接从注释源码起步,在加注释过程中,每每有心得处就整理,慢慢形成了以下文章。内容立足源码,常以生活场景打比方尽可能多的将内核知识点置入某种场景,具有画面感,容易理解记忆。说别人能听得懂的话很重要! 百篇博客绝不是百度教条式的在说一堆诘屈聱牙的概念,那没什么意思。更希望让内核变得栩栩如生,倍感亲切。
* 与代码有bug需不断debug一样,文章和注解内容会存在不少错漏之处,请多包涵,但会反复修正,持续更新,v**。xx 代表文章序号和修改的次数,精雕细琢,言简意赅,力求打造精品内容。
按时间顺序:
......@@ -146,40 +113,61 @@
* [v74.01 鸿蒙内核源码分析(控制台) | 一个让很多人模糊的概念](https://my.oschina.net/weharmony/blog/5356308)
* [v75.01 鸿蒙内核源码分析(远程登录) | 内核如何接待远方的客人](https://my.oschina.net/weharmony/blog/5375838)
#### 三 : 百万注内核 | 处处扣细节 | 细胞血管
* 因鸿蒙内核6W+代码量,本身只有较少的注释, 中文注解以不对原有代码侵入为前提,源码中所有英文部分都是原有注释,所有中文部分都是中文版的注释,同时为方便同步官方版本的更新,尽量不去增加代码的行数,不破坏文件的结构,注释多类似以下的方式:
在重要模块的。c/。h文件开始位置先对模块功能做整体的介绍,例如异常接管模块注解如图所示:
![](https://gitee。com/weharmonyos/resources/raw/master/13/ycjg.png)
注解过程中查阅了很多的资料和书籍,在具体代码处都附上了参考链接。
* 而函数级注解会详细到重点行,甚至每一行, 例如申请互斥锁的主体函数,不可谓不重要,而官方注释仅有一行,如图所示
![](https://gitee。com/weharmonyos/resources/raw/master/13/sop.png)
* 注解创建了一些特殊记号,可直接搜索查看
- [x] 搜索 `@note_pic` 可查看绘制的全部字符图
- [x] 搜索 `@note_why` 是尚未看明白的地方,有看明白的,请[新建 Pull Request](https://gitee。com/weharmony/kernel_liteos_a_note/pull/new/weharmony:master。。。weharmony:master)完善
- [x] 搜索 `@note_thinking` 是一些的思考和建议
- [x] 搜索 `@note_#if0` 是由第三方项目提供不在内核源码中定义的极为重要结构体,为方便理解而添加的。
- [x] 搜索 `@note_link` 是网址链接,方便理解模块信息,来源于官方文档,百篇博客,外部链接
- [x] 搜索 `@note_good` 是给源码点赞的地方
#### 四 : 参考手册 | Doxygen呈现
#### 四 : 参考手册 | Doxygen呈现 | 诊断
为了很好的输出注解内容,注解标准遵循 [doxygen](https://www.doxygen.nl) 格式标准。函数/头文件/模块之间的调用关系清晰可见,丝丝入扣.
下图为内核`main`的调用关系直观展现,如果没有这张图,`main`一个函数就够喝一壶。 `main`本身是由汇编指令 `bl main`调用
这里可以看到毛细血管级的网络图,注解遵循 [doxygen](https://www.doxygen.nl) 格式标准。
下图为内核`main`的调用关系直观展现,如果没有这张图,`main`一个函数就够喝一壶。 `main`本身是由汇编指令 `bl main`调用
![](https://gitee.com/weharmonyos/resources/raw/master/73/1.png)
![](https://giteecom/weharmonyos/resources/raw/master/73/1.png)
可前往 >> [鸿蒙研究站 | 参考手册 ](http://weharmonyos.com/doxygen/index.html) 体验
下图为内核所有结构体索引,点击可查看每个结构变量细节
下图为内核所有结构体索引点击可查看每个结构变量细节
![](https://gitee.com/weharmonyos/resources/raw/master/73/6.png)
![](https://giteecom/weharmonyos/resources/raw/master/73/6.png)
可前往 >> [鸿蒙研究站 | 结构体索引 ](http://weharmonyos.com/doxygen/classes.html) 体验
### 四大码仓发布 | 源码同步官方
内核注解同时在 [gitee](https://gitee.com/weharmony/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) | [codechina](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note) 发布,并与官方源码按月保持同步,同步历史如下:
* `2021/12/20` -- 增加LMS模块,完善PM,Fat Cache
* `2021/11/12` -- 加入epoll支持,对shell模块有较大调整,微调process,task,更正单词拼写错误
* `2021/10/21` -- 增加性能优化模块`perf`,优化了文件映射模块
* `2021/09/14` -- common,extended等几个目录结构和Makefile调整
* `2021/08/19` -- 各目录增加了`BUILD.gn`文件,文件系统部分文件调整
* `2021/07/15` -- 改动不大,新增`blackbox`,`hidumper`,对一些宏规范化使用
* `2021/06/27` -- 对文件系统/设备驱动改动较大,目录结构进行了重新整理
* `2021/06/08` -- 对编译构建,任务,信号模块有较大的改动
* `2021/05/28` -- 改动不大,主要针对一些错误单词拼写纠正
内核注解同时在 [gitee](https://gitee.com/weharmony/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) | [codechina](https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note) 发布并与官方源码按月保持同步,同步历史如下:
* `2021/12/20` -- 增加LMS模块,完善PM,Fat Cache
* `2021/11/12` -- 加入epoll支持,对shell模块有较大调整,微调process,task,更正单词拼写错误
* `2021/10/21` -- 增加性能优化模块`perf`优化了文件映射模块
* `2021/09/14` -- commonextended等几个目录结构和Makefile调整
* `2021/08/19` -- 各目录增加了`BUILD。gn`文件,文件系统部分文件调整
* `2021/07/15` -- 改动不大,新增`blackbox``hidumper`对一些宏规范化使用
* `2021/06/27` -- 对文件系统/设备驱动改动较大目录结构进行了重新整理
* `2021/06/08` -- 对编译构建,任务,信号模块有较大的改动
* `2021/05/28` -- 改动不大主要针对一些错误单词拼写纠正
* `2021/05/13` -- 对系统调用,任务切换,信号处理,异常接管,文件管理,shell做了较大更新,代码结构更清晰
* `2021/04/21` -- 官方优化了很多之前吐槽的地方,点赞
* `2020/09/16` -- 中文注解版起点
### 注解子系统仓库
在给鸿蒙内核源码加注过程中发现仅仅注解内核仓库还不够,因为它关联了其他子系统,若对这些子系统不了解是很难完整的注解鸿蒙内核,所以也对这些关联仓库进行了部分注解,这些仓库包括:
在给鸿蒙内核源码加注过程中发现仅仅注解内核仓库还不够,因为它关联了其他子系统,若对这些子系统不了解是很难完整的注解鸿蒙内核,所以也对这些关联仓库进行了部分注解,这些仓库包括:
* [编译构建子系统 | build_lite](https://gitee.com/weharmony/build_lite_note)
* [协议栈 | lwip](https://gitee.com/weharmony/third_party_lwip)
......@@ -189,8 +177,8 @@
### 其他
* [微信 | QQ 群](http://weharmonyos.com/qun.html)
* [离线文档 | PDF | CHM](http://weharmonyos.com/history.html)
* [主流站点 | 全网覆盖](http://weharmonyos.com/extsite.html)
* [离线文档 | PDF | CHM](http://weharmonyos.com/historyhtml)
* [主流站点 | 全网覆盖](http://weharmonyos.com/extsitehtml)
* [送温暖 | 润心田](http://weharmonyos.com/donate.html)
* [新建 Issue](https://gitee.com/weharmony/kernel_liteos_a_note/issues)
* [新建 Pull Request](https://gitee.com/weharmony/kernel_liteos_a_note/pull/new/weharmony:master...weharmony:master)
......@@ -238,12 +226,20 @@
# 它与内核代码无关,大家可以忽略它,取名zzz是为了排在最后,减少对原有代码目录级的侵入,
# zzz 的想法源于微信中名称为AAA的那帮朋友,你的微信里应该也有他们熟悉的身影吧 :|P
```
#### 官方文档 | 静态站点呈现
### 关注不迷路.代码即人生
研究鸿蒙需不断的翻阅资料,吸取别人的精华,其中官方文档必不可少, 为更好的呈现 **OpenHarmony开发者文档** , 特意做了静态站点 [ >> 鸿蒙研究站 | 官方文档](http://weharmonyos.com/openharmony) 来方便搜索,阅读官方资料。
![](https://gitee.com/weharmonyos/resources/raw/master/common/so1so.png)
左侧导航栏,右边索引区
**QQ群 790015635 | 入群密码 666 | 存放重要文档资料**
![](https://gitee.com/weharmonyos/resources/raw/master/52/4.png)
[鸿蒙研究站](http://weharmonyos.com) 定位于做一个专注而靠谱的技术站, 没有广告,干净简洁,对鸿蒙研究会持续在上面输出。同时感谢资助鸿蒙研究和网站建设的小伙伴,很温暖。 [ >> 送温暖记录](http://weharmonyos.com/donate.html)
### 关注不迷路 | 代码即人生
![](https://gitee.com/weharmonyos/resources/raw/master/common/so1so.png)
鸿蒙研究站( weharmonyos ) | 每天死磕一点点,原创不易,欢迎转载,请注明出处。若能支持点赞则更佳,感谢每一份支持。
git add -A
git commit -m ' 更正些不恰当的注释
git commit -m ' 更新 readme
百图画鸿蒙 + 百文说内核 + 百万注源码 => 挖透鸿蒙内核源码
鸿蒙研究站 | http://weharmonyos.com (国内)
| https://weharmony.github.io (国外)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册