精读鸿蒙内核源码,百万汉字注解分析; 百篇博客深入解剖,挖透内核地基工程. 定期同步官方源码,输出覆盖主流站点. 鸿蒙研究站 | 每天死磕一点点 => weharmonyos.com 做一个专注而靠谱的技术站,持续更新中 ...
中文注解鸿蒙轻内核 | kernel_liteos_a_note 是在 OpenHarmony
的 kernel_liteos_a 基础上给内核源码加上中文注解的版本,同步官方代码迭代推进。
因大学时阅读 linux 2.6 内核痛并快乐的经历,一直有个心愿,对底层基础技术进行一次系统性的整理,方便自己随时翻看,同时让更多对底层感兴趣的小伙伴减少时间,加速对计算机系统级的理解,而不至于过早的放弃。但因过程种种,多年一直没有行动,基本要放弃这件事了。恰逢 2020/9/10 鸿蒙正式开源,重新激活了多年的心愿,就有那么点如黄河之水一发不可收拾了。
包含三部分内容:注源,写博 ,画图, 目前对内核源码的注解完成 80% ,博客分析完成80+篇,百图画鸿蒙完成20张,空闲时间几乎被占用,时间不够用,但每天都很充实,连做梦鸿蒙系统都在鱼贯而入。是件很有挑战的事,时间单位以年计,已持续一年半,期间得到众多小伙伴的支持与纠错,在此谢过 ! :P
为了全方位剖析内核,在 画图,写文,注源,成册 四个方向做了努力,试图以讲故事,画图表,写文档,拆源码 立体的方式表述内核。很喜欢易中天老师的一句话:研究方式不等于表述方式。底层技术并不枯燥,它可以很有意思,它可以是我们生活中的场景。
3
倍超高清最新图。v**.xx
代表图的版本,请留意图的更新。百文相当于摸出内核的肌肉和器官系统,让人开始丰满有立体感,因是直接从注释源码起步,在加注释过程中,每每有心得处就整理,慢慢形成了以下文章。内容立足源码,常以生活场景打比方尽可能多的将内核知识点置入某种场景,具有画面感,容易理解记忆。说别人能听得懂的话很重要! 百篇博客绝不是百度教条式的在说一堆诘屈聱牙的概念,那没什么意思。更希望让内核变得栩栩如生,倍感亲切。
与代码需不断debug
一样,文章内容会存在不少错漏之处,请多包涵,但会反复修正,持续更新,v**.xx
代表文章序号和修改的次数,精雕细琢,言简意赅,力求打造精品内容。
百文在 < weharmony.github.io | 开源中国 | 博客园 | 51cto | csdn | 知乎 | 掘金 > 站点发布。
百万汉字注解内核目的是要看清楚其毛细血管,细胞结构,等于在拿放大镜看内核。内核并不神秘,带着问题去源码中找答案是很容易上瘾的,你会发现很多文章对一些问题的解读是错误的,或者说不深刻难以自圆其说,你会慢慢形成自己新的解读,而新的解读又会碰到新的问题,如此层层递进,滚滚向前,拿着放大镜根本不愿意放手。
因鸿蒙轻内核6W+代码量,本身只有较少的注释, 中文注解以不对原有代码侵入为前提,源码中所有英文部分都是原有注释,所有中文部分都是中文版的注释,同时为方便同步官方版本的更新,尽量不去增加代码的行数,不破坏文件的结构,注释多类似以下的方式:
在重要模块的.c/.h
文件开始位置先对模块功能做整体的介绍,例如异常接管模块注解如图所示:
注解过程中查阅了很多的资料和书籍,在具体代码处都附上了参考链接。
绘制字符图帮助理解模块 ,例如 虚拟内存区域分布没有图很难理解。
而函数级注解会详细到重点行,甚至每一行, 例如申请互斥锁的主体函数,不可谓不重要,而官方注释仅有一行,如图所示
注解创建了一些特殊记号,可直接搜索查看
@note_pic
可查看绘制的全部字符图@note_why
是尚未看明白的地方,有看明白的,请新建 Pull Request完善@note_thinking
是一些的思考和建议@note_#if0
是由第三方项目提供不在内核源码中定义的极为重要结构体,为方便理解而添加的。@note_link
是网址链接,方便理解模块信息,来源于官方文档,百篇博客,外部链接@note_good
是给源码点赞的地方在中文加注版基础上构建了参考手册,如此可以看到毛细血管级的网络图,注解支持 doxygen 格式标准。
图为内核main
的调用关系直观展现,如果没有这张图,光main
一个函数就够喝一壶。 main
本身是由汇编指令 bl main
调用
可前往 >> doxygen.weharmonyos.com | 参考手册 体验
图为内核所有结构体索引,点击可查看每个结构变量细节 可前往 >> doxygen.weharmonyos.com | 结构体索引 体验
内核注解同时在 gitee | github | coding | gitcode 发布,并与官方源码按月保持同步,同步历史如下:
2024/04/13
-- 官方几处小修正2024/03/04
-- 官方修改很小2023/11/24
-- 几处小的修改2023/10/11
-- 近五个月官方很少更新2023/05/26
-- BUILD.gn 相关2023/04/10
-- 调度算法优化,加入deadline2023/03/01
-- 增加网络容器和容器限额功能2023/02/13
-- 支持proc/self目录2023/01/14
-- 同步官方代码,支持PID容器2022/11/01
-- 删除 PLATFORM_QEMU_ARM_VIRT_CA7 侵入内核的所有代码2022/09/21
-- 主线代码没有变化,只完善了测试用例2022/07/18
-- 开机代码微调2022/06/03
-- 增加 jffs2 编译选项2022/05/09
-- 标准库(musl , newlib) 目录调整2022/04/16
-- 任务调度模块有很大更新2022/03/23
-- 新增各CPU核自主管理中断, 定时器模块较大调整2022/02/18
-- 官方无代码更新, 只有测试用例的完善2022/01/20
-- 同步官方代码,本次官方对测试用例和MMU做了较大调整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
-- 改动不大,主要针对一些错误单词拼写纠正2021/05/13
-- 对系统调用,任务切换,信号处理,异常接管,文件管理,shell
做了较大更新,代码结构更清晰2021/04/21
-- 官方优化了很多之前吐槽的地方,点赞2020/09/16
-- 中文注解版起点在给鸿蒙轻内核源码加注过程中发现仅仅注解内核仓库还不够,因为它关联了其他子系统,若对这些子系统不了解是很难完整的注解鸿蒙轻内核,所以也对这些关联仓库进行了部分注解,这些仓库包括:
中文加注版比官方版无新增文件,只多了一个zzz
的目录,里面放了一些加注所需文件,它与内核代码无关,可以忽略它,取名zzz
是为了排在最后,减少对原有代码目录级的侵入,zzz
的想法源于微信中名称为AAA
的那帮朋友,你的微信里应该也有他们熟悉的身影吧 :-)
/kernel/liteos_a_note
├── apps # 用户态的init和shell应用程序
├── arch # 体系架构的目录,如arm等
│ └── arm # arm架构代码
├── bsd # freebsd相关的驱动和适配层模块代码引入,例如USB等
├── compat # 内核接口兼容性目录
│ └── posix # posix相关接口
├── drivers # 内核驱动
│ └── char # 字符设备
│ ├── mem # 访问物理IO设备驱动
│ ├── quickstart # 系统快速启动接口目录
│ ├── random # 随机数设备驱动
│ └── video # framebuffer驱动框架
├── figures # 内核架构图
├── 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 # 串口相关逻辑代码
├── security # 安全特性相关的代码,包括进程权限管理和虚拟id映射管理
├── shell # 接收用户输入的命令,内核去执行
├── syscall # 系统调用
├── testsuilts # 测试套件
├── tools # 构建工具及相关配置和代码
└── zzz # 中文注解版新增目录
研究鸿蒙需不断的翻阅资料,吸取精华,其中官方文档必不可少, 为更好的呈现 OpenHarmony开发文档 , 制作了 >> openharmony 文档中心 来方便查阅官方资料,支持中英文,支持检索,稳定的LTS版本,内容与官方资料保持同步。>> 进入详细了解
搞技术的光搞好技术还不够,得学点管理,读点大师级的文章,任总无疑是目前国内最伟大的企业家,读他的文章,可以让您少奋斗十年,只恨自己读到的太晚,白白浪费了大好时光,痛定思痛,整理了任总历年的文章,共440余篇供您阅读。>> 进入详细了解
特此感谢过程中(统计至 2024/4/13)无私赞助的 25 位热心朋友,有企事业单位职工,有在校学生,有行业内资深大佬,也有非专业的纯粹爱好者,在此一并谢过,作者将带着这份温暖继续前行。 >> 进入详细了解
历史捐赠 | 最新捐赠 |
---|---|