2022/01/03 同步官方代码, 只有几个小改动

    百图画鸿蒙 + 百文说内核 + 百万注源码  => 挖透鸿蒙内核源码
    鸿蒙研究站 | 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)
上级 ddba3bd0
......@@ -315,6 +315,13 @@ group("kernel") {
}
group("liteos_a") {
deps = [
":apps",
":kernel",
":make",
":tests",
"//prebuilts/lite/sysroot/build:strip",
]
}
executable("liteos") {
......
......@@ -6,7 +6,7 @@
**中文注解鸿蒙内核 | [kernel_liteos_a_note](https://gitee.com/weharmony/kernel_liteos_a_note)** 是在 `OpenHarmony`[kernel_liteos_a](https://gitee.com/openharmony/kernel_liteos_a) 基础上给内核源码加上中文注解的版本。
### 为何要精读内核源码?
### 为何要精读内核源码
* 码农的学职生涯,都应精读一遍内核源码。以浇筑好计算机知识大厦的地基,地基纵深的坚固程度,很大程度能决定未来大厦能盖多高。那为何一定要精读细品呢?
* 因为内核代码本身并不太多,都是浓缩的精华,精读是让各个知识点高频出现,不孤立成点状记忆,没有足够连接点的知识点是很容易忘的,点点成线,线面成体,连接越多,记得越牢,如此短时间内容易结成一张高浓度,高密度的系统化知识网,训练大脑肌肉记忆,驻入大脑直觉区,想抹都抹不掉,终生携带,随时调取。跟骑单车一样,一旦学会,即便多年不骑,照样跨上就走,游刃有余。
### 热爱是所有的理由和答案
......@@ -19,24 +19,22 @@
* 普通概念映射级:这一级不涉及专业知识,用大众所熟知的公共认知就能听明白是个什么概念,也就是说用一个普通人都懂的概念去诠释或者映射一个他们从没听过的概念。让陌生的知识点与大脑中烂熟于心的知识点建立多重链接,加深记忆。说别人能听得懂的话这很重要。一个没学过计算机知识的卖菜大妈就不可能知道内核的基本运作了吗?不一定。在系列篇中试图用故事,打比方,去引导这一层级的认知,希望能卷入更多的人来关注基础软件,人多了场子热起来了创新就来了。
* 专业概念抽象级:对抽象的专业逻辑概念具体化认知, 比如虚拟内存,老百姓是听不懂的,学过计算机的人都懂,具体怎么实现的很多人又都不懂了,但这并不妨碍成为一个优秀的上层应用开发者,因为虚拟内存已经被抽象出来,目的是要屏蔽上层对它具体实现的认知。试图用百篇博客系列篇去拆解那些已经被抽象出来的专业概念, 希望能卷入更多对内核感兴趣的应用软件人才流入基础软硬件生态, 应用软件咱们是无敌宇宙,但基础软件却很薄弱。
* 具体微观代码级:这一级是具体到每一行代码的实现,到了用代码指令级的地步,这段代码是什么意思?为什么要这么设计?有没有更好的方案?[鸿蒙内核源码注解分析](https://gitee.com/weharmony/kernel_liteos_a_note) 试图从细微处去解释代码实现层,英文真的是天生适合设计成编程语言的人类语言,计算机的01码映射到人类世界的26个字母,诞生了太多的伟大奇迹。但我们的母语注定了很大部分人存在着自然语言层级的理解映射,希望内核注解分析能让更多爱好者节约时间成本,哪怕节约一分钟也是这件事莫大的意义。
* 具体微观代码级:这一级是具体到每一行代码的实现,到了用代码指令级的地步,这段代码是什么意思为什么要这么设计?有没有更好的方案?[鸿蒙内核源码注解分析](https://gitee.com/weharmony/kernel_liteos_a_note) 试图从细微处去解释代码实现层,英文真的是天生适合设计成编程语言的人类语言,计算机的01码映射到人类世界的26个字母,诞生了太多的伟大奇迹。但我们的母语注定了很大部分人存在着自然语言层级的理解映射,希望内核注解分析能让更多爱好者节约时间成本,哪怕节约一分钟也是这件事莫大的意义。
### 四个维度解剖内核
为了全方位剖析内核,在`画图``写文``注源``成册` 四个方向做了努力,试图以`讲故事``画图表``写文档``拆源码`立体的方式表述内核。很喜欢易中天老师的一句话:研究方式不等于表述方式。底层技术并不枯燥,它可以很有意思,它就是我们生活中的场景。
#### 一: 百图画鸿蒙 | 一图一主干 | 骨骼系统
#### 一: 百图画鸿蒙 | 一图一主干 | 骨骼系统
* 如果把鸿蒙比作人,百图目的是要画出其骨骼系统。
* 例如 `双向链表` 是内核最重要的结构体,说它怎么重要都不为过,其插入删除操作被内核高频,灵活的使用,若不理解透彻在分析源码过程中很容易卡壳。虽在网上能找到很多它的图,但怎么看都不是自己想要的,便重画了它的主要操作
* 百图系列每张图都是心血之作,耗时甚大,能用一张就绝不用两张,所以会画的比较复杂,高清图会很大,可以从 **公众号** 获取超高清图。如果喜欢也请分享给更多的人
* ![](https://giteecom/weharmonyos/resources/raw/master/100pic/1_list.png)
* 百图系列每张图都是心血之作,耗时甚大,能用一张就绝不用两张,所以会画的比较复杂,高清图会很大,可在公号中回复 **百图** 获取`3`倍超高清最新图。`v**.xx`代表图的版本,请留意图的更新
* **双向链表** 是内核最重要的结构体,站长更愿意将它比喻成人的左右手,其意义是通过寄生在宿主结构体上来体现,可想象成在宿主结构体装上一对对勤劳的双手,它真的很会来事,超级活跃分子,为宿主到处拉朋友,建圈子。其插入 | 删除 | 遍历操作是它最常用的社交三大件,若不理解透彻在分析源码过程中很容易卡壳。虽在网上能找到很多它的图,但怎么看都不是自己想要的,干脆重画了它的主要操作
* ![](https://gitee.com/weharmonyos/resources/raw/master/100pic/1_list.png)
#### 二: 百文说内核 | 抓住主脉络 | 肌肉器官
#### 二 百文说内核 | 抓住主脉络 | 肌肉器官
* 百文相当于摸出内核的肌肉和器官系统,让人开始丰满有立体感,因是直接从注释源码起步,在加注释过程中,每每有心得处就整理,慢慢形成了以下文章。内容立足源码,常以生活场景打比方尽可能多的将内核知识点置入某种场景,具有画面感,容易理解记忆。说别人能听得懂的话很重要! 百篇博客绝不是百度教条式的在说一堆诘屈聱牙的概念,那没什么意思。更希望让内核变得栩栩如生,倍感亲切。
* 与代码需不断`debug`一样,文章内容会存在不少错漏之处,请多包涵,但会反复修正,持续更新,`v**.xx` 代表文章序号和修改的次数,精雕细琢,言简意赅,力求打造精品内容。
* 百文在 < 鸿蒙研究站 | 开源中国 | 博客园 | 51cto | csdn | 知乎 | 掘金 > 站点发布。
* 百文在 < 鸿蒙研究站 | 开源中国 | 博客园 | 51cto | csdn | 知乎 | 掘金 > 站点发布,公号回复 **百文** 可方便阅读。
按时间顺序:
......@@ -123,17 +121,17 @@
在重要模块的`.c/.h`文件开始位置先对模块功能做整体的介绍,例如异常接管模块注解如图所示:
![](https://giteecom/weharmonyos/resources/raw/master/13/ycjg.png)
![](https://gitee.com/weharmonyos/resources/raw/master/13/ycjg.png)
注解过程中查阅了很多的资料和书籍,在具体代码处都附上了参考链接。
* 而函数级注解会详细到重点行,甚至每一行, 例如申请互斥锁的主体函数,不可谓不重要,而官方注释仅有一行,如图所示
![](https://giteecom/weharmonyos/resources/raw/master/13/sop.png)
![](https://gitee.com/weharmonyos/resources/raw/master/13/sop.png)
* 注解创建了一些特殊记号,可直接搜索查看
- [x] 搜索 `@note_pic` 可查看绘制的全部字符图
- [x] 搜索 `@note_why` 是尚未看明白的地方,有看明白的,请[新建 Pull Request](https://giteecom/weharmony/kernel_liteos_a_note/pull/new/weharmony:master...weharmony:master)完善
- [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` 是网址链接,方便理解模块信息,来源于官方文档,百篇博客,外部链接
......@@ -143,20 +141,21 @@
在中文加注版基础上构建了参考手册,如此可以看到毛细血管级的网络图,注解支持 [doxygen](https://www.doxygen.nl) 格式标准。
* 图为内核`main`的调用关系直观展现,如果没有这张图,光`main`一个函数就够喝一壶。 `main`本身是由汇编指令 `bl main`调用
![](https://giteecom/weharmonyos/resources/raw/master/73/1.png)
![](https://gitee.com/weharmonyos/resources/raw/master/73/1.png)
可前往 >> [鸿蒙研究站 | 参考手册 ](http://weharmonyos.com/doxygen/index.html) 体验
* 图为内核所有结构体索引,点击可查看每个结构变量细节
![](https://giteecom/weharmonyos/resources/raw/master/73/6.png)
![](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) 发布,并与官方源码按月保持同步,同步历史如下:
* `2022/01/03` -- 只有很少的几处修改同步
* `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/08/19` -- 各目录增加了`BUILDgn`文件,文件系统部分文件调整
* `2021/07/15` -- 改动不大,新增`blackbox``hidumper`,对一些宏规范化使用
* `2021/06/27` -- 对文件系统/设备驱动改动较大,目录结构进行了重新整理
* `2021/06/08` -- 对编译构建,任务,信号模块有较大的改动
......@@ -187,14 +186,7 @@
* [鸿蒙研究站](http://weharmonyos.com) 定位于做一个专注而靠谱的技术站, 没有广告,干净简洁,对鸿蒙研究会持续在上面输出。同时感谢资助鸿蒙研究和网站建设的小伙伴,很温暖。 [ >> 送温暖记录](http://weharmonyos.com/donate.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) 四大码仓推送 | 同步官方源码
[![](https://gitee.com/weharmony/kernel_liteos_a_note/widgets/widget_card.svg?colors=393222,ebdfc1,fffae5,d8ca9f,393222,a28b40)](https://gitee.com/weharmony/kernel_liteos_a_note)
### 关注不迷路 | 代码即人生
![](https://gitee.com/weharmonyos/resources/raw/master/common/so1so.png)
原创不易,欢迎转载,也请注明出处。若能**点赞 | 分享**则更佳,感谢支持,一点微光,足以照亮前方。
......@@ -927,7 +927,7 @@ STATUS_T LOS_ArchMmuDestroy(LosArchMmu *archMmu)
LOS_PhysPageFree(page);//释放物理页
}
OsArmWriteTlbiasid(archMmu->asid);//写TLB
OsArmWriteTlbiasidis(archMmu->asid);
OsFreeAsid(archMmu->asid);//释放asid
#endif
(VOID)LOS_MuxDestroy(&archMmu->mtx);
......
......@@ -306,7 +306,8 @@ UINT32 OsArmSharedPageFault(UINT32 excType, ExcContext *frame, UINT32 far, UINT3
break;
}
default:
ret = LOS_ERRNO_VM_NOT_FOUND;
OsArmWriteTlbimvaais(ROUNDDOWN(far, PAGE_SIZE));
ret = LOS_OK;
break;
}
#if defined(LOSCFG_KERNEL_SMP) && defined(LOSCFG_DEBUG_VERSION)
......@@ -1341,10 +1342,10 @@ __attribute__((noinline)) VOID LOS_Panic(const CHAR *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
UartVprintf(fmt, ap);
OsVprintf(fmt, ap, EXC_OUTPUT);
va_end(ap);
__asm__ __volatile__("swi 0"); //触发断异常
while (1);
while (1) {}
}
/* stack protector */
......
......@@ -54,7 +54,7 @@ typedef unsigned short fmode_t;
#define PROC_ERROR (-1)
/* Default file mode for procfs */
#define PROCFS_DEFAULT_MODE 0555
#define PROCFS_DEFAULT_MODE 0550
/* 64bit hashes as llseek() offset (for directories) */
#define FMODE_64BITHASH ((fmode_t)0x400)
......
......@@ -114,7 +114,7 @@ STATIC VOID OsMagicPanic(VOID)
STATIC VOID OsMagicMemCheck(VOID)
{
if (LOS_MemIntegrityCheck(m_aucSysMem1) == LOS_OK) {
PRINTK("system memcheck over, all passed!\n");
PrintExcInfo("system memcheck over, all passed!\n");
}
return;
}
......@@ -134,9 +134,9 @@ INT32 CheckMagicKey(CHAR key, UINT16 consoleId)
// 则关闭魔法键检测功能,输出“Magic key off”。
magicKeySwitch = ~magicKeySwitch;
if (magicKeySwitch != 0) {
PRINTK("Magic key on\n");
PrintExcInfo("Magic key on\n");
} else {
PRINTK("Magic key off\n");
PrintExcInfo("Magic key off\n");
}
return 1;
}
......
......@@ -47,7 +47,7 @@
#include "los_excinfo_pri.h"
#endif
#include "los_exc_pri.h"
#include "los_sched_pri.h"
#define SIZEBUF 256
......@@ -95,7 +95,7 @@ STATIC VOID ConsoleOutput(const CHAR *str, UINT32 len)
for (;;) {
cnt = write(STDOUT_FILENO, str + written, (size_t)toWrite);//向控制台写入数据,STDOUT_FILENO = 1
if ((cnt < 0) || ((cnt == 0) && (OS_INT_ACTIVE)) || (toWrite == cnt)) {
if ((cnt < 0) || ((cnt == 0) && ((!OsPreemptable()) || (OS_INT_ACTIVE))) || (toWrite == cnt)) {
break;
}
written += cnt; //已写入数量增加
......
git add -A
git commit -m ' 完成几个主要结构体图制作
git commit -m ' 2022/01/03 同步官方代码, 只有几个小改动
百图画鸿蒙 + 百文说内核 + 百万注源码 => 挖透鸿蒙内核源码
鸿蒙研究站 | http://weharmonyos.com (国内)
| https://weharmony.github.io (国外)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册