古人学问无遗力,少壮工夫老始成。这篇文章主要讲述鸿蒙内核源码分析(源码注释篇) | 鸿蒙必定成功,也必然成功 | 百篇博客分析HarmonyOS源码相关的知识,希望能为你提供帮助。
将 HarmonyOS | 鸿蒙 研究到底<
国内 | 国外 >
文章图片
百篇博客系列篇.本篇为:
- v13.xx 鸿蒙内核源码分析(源码注释篇) | 鸿蒙必定成功,也必然成功| 51 .c.h.o
- 每月同步一次更新
2021/5/13
-- 本次官方对系统调用,任务切换,信号处理,异常接管,汇编文件,文件管理,shell 做了较大更新,代码结构更清晰,部分代码需重新加注.2021/4/21
-- 官方优化了很多之前吐槽的地方,点赞.2020/9/16
-- 中文注解版起点.
- kernel_liteos_a_note 是在 OpenHarmony 的 kernel_liteos_a (鸿蒙轻内核项目)基础上给源码加上中文注解的版本.加注版与官方版本保持每月同步.
- 注解分析博客地址:
- 国内:https://weharmony.gitee.io/weharmony
- 国外:https://weharmony.github.io/weharmony
- 博客站点更新速度:
- 注解分析地址
- oschina
- 51cto
- csdn
- OpenHarmony开发者文档是对官方文档 docs 做的非常炫酷的静态站点,支持侧边栏/面包屑/搜索/中英文,非常方便的查看官方文档,大大提高学习和开发效率.
- 国内: https://weharmony.gitee.io/openharmony
- 国外: https://weharmony.github.io/openharmony
- OpenHarmony全量代码仓库 是 OpenHarmony 的110+个子项目的所有代码. OpenHarmony 使用
repo
管理众多git
项目,repo
在linux
下很方便,但在windows
上谁用谁知道,使用会有相当的困难,所以将所有项目整合成一个.git工程,如此使用git
便能下载整个鸿蒙系统源码,方便学习使用.与官方仓库保持每月同步.OpenHarmony全量代码仓库已编译通过..... [OHOS INFO] [1587/1590] STAMP obj/test/xts/acts/build_lite/acts_generate_module_data.stamp [OHOS INFO] [1588/1590] ACTION //test/xts/acts/build_lite:acts(//build/lite/toolchain:linux_x86_64_ohos_clang) [OHOS INFO] [1589/1590] STAMP obj/test/xts/acts/build_lite/acts.stamp [OHOS INFO] [1590/1590] STAMP obj/build/lite/ohos.stamp [OHOS INFO] ipcamera_hispark_aries build success root@5e3abe332c5a:/home/harmony#
- 下载.鸿蒙源码分析.离线文档
- 国内: https://weharmony.gitee.io/history/
- 国外: https://weharmony.github.io/history/
- 码农的学职生涯,都应精读一遍内核源码.以浇筑好计算机知识大厦的地基,地基纵深的坚固程度,很大程度能决定未来大厦能盖多高.那为何一定要精读细品呢?
- 因为内核代码本身并不太多,都是浓缩的精华,精读是让各个知识点高频出现,不孤立成点状记忆,没有足够连接点的知识点是很容易忘的,点点成线,线面成体,连接越多,记得越牢,如此短时间内容易结成一张高浓度,高密度的系统化知识网,训练大脑肌肉记忆,驻入大脑直觉区,想抹都抹不掉,终生携带,随时调取.跟骑单车一样,一旦学会,即便多年不骑,照样跨上就走,游刃有余.
热爱是所有的理由和答案
- 因大学时阅读
linux 2.6
内核痛并快乐的经历,一直有个心愿,如何让更多对内核感兴趣的朋友减少阅读时间,加速对计算机系统级的理解,而不至于过早的放弃.但因过程种种,多年一直没有行动,基本要放弃这件事了.恰逢 2020/9/10 鸿蒙正式开源,重新激活了多年的心愿,就有那么点如黄河之水一发不可收拾了. - 到 2021/3/10 刚好半年, 对内核源码的注解已完成了 70% ,对内核源码的博客分析已完成了40篇, 每天都很充实,很兴奋,连做梦内核代码都在鱼贯而入.如此疯狂地做一件事还是当年谈恋爱的时候, 只因热爱, 热爱是所有的理由和答案. :P
(〃?????)ゞ鸿蒙内核开发者
- 感谢开放原子开源基金会,致敬鸿蒙内核开发者提供了如此优秀的源码,一了多年的夙愿,津津乐道于此.精读内核源码加注并整理成档是件很有挑战的事,时间上要以月甚至年为单位,但正因为很难才值得去做! 干困难事,方有所得; 专注聚焦,必有所获.
- 从内核一行行的代码中能深深感受到开发者各中艰辛与坚持,及鸿蒙生态对未来的价值,这些是张嘴就来的网络喷子们永远不能体会到的.可以毫不夸张的说鸿蒙内核源码可作为大学 C语言,数据结构,操作系统,汇编语言,计算机组成原理 五门课程的教学项目.如此宝库,不深入研究实在是暴殄天物,于心不忍,注者坚信鸿蒙大势所趋,未来可期,其必定成功,也必然成功,誓做其坚定的追随者和传播者.
理解内核的三个层级
- 普通概念映射级: 这一级不涉及专业知识,用大众所熟知的公共认知就能听明白是个什么概念,也就是说用一个普通人都懂的概念去诠释或者映射一个他们从没听过的概念.让陌生的知识点与大脑中烂熟于心的知识点建立多重链接,加深记忆.说别人能听得懂的话这很重要!!! 一个没学过计算机知识的卖菜大妈就不可能知道内核的基本运作了吗? 不一定!在系列篇中试图用 鸿蒙内核源码分析(总目录)之故事篇 去引导这一层级的认知,希望能卷入更多的人来关注基础软件,尤其是那些资本大鳄,加大对基础软件的投入.
- 专业概念抽象级: 对抽象的专业逻辑概念具体化认知, 比如虚拟内存,老百姓是听不懂的,学过计算机的人都懂,具体怎么实现的很多人又都不懂了,但这并不妨碍成为一个优秀的上层应用开发者,因为虚拟内存已经被抽象出来,目的是要屏蔽上层对它具体实现的认知.试图用 鸿蒙内核源码分析(总目录)百篇博客 去拆解那些已经被抽象出来的专业概念, 希望能卷入更多对内核感兴趣的应用软件人才流入基础软硬件生态, 应用软件咱们是无敌宇宙,但基础软件却很薄弱.
- 具体微观代码级: 这一级是具体到每一行代码的实现,到了用代码指令级的地步,这段代码是什么意思?为什么要这么设计?有没有更好的方案? 鸿蒙内核源码注解分析 试图从细微处去解释代码实现层,英文真的是天生适合设计成编程语言的人类语言,计算机的01码映射到人类世界的26个字母,诞生了太多的伟大奇迹.但我们的母语注定了很大部分人存在着自然语言层级的理解映射,希望鸿蒙内核源码注解分析能让更多爱好者快速的理解内核,共同进步.
加注方式是怎样的?
- 因鸿蒙内核6W+代码量,本身只有较少的注释, 中文注解以不对原有代码侵入为前提,源码中所有英文部分都是原有注释,所有中文部分都是中文版的注释,同时为方便同步官方版本的更新,尽量不去增加代码的行数,不破坏文件的结构,注释多类似以下的方式:
在重要模块的.c/.h文件开始位置先对模块功能做整体的介绍,例如异常接管模块注解如图所示:
文章图片
注解过程中查阅了很多的资料和书籍,在具体代码处都附上了参考链接.
- 而函数级注解会详细到重点行,甚至每一行, 例如申请互斥锁的主体函数,不可谓不重要,而官方注释仅有一行,如图所示
文章图片
- 另外画了一些字符图方便理解,直接嵌入到头文件中,比如虚拟内存的全景图,因没有这些图是很难理解虚拟内存是如何管理的.
文章图片
有哪些特殊的记号
- 搜索
@note_pic
可查看绘制的全部字符图 - 搜索
@note_why
是尚未看明白的地方,有看明白的,请Pull Request完善 - 搜索
@note_thinking
是一些的思考和建议 - 搜索
@note_#if0
是由第三方项目提供不在内核源码中定义的极为重要结构体,为方便理解而添加的。 - 搜索
@note_good
是给源码点赞的地方 新增zzz目录
- 中文加注版比官方版无新增文件,只多了一个zzz的目录,里面放了一些文件,它与内核代码无关,大家可以忽略它,取名zzz是为了排在最后,减少对原有代码目录级的侵入,zzz的想法源于微信中名称为AAA的那帮朋友,你的微信里应该也有他们熟悉的身影吧 :|P
- v52.xx 鸿蒙内核源码分析(静态站点篇) | 五一哪也没去就干了这事| 51 .c.h.o
- v51.xx 鸿蒙内核源码分析(ELF格式篇) | 应用程序入口并不是main| 51 .c.h.o
- v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙看这篇或许真的够了| 51 .c.h.o
- v49.xx 鸿蒙内核源码分析(信号消费篇) | 谁让CPU连续四次换栈运行| 51 .c.h.o
- v48.xx 鸿蒙内核源码分析(信号生产篇) | 年过半百,依然活力十足| 51 .c.h.o
- v47.xx 鸿蒙内核源码分析(进程回收篇) | 临终前如何向老祖宗托孤| 51 .c.h.o
- v46.xx 鸿蒙内核源码分析(特殊进程篇) | 龙生龙凤生凤老鼠生儿会打洞| 51 .c.h.o
- v45.xx 鸿蒙内核源码分析(Fork篇) | 一次调用,两次返回| 51 .c.h.o
- v44.xx 鸿蒙内核源码分析(中断管理篇) | 江湖从此不再怕中断| 51 .c.h.o
- v43.xx 鸿蒙内核源码分析(中断概念篇) | 海公公的日常工作| 51 .c.h.o
- v42.xx 鸿蒙内核源码分析(中断切换篇) | 系统因中断活力四射| 51 .c.h.o
- v41.xx 鸿蒙内核源码分析(任务切换篇) | 看汇编如何切换任务| 51 .c.h.o
- v40.xx 鸿蒙内核源码分析(汇编汇总篇) | 汇编可爱如邻家女孩| 51 .c.h.o
- v39.xx 鸿蒙内核源码分析(异常接管篇) | 社会很单纯,复杂的是人| 51 .c.h.o
- v38.xx 鸿蒙内核源码分析(寄存器篇) | 小强乃宇宙最忙存储器| 51 .c.h.o
- v37.xx 鸿蒙内核源码分析(系统调用篇) | 开发者永远的口头禅| 51 .c.h.o
- v36.xx 鸿蒙内核源码分析(工作模式篇) | CPU是韦小宝,七个老婆| 51 .c.h.o
- v35.xx 鸿蒙内核源码分析(时间管理篇) | 谁是内核基本时间单位| 51 .c.h.o
- 【鸿蒙内核源码分析(源码注释篇) | 鸿蒙必定成功,也必然成功 | 百篇博客分析HarmonyOS源码】v34.xx 鸿蒙内核源码分析(原子操作篇) | 谁在为原子操作保驾护航| 51 .c.h.o
- v33.xx 鸿蒙内核源码分析(消息队列篇) | 进程间如何异步传递大数据| 51 .c.h.o
- v32.xx 鸿蒙内核源码分析(CPU篇) | 整个内核就是一个死循环| 51 .c.h.o
- v31.xx 鸿蒙内核源码分析(定时器篇) | 哪个任务的优先级最高| 51 .c.h.o
- v30.xx 鸿蒙内核源码分析(事件控制篇) | 任务间多对多的同步方案| 51 .c.h.o
- v29.xx 鸿蒙内核源码分析(信号量篇) | 谁在负责解决任务的同步| 51 .c.h.o
- v28.xx 鸿蒙内核源码分析(进程通讯篇) | 九种进程间通讯方式速揽| 51 .c.h.o
- v27.xx 鸿蒙内核源码分析(互斥锁篇) | 比自旋锁丰满的互斥锁| 51 .c.h.o
- v26.xx 鸿蒙内核源码分析(自旋锁篇) | 自旋锁当立贞节牌坊| 51 .c.h.o
- v25.xx 鸿蒙内核源码分析(并发并行篇) | 听过无数遍的两个概念| 51 .c.h.o
- v24.xx 鸿蒙内核源码分析(进程概念篇) | 进程在管理哪些资源| 51 .c.h.o
- v23.xx 鸿蒙内核源码分析(汇编传参篇) | 如何传递复杂的参数| 51 .c.h.o
- v22.xx 鸿蒙内核源码分析(汇编基础篇) | CPU在哪里打卡上班| 51 .c.h.o
- v21.xx 鸿蒙内核源码分析(线程概念篇) | 是谁在不断的折腾CPU| 51 .c.h.o
- v20.xx 鸿蒙内核源码分析(用栈方式篇) | 程序运行场地由谁提供| 51 .c.h.o
- v19.xx 鸿蒙内核源码分析(位图管理篇) | 谁能一分钱分两半花| 51 .c.h.o
- v18.xx 鸿蒙内核源码分析(源码结构篇) | 内核每个文件的含义| 51 .c.h.o
- v17.xx 鸿蒙内核源码分析(物理内存篇) | 怎么管理物理内存| 51 .c.h.o
- v16.xx 鸿蒙内核源码分析(内存规则篇) | 内存管理到底在管什么| 51 .c.h.o
- v15.xx 鸿蒙内核源码分析(内存映射篇) | 虚拟内存虚在哪里| 51 .c.h.o
- v14.xx 鸿蒙内核源码分析(内存汇编篇) | 谁是虚拟内存实现的基础| 51 .c.h.o
- v13.xx 鸿蒙内核源码分析(源码注释篇) | 鸿蒙必定成功,也必然成功| 51 .c.h.o
- v12.xx 鸿蒙内核源码分析(内存管理篇) | 虚拟内存全景图是怎样的| 51 .c.h.o
- v11.xx 鸿蒙内核源码分析(内存分配篇) | 内存有哪些分配方式| 51 .c.h.o
- v10.xx 鸿蒙内核源码分析(内存主奴篇) | 皇上和奴才如何相处| 51 .c.h.o
- v09.xx 鸿蒙内核源码分析(调度故事篇) | 用故事说内核调度过程| 51 .c.h.o
- v08.xx 鸿蒙内核源码分析(总目录) | 百万汉字注解 百篇博客分析| 51 .c.h.o
- v07.xx 鸿蒙内核源码分析(调度机制篇) | 任务是如何被调度执行的| 51 .c.h.o
- v06.xx 鸿蒙内核源码分析(调度队列篇) | 内核有多少个调度队列| 51 .c.h.o
- v05.xx 鸿蒙内核源码分析(任务管理篇) | 任务池是如何管理的| 51 .c.h.o
- v04.xx 鸿蒙内核源码分析(任务调度篇) | 任务是内核调度的单元| 51 .c.h.o
- v03.xx 鸿蒙内核源码分析(时钟任务篇) | 触发调度谁的贡献最大| 51 .c.h.o
- v02.xx 鸿蒙内核源码分析(进程管理篇) | 谁在管理内核资源| 51 .c.h.o
- v01.xx 鸿蒙内核源码分析(双向链表篇) | 谁是内核最重要结构体| 51 .c.h.o
看系列篇文章会常看到
51 .c .h .o
,希望这对大家阅读不会造成影响. 分别对应以下四个站点的首个字符,感谢这些站点一直以来对系列篇的支持和推荐,尤其是 oschina gitee ,很喜欢它的界面风格,简洁大方,让人感觉到开源的伟大!
- 51cto
- csdn
- harmony
- oschina
.c .h .o
是C语言的头/源/目标文件,这就很有意思了,冥冥之中似有天数,将这四个宝贝以这种方式融合在一起. 51 .c .h .o
, 我要CHO ,嗯嗯,hin 顺口 : )百万汉字注解.百篇博客分析
百万汉字注解 > > 精读鸿蒙源码,中文注解分析, 深挖地基工程,大脑永久记忆,四大码仓每日同步更新< gitee | github | csdn | coding >
百篇博客分析 > > 故事说内核,问答式导读,生活式比喻,表格化说明,图形化展示,主流站点定期更新中< 51cto| csdn | harmony| osc >
关注不迷路.代码即人生
文章图片
热爱是所有的理由和答案 - turing
原创不易,欢迎转载,但麻烦请注明出处.
推荐阅读
- 鸿蒙编译构建丨hb工具分析
- 鸿蒙开源第三方组件——日期和时间处理组件JodaTime-ohos
- Spring Bean定义的加载解析过程之注解的过程
- Java ASM系列((051)opcode: constant)
- 如何在Android中使用JSCH(SFTP)将文件上传到服务器
- 如何使用JavaScript确定Google地图上特定位置的用户点击的当前坐标
- JS Web开发的服务在哪里使用
- 如何使ACE Editor实例由用户使用拖放条动态调整大小
- 如何使用JavaScript在浏览器中检索MP3 / WAV音频文件的持续时间