diff --git a/README.md b/README.md index c6003afea5ac22fd5cdc2ea0876e071d780950cb..aa6c15bfc867aa92a0763b4a8887b4c4f671d360 100644 --- a/README.md +++ b/README.md @@ -15,26 +15,16 @@ ### (〃・ิ‿・ิ)ゞ鸿蒙内核开发者 * 感谢开放原子开源基金会,致敬鸿蒙内核开发者提供了如此优秀的源码,一了多年的夙愿,津津乐道于此。精读内核源码加注并整理成档是件很有挑战的事,时间上是以年为单位,但正因为很难才值得去做! 干困难事,方有所得;专注聚焦,必有所获。 * 从内核一行行的代码中能深深感受到开发者各中艰辛与坚持,及鸿蒙生态对未来的价值,这些是张嘴就来的网络喷子们永远不能体会到的。可以毫不夸张的说鸿蒙内核源码可作为大学: C语言,数据结构,操作系统,汇编语言,计算机系统结构,计算机组成原理 六门课程的教学项目。如此宝库,不深入研究实在是暴殄天物,于心不忍,注者坚信鸿蒙大势所趋,未来可期,其必定成功,也必然成功,誓做其坚定的追随者和传播者。 -### 同步历史 -注解鸿蒙内核仓库与官方源码按月保持同步. -* `2021/12/11` -- 增加LMS模块,完善PM -* `2021/11/26` -- 加入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` -- 改动不大,主要针对一些错误单词拼写纠正 -* `2021/05/13` -- 对系统调用,任务切换,信号处理,异常接管,文件管理,shell做了较大更新,代码结构更清晰 -* `2021/04/21` -- 官方优化了很多之前吐槽的地方,点赞 -* `2020/09/16` -- 中文注解版起点 - + ### 理解内核的三个层级 -* 普通概念映射级: 这一级不涉及专业知识,用大众所熟知的公共认知就能听明白是个什么概念,也就是说用一个普通人都懂的概念去诠释或者映射一个他们从没听过的概念。让陌生的知识点与大脑中烂熟于心的知识点建立多重链接,加深记忆。说别人能听得懂的话这很重要!!! 一个没学过计算机知识的卖菜大妈就不可能知道内核的基本运作了吗? 不一定!在系列篇中试图用 v08.xx 鸿蒙内核源码分析(总目录) 之故事篇 去引导这一层级的认知,希望能卷入更多的人来关注基础软件,尤其是那些资本大鳄,加大对基础软件的投入。 -* 专业概念抽象级: 对抽象的专业逻辑概念具体化认知, 比如虚拟内存,老百姓是听不懂的,学过计算机的人都懂,具体怎么实现的很多人又都不懂了,但这并不妨碍成为一个优秀的上层应用开发者,因为虚拟内存已经被抽象出来,目的是要屏蔽上层对它具体实现的认知。试图用 鸿蒙内核源码分析(总目录 去拆解那些已经被抽象出来的专业概念, 希望能卷入更多对内核感兴趣的应用软件人才流入基础软硬件生态, 应用软件咱们是无敌宇宙,但基础软件却很薄弱。 -* 具体微观代码级: 这一级是具体到每一行代码的实现,到了用代码指令级的地步,这段代码是什么意思?为什么要这么设计?有没有更好的方案? [鸿蒙内核源码注解分析](https://gitee.com/weharmony/kernel_liteos_a_note) 试图从细微处去解释代码实现层,英文真的是天生适合设计成编程语言的人类语言,计算机的01码映射到人类世界的26个字母,诞生了太多的伟大奇迹。但我们的母语注定了很大部分人存在着自然语言层级的理解映射,希望鸿蒙内核源码注解分析能让更多爱好者快速的理解内核,共同进步。 -### 加注方式是怎样的? + +* 普通概念映射级: 这一级不涉及专业知识,用大众所熟知的公共认知就能听明白是个什么概念,也就是说用一个普通人都懂的概念去诠释或者映射一个他们从没听过的概念。让陌生的知识点与大脑中烂熟于心的知识点建立多重链接,加深记忆。说别人能听得懂的话这很重要!!! 一个没学过计算机知识的卖菜大妈就不可能知道内核的基本运作了吗? 不一定!在系列篇中试图用故事篇,去引导这一层级的认知,希望能卷入更多的人来关注基础软件,人多了场子热起来了创新就来了。 +* 专业概念抽象级: 对抽象的专业逻辑概念具体化认知, 比如虚拟内存,老百姓是听不懂的,学过计算机的人都懂,具体怎么实现的很多人又都不懂了,但这并不妨碍成为一个优秀的上层应用开发者,因为虚拟内存已经被抽象出来,目的是要屏蔽上层对它具体实现的认知。试图用百篇博客系列篇去拆解那些已经被抽象出来的专业概念, 希望能卷入更多对内核感兴趣的应用软件人才流入基础软硬件生态, 应用软件咱们是无敌宇宙,但基础软件却很薄弱。 +* 具体微观代码级: 这一级是具体到每一行代码的实现,到了用代码指令级的地步,这段代码是什么意思?为什么要这么设计?有没有更好的方案? [鸿蒙内核源码注解分析](https://gitee.com/weharmony/kernel_liteos_a_note) 试图从细微处去解释代码实现层,英文真的是天生适合设计成编程语言的人类语言,计算机的01码映射到人类世界的26个字母,诞生了太多的伟大奇迹。但我们的母语注定了很大部分人存在着自然语言层级的理解映射,希望内核注解分析能让更多爱好者快速的理解内核,共同进步。 + +### 四个维度解剖内核 +为了很好的全方位剖析内核,在`中文注释`,`官方文档`,`百篇博客`,`参考手册`四个方向做了努力,试图以`讲故事`,`画图表`,`写文档`,`拆源码`立体的方式表述清楚内核.很喜欢易中天老师的一句话:研究方式不等于表述方式。底层技术并不枯燥,它可以就是我们生活中的场景。 +#### 一 : 中文注释 | 源码呈现 * 因鸿蒙内核6W+代码量,本身只有较少的注释, 中文注解以不对原有代码侵入为前提,源码中所有英文部分都是原有注释,所有中文部分都是中文版的注释,同时为方便同步官方版本的更新,尽量不去增加代码的行数,不破坏文件的结构,注释多类似以下的方式: @@ -52,107 +42,34 @@ ![](https://gitee.com/weharmonyos/resources/raw/master/13/vm.png) -### 输出注解文档 | 注释结合图形 -为了很好的输出注解内容,注解支持 [doxygen](https://www.doxygen.nl) 格式 - -[![](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完善 -- [x] 搜索 `@note_thinking` 是一些的思考和建议 -- [x] 搜索 `@note_#if0` 是由第三方项目提供不在内核源码中定义的极为重要结构体,为方便理解而添加的。 -- [x] 搜索 `@note_link` 是网址链接,方便理解模块信息,来源于官方文档,百篇博客,外部链接 -- [x] 搜索 `@note_good` 是给源码点赞的地方 - -### 目录结构 -``` -/kernel/liteos_a -├── apps # 用户态的init和shell应用程序 -├── arch # 体系架构的目录,如arm等 -│ └── arm # arm架构代码 -├── bsd # freebsd相关的驱动和适配层模块代码引入,例如USB等 -├── compat # 内核接口兼容性目录 -│ └── posix # posix相关接口 -├── drivers # 内核驱动 -│ └── char # 字符设备 -│ ├── mem # 访问物理IO设备驱动 -│ ├── quickstart # 系统快速启动接口目录 -│ ├── random # 随机数设备驱动 -│ └── video # framebuffer驱动框架 -├── fs # 文件系统模块,主要来源于NuttX开源项目 -│ ├── fat # fat文件系统 -│ ├── jffs2 # jffs2文件系统 -│ ├── include # 对外暴露头文件存放目录 -│ ├── nfs # nfs文件系统 -│ ├── proc # proc文件系统 -│ ├── ramfs # ramfs文件系统 -│ └── vfs # vfs层 -├── kernel # 进程、内存、IPC等模块 -│ ├── base # 基础内核,包括调度、内存等模块 -│ ├── common # 内核通用组件 -│ ├── extended # 扩展内核,包括动态加载、vdso、liteipc等模块 -│ ├── include # 对外暴露头文件存放目录 -│ └── user # 加载init进程 -├── lib # 内核的lib库 -├── net # 网络模块,主要来源于lwip开源项目 -├── platform # 支持不同的芯片平台代码,如Hi3516DV300等 -│ ├── hw # 时钟与中断相关逻辑代码 -│ ├── include # 对外暴露头文件存放目录 -│ └── uart # 串口相关逻辑代码 -├── platform # 支持不同的芯片平台代码,如Hi3516DV300等 -├── security # 安全特性相关的代码,包括进程权限管理和虚拟id映射管理 -├── syscall # 系统调用 -├── tools # 构建工具及相关配置和代码 -└── zzz # 中文加注版比官方版无新增文件,只多了一个zzz的目录,里面放了一些图片/文件/工具, - # 它与内核代码无关,大家可以忽略它,取名zzz是为了排在最后,减少对原有代码目录级的侵入, - # zzz 的想法源于微信中名称为AAA的那帮朋友,你的微信里应该也有他们熟悉的身影吧 :|P -``` - -### 鸿蒙研究站 | [weharmonyos.com](http://weharmonyos.com) | 每天死磕一点点 - -聚焦于做一个专注而靠谱的技术站, 分成四部分内容 - -* [OpenHarmony开发者文档](http://weharmonyos.com/openharmony) 是对官方文档 [docs](https://gitee.com/openharmony/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/) - - -### 注解子系统仓库 +* 注解创建了一些特殊记号,可直接搜索查看 + - [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` 是给源码点赞的地方 -在给鸿蒙内核源码加注过程中发现仅仅注解内核仓库还不够,因为它关联了其他子系统,若对这些子系统不了解是很难完整的注解鸿蒙内核,所以也对这些关联仓库进行了部分注解,这些仓库包括: +#### 二 : 官方文档 | 静态站点呈现 -* [编译构建子系统 | build_lite](https://gitee.com/weharmony/build_lite_note) -* [协议栈 | lwip](https://gitee.com/weharmony/third_party_lwip) -* [文件系统 | NuttX](https://gitee.com/weharmony/third_party_NuttX) -* [标准库 | musl](https://gitee.com/weharmony/third_party_musl) +研究鸿蒙需不断的翻阅资料,吸取别人的精华,其中官方文档必不可少, 为更好的呈现 **OpenHarmony开发者文档** , 特意做了静态站点 [ >> 鸿蒙研究站 | 官方文档](http://weharmonyos.com/openharmony) 来方便搜索,阅读官方资料. -### 参与共建 +![](https://gitee.com/weharmonyos/resources/raw/master/52/2.png) -* [新建 Issue](https://gitee.com/weharmony/kernel_liteos_a_note/issues) +左侧导航栏,右边索引区 -### 微信 | QQ 群 -前往 >> [http://weharmonyos.com/qun.html](http://weharmonyos.com/qun.html) +![](https://gitee.com/weharmonyos/resources/raw/master/52/4.png) -### 离线文档 | PDF | CHM -前往 >> [http://weharmonyos.com/history.html](http://weharmonyos.com/history.html) -### 送温暖 | 润心田 -前往 >> [http://weharmonyos.com/donate.html](http://weharmonyos.com/donate.html) + [鸿蒙研究站](http://weharmonyos.com) 定位于做一个专注而靠谱的技术站, 没有广告,干净简洁,永久免费, 对鸿蒙研究会持续在上面输出。同时感谢资助鸿蒙研究和网站建设的小伙伴,很温暖。 [ >> 送温暖记录](http://weharmonyos.com/donate.html) -### 主流站点 | 全网覆盖 -前往 >> [http://weharmonyos.com/extsite.html](http://weharmonyos.com/extsite.html) -### 参与贡献 -* [新建 Pull Request](https://gitee.com/weharmony/kernel_liteos_a_note/pull/new/weharmony:master...weharmony:master) +#### 三 : 百篇博客 | 文档呈现 -### 百篇博客分析.深挖内核地基 * 给鸿蒙内核源码加注释过程中,整理出以下文章。内容立足源码,常以生活场景打比方尽可能多的将内核知识点置入某种场景,具有画面感,容易理解记忆。说别人能听得懂的话很重要! 百篇博客绝不是百度教条式的在说一堆诘屈聱牙的概念,那没什么意思。更希望让内核变得栩栩如生,倍感亲切.确实有难度,自不量力,但已经出发,回头已是不可能的了。 😛 * 与代码有bug需不断debug一样,文章和注解内容会存在不少错漏之处,请多包涵,但会反复修正,持续更新,v**.xx 代表文章序号和修改的次数,精雕细琢,言简意赅,力求打造精品内容。 + 按时间顺序: * [v01.12 鸿蒙内核源码分析(双向链表) | 谁是内核最重要结构体](http://weharmonyos.com/blog/01.html) @@ -214,8 +131,8 @@ * [v57.02 鸿蒙内核源码分析(编译过程) | 简单案例说透中间过程](http://weharmonyos.com/blog/57.html) * [v58.03 鸿蒙内核源码分析(环境脚本) | 编译鸿蒙原来很简单](http://weharmonyos.com/blog/58.html) * [v59.04 鸿蒙内核源码分析(构建工具) | 顺瓜摸藤调试构建过程](http://weharmonyos.com/blog/59.html) -* [v60.04 鸿蒙内核源码分析(gn应用) | 如何构建鸿蒙系统](http://weharmonyos.comhttp://weharmonyos/blog/60.html) -* [v61.03 鸿蒙内核源码分析(忍者ninja) | 忍者的特点就是一个字](http://weharmonyos.comhttp://weharmonyos/blog/61.html) +* [v60.04 鸿蒙内核源码分析(gn应用) | 如何构建鸿蒙系统](http://weharmonyos.com/blog/60.html) +* [v61.03 鸿蒙内核源码分析(忍者ninja) | 忍者的特点就是一个字](http://weharmonyos.com/blog/61.html) * [v62.02 鸿蒙内核源码分析(文件概念) | 为什么说一切皆是文件](http://weharmonyos.com/blog/62.html) * [v63.04 鸿蒙内核源码分析(文件系统) | 用图书管理说文件系统](http://weharmonyos.com/blog/63.html) * [v64.06 鸿蒙内核源码分析(索引节点) | 谁是文件系统最重要的概念](http://weharmonyos.com/blog/64.html) @@ -227,11 +144,100 @@ * [v70.05 鸿蒙内核源码分析(管道文件) | 如何降低数据流动成本](http://weharmonyos.com/blog/70.html) * [v71.03 鸿蒙内核源码分析(Shell编辑) | 两个任务 三个阶段](http://weharmonyos.com/blog/71.html) * [v72.01 鸿蒙内核源码分析(Shell解析) | 应用窥伺内核的窗口](http://weharmonyos.com/blog/72.html) -* [v73.01 鸿蒙内核源码分析(注释文档) | 内核所有函数调用关系图](http://weharmonyos.com/blog/73.html) +* [v73.01 鸿蒙内核源码分析(参考文档) | 阅读内核源码必备工具](http://weharmonyos.com/blog/73.html) +* [v74.01 鸿蒙内核源码分析(控制台) | 一个让很多人模糊的概念](http://weharmonyos.com/blog/74.html) + + +#### 四 : 参考手册 | Doxygen呈现 +为了很好的输出注解内容,注解标准遵循 [doxygen](https://www.doxygen.nl) 格式标准。函数/头文件/模块之间的调用关系清晰可见,丝丝入扣. +下图为内核`main`的调用关系直观展现,如果没有这张图,光`main`一个函数就够喝一壶。 `main`本身是由汇编指令 `bl main`调用 +![](https://gitee.com/weharmonyos/resources/raw/master/73/1.png) + +可前往 >> [鸿蒙研究站 | 参考手册 ](http://weharmonyos.com/doxygen/index.html) 体验 + +下图为内核所有结构体索引,点击可查看每个结构变量细节 +![](https://gitee.com/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/11` -- 增加LMS模块,完善PM +* `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` -- 改动不大,主要针对一些错误单词拼写纠正 +* `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) +* [文件系统 | NuttX](https://gitee.com/weharmony/third_party_NuttX) +* [标准库 | musl](https://gitee.com/weharmony/third_party_musl) + +### 其他 + +* [微信 | QQ 群](http://weharmonyos.com/qun.html) +* [离线文档 | PDF | CHM](http://weharmonyos.com/history.html) +* [主流站点 | 全网覆盖](http://weharmonyos.com/extsite.html) +* [送温暖 | 润心田](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) + +### 内核目录结构 +``` +/kernel/liteos_a +├── apps # 用户态的init和shell应用程序 +├── arch # 体系架构的目录,如arm等 +│ └── arm # arm架构代码 +├── bsd # freebsd相关的驱动和适配层模块代码引入,例如USB等 +├── compat # 内核接口兼容性目录 +│ └── posix # posix相关接口 +├── drivers # 内核驱动 +│ └── char # 字符设备 +│ ├── mem # 访问物理IO设备驱动 +│ ├── quickstart # 系统快速启动接口目录 +│ ├── random # 随机数设备驱动 +│ └── video # framebuffer驱动框架 +├── fs # 文件系统模块,主要来源于NuttX开源项目 +│ ├── fat # fat文件系统 +│ ├── jffs2 # jffs2文件系统 +│ ├── include # 对外暴露头文件存放目录 +│ ├── nfs # nfs文件系统 +│ ├── proc # proc文件系统 +│ ├── ramfs # ramfs文件系统 +│ └── vfs # vfs层 +├── kernel # 进程、内存、IPC等模块 +│ ├── base # 基础内核,包括调度、内存等模块 +│ ├── common # 内核通用组件 +│ ├── extended # 扩展内核,包括动态加载、vdso、liteipc等模块 +│ ├── include # 对外暴露头文件存放目录 +│ └── user # 加载init进程 +├── lib # 内核的lib库 +├── net # 网络模块,主要来源于lwip开源项目 +├── platform # 支持不同的芯片平台代码,如Hi3516DV300等 +│ ├── hw # 时钟与中断相关逻辑代码 +│ ├── include # 对外暴露头文件存放目录 +│ └── uart # 串口相关逻辑代码 +├── platform # 支持不同的芯片平台代码,如Hi3516DV300等 +├── security # 安全特性相关的代码,包括进程权限管理和虚拟id映射管理 +├── syscall # 系统调用 +├── tools # 构建工具及相关配置和代码 +└── zzz # 中文加注版比官方版无新增文件,只多了一个zzz的目录,里面放了一些图片/文件/工具, + # 它与内核代码无关,大家可以忽略它,取名zzz是为了排在最后,减少对原有代码目录级的侵入, + # zzz 的想法源于微信中名称为AAA的那帮朋友,你的微信里应该也有他们熟悉的身影吧 :|P +``` ### 关注不迷路.代码即人生 ![](https://gitee.com/weharmonyos/resources/raw/master/common/so1so.png) - **QQ群 790015635 | 入群密码 666 | 存放重要文档资料** diff --git a/zzz/git/push.sh b/zzz/git/push.sh index a96c389a2fe958abdd984d20604c0f4c57748eae..89eb383d7e4e4d428a4e459f311afb877c458f4d 100644 --- a/zzz/git/push.sh +++ b/zzz/git/push.sh @@ -1,5 +1,5 @@ git add -A -git commit -m ' 制作远程登录模型图 https://gitee.com/weharmonyos/resources/raw/master/75/telnet_model.png +git commit -m ' 更新 readme 百万汉字注解 + 百篇博客分析 => 挖透鸿蒙内核源码 鸿蒙研究站 | http://weharmonyos.com (国内) | https://weharmony.github.io (国外)