Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
鸿蒙内核源码分析
注释鸿蒙内核源码
提交
69b09483
注释鸿蒙内核源码
项目概览
鸿蒙内核源码分析
/
注释鸿蒙内核源码
通知
270
Star
29
Fork
11
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
106
Wiki
分析
仓库
DevOps
项目成员
Pages
注释鸿蒙内核源码
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
106
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
69b09483
编写于
3月 02, 2021
作者:
鸿蒙内核源码分析
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
热爱是所有的理由和答案
百万汉字注解 + 百篇博客分析 => 挖透鸿蒙内核源码
https://weharmony.gitee.io
上级
4cf40f80
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
176 addition
and
170 deletion
+176
-170
README.md
README.md
+52
-47
arch/arm/arm/src/include/los_hw_pri.h
arch/arm/arm/src/include/los_hw_pri.h
+96
-96
arch/arm/arm/src/los_dispatch.S
arch/arm/arm/src/los_dispatch.S
+1
-1
arch/arm/arm/src/los_hw_exc.S
arch/arm/arm/src/los_hw_exc.S
+2
-2
arch/arm/arm/src/los_hwi.c
arch/arm/arm/src/los_hwi.c
+2
-2
arch/arm/arm/src/startup/reset_vector_mp.S
arch/arm/arm/src/startup/reset_vector_mp.S
+1
-1
kernel/base/ipc/los_signal.c
kernel/base/ipc/los_signal.c
+6
-6
kernel/user/src/los_user_init.c
kernel/user/src/los_user_init.c
+9
-8
platform/hw/arm/interrupt/gic/gic_v3.c
platform/hw/arm/interrupt/gic/gic_v3.c
+1
-1
syscall/ipc_syscall.c
syscall/ipc_syscall.c
+1
-1
syscall/los_syscall.c
syscall/los_syscall.c
+4
-4
zzz/git/push.sh
zzz/git/push.sh
+1
-1
未找到文件。
README.md
浏览文件 @
69b09483
[
![在这里插入图片描述
](
https://gitee.com/weharmony/docs/raw/master/pic/other/io.png
)
](https://weharmony.gitee.io)
百万汉字注解 >> 精读内核源码,中文注解分析, 深挖地基工程,大脑永久记忆,四大码仓每日同步更新
[
<
Gitee
](
https://gitee.com/weharmony/kernel_liteos_a_note
)[
| Github
]
(https://github.com/kuangyufei/kernel_liteos_a_note)
[
| CSDN
](
https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note
)[
| C
oding >
]
(https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)
百万汉字注解 >> 精读内核源码,中文注解分析, 深挖地基工程,大脑永久记忆,四大码仓每日同步更新
[
<
gitee
](
https://gitee.com/weharmony/kernel_liteos_a_note
)[
| github
]
(https://github.com/kuangyufei/kernel_liteos_a_note)
[
| csdn
](
https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note
)[
| c
oding >
]
(https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)
百篇博客分析 >> 故事说内核,问答式导读,生活式比喻,表格化说明,图形化展示,多站点每日同步更新
[
<
OSCHINA
](
https://my.oschina.net/u/3751245/blog/4626852
)[
| CSDN
]
(https://blog.csdn.net/kuangyufei/article/details/108727970)
[
| WeH
armony >
](
https://weharmony.gitee.io/
)
百篇博客分析 >> 故事说内核,问答式导读,生活式比喻,表格化说明,图形化展示,多站点每日同步更新
[
<
oschina
](
https://my.oschina.net/u/3751245/blog/4626852
)[
| csdn
]
(https://blog.csdn.net/kuangyufei/article/details/108727970)
[
| weh
armony >
](
https://weharmony.gitee.io/
)
---
...
...
@@ -57,92 +57,97 @@
给
**[鸿蒙内核源码加注释](https://gitee.com/weharmony/kernel_liteos_a_note)**
过程中,整理出以下文章.
*
(总目录) | 百万汉字注解 百篇博客分析
[
< csdn
](
https://blog.csdn.net/kuangyufei
)
[
| oschina >
]
(https://my.oschina.net/weharmony)
### **故事篇**
*
(
总目录) | 百万汉字注解 百篇博客分析
[
< CSDN
](
https://blog.csdn.net/kuangyufei
)
[
| OSCHINA >
]
(https://my.oschina.net/weharmony
)
*
(
调度故事篇) | 用故事说内核调度
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/108745174
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4634668
)
### **故事篇**
*
(内存主奴篇) | 用故事说内存管理
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/108723672
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4646802)
*
(
调度故事篇) | 通俗易懂故事说内核
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/108745174
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4634668
)
*
(
源码注释篇) | 热爱是所有的理由和答案
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/109251754
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4686747
)
*
(内存主奴篇) | 紫禁城的主子和奴才如何相处?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/108723672
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4646802)
### **ARM汇编篇**
### **进程/线程**
*
(系统调用篇) | 全盘解剖鸿蒙系统调用实现过程
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/114285166
)
[
| oschina >
]
(https://my.oschina.net/weharmony/blog/4967613)
*
(
CPU篇) | 内核是如何描述CPU的 ?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/113782749
)
[
| OSCHINA >
]
(https://my.oschina.net/weharmony/blog/4952034
)
*
(
工作模式篇) | 鸿蒙开机代码长啥样?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/114168567
)
[
| oschina >
]
(https://my.oschina.net/weharmony/blog/4965052
)
*
(
并发并行篇) | 内核如何管理多个CPU?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/113516222
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4940329
)
*
(
汇编传参篇) | 汇编如何传递复杂的参数?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/113265990
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4927892
)
*
(
调度机制篇) | 任务是如何被调度执行的?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/108705968
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4623040
)
*
(
汇编基础篇) | CPU在哪里打卡上班 ?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/112986628
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4920361
)
*
(调度队列篇) | 就绪队列对调度的作用
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/108626671
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4606916)
### **进程/线程篇**
*
(
任务管理篇) | 任务是内核调度的单元
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/108621428
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4603919
)
*
(
CPU篇) | 内核是如何描述CPU的 ?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/113782749
)
[
| oschina >
]
(https://my.oschina.net/weharmony/blog/4952034
)
*
(
时钟任务篇) | 调度最大的动力来自哪里?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/108603468
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4574493
)
*
(
并发并行篇) | 内核如何管理多个CPU?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/113516222
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4940329
)
*
(
进程管理篇) | 进程是内核资源管理单元
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/108595941
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4574429
)
*
(
调度机制篇) | 任务是如何被调度执行的?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/108705968
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4623040
)
*
(
线程概念篇) | 是谁在不断的折腾CPU?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/112870193
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4915543
)
*
(
调度队列篇) | 就绪队列对调度的作用
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/108626671
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4606916
)
*
(
进程概念篇) | 进程都管理了哪些资源?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/113395872
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4937521
)
*
(
任务管理篇) | 任务是内核调度的单元
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/108621428
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4603919
)
### **进程通讯**
*
(消息队列篇) | 进程间如何异步解耦传递大数据 ?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/113815355
)
[
| OSCHINA >
]
(https://my.oschina.net/weharmony/blog/4952961)
*
(时钟任务篇) | 调度最大的动力来自哪里?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/108603468
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4574493)
*
(
事件控制篇) | 任务间一对多和多对多的同步方案
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/113759481
)
[
| OSCHINA >
]
(https://my.oschina.net/weharmony/blog/4950956
)
*
(
进程管理篇) | 进程是内核资源管理单元
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/108595941
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4574429
)
*
(信号量篇) | 信号量解决任务同步问题
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/113744267
)
[
| OSCHINA >
]
(https://my.oschina.net/weharmony/blog/4949720)
*
(进程通讯篇) | 九大通讯方式一网打尽
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/113700751
)
[
| OSCHINA >
]
(https://my.oschina.net/weharmony/blog/4947398)
*
(线程概念篇) | 是谁在不断的折腾CPU?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/112870193
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4915543)
*
(
互斥锁篇) | 互斥锁比自旋锁丰满许多
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/113660357
)
[
| OSCHINA >
]
(https://my.oschina.net/weharmony/blog/4945465
)
*
(
进程概念篇) | 进程都管理了哪些资源?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/113395872
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4937521
)
### **通讯方式篇**
*
(
自旋锁篇) | 汇编到令人心碎的自旋锁
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/113616250
)
[
| OSCHINA >
]
(https://my.oschina.net/weharmony/blog/4944129
)
*
(
消息队列篇) | 进程间如何异步解耦传递大数据 ?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/113815355
)
[
| oschina >
]
(https://my.oschina.net/weharmony/blog/4952961
)
### **内存篇**
*
(事件控制篇) | 任务间一对多和多对多的同步方案
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/113759481
)
[
| oschina >
]
(https://my.oschina.net/weharmony/blog/4950956)
*
(物理内存篇) | 伙伴算法是在卖标准猪肉块吗?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/111765600
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4842408)
*
(信号量篇) | 信号量解决任务同步问题
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/113744267
)
[
| oschina >
]
(https://my.oschina.net/weharmony/blog/4949720)
*
(进程通讯篇) | 九大通讯方式一网打尽
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/113700751
)
[
| oschina >
]
(https://my.oschina.net/weharmony/blog/4947398)
*
(
内存规则篇) | 内存管理到底在管什么?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/109437223
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4698384
)
*
(
互斥锁篇) | 互斥锁比自旋锁丰满许多
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/113660357
)
[
| oschina >
]
(https://my.oschina.net/weharmony/blog/4945465
)
*
(
内存映射篇) | 什么是内存最重要的实现基础 ?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/109032636
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4694841
)
*
(
自旋锁篇) | 汇编到令人心碎的自旋锁
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/113616250
)
[
| oschina >
]
(https://my.oschina.net/weharmony/blog/4944129
)
*
(内存汇编篇) | 什么是虚拟内存的实现基础?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/108994081
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4692156)
### **内存篇**
*
(
内存分配篇) | 内存有哪些分配方式?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/108989906
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4646802
)
*
(
物理内存篇) | 伙伴算法是在卖标准猪肉块吗?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/111765600
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4842408
)
*
(内存
管理篇) | 虚拟内存全景图是怎样的?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/108821442
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/46522
84)
*
(内存
规则篇) | 内存管理到底在管什么?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/109437223
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/46983
84)
*
(内存
主奴篇) | 紫禁城的主子和奴才如何相处?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/108723672
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4646802
)
*
(内存
映射篇) | 什么是内存最重要的实现基础 ?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/109032636
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4694841
)
### **基础篇**
*
(内存汇编篇) | 什么是虚拟内存的实现基础?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/108994081
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4692156)
*
(
时间管理篇) | Tick是操作系统的基本时间单位
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/113867785
)
[
| OSCHINA >
]
(https://my.oschina.net/weharmony/blog/4956163
)
*
(
内存分配篇) | 内存有哪些分配方式?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/108989906
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4646802
)
*
(
原子操作篇) | 是哪两条汇编指令在为原子操作保驾护航 ?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/113850603
)
[
| OSCHINA >
]
(https://my.oschina.net/weharmony/blog/4955290
)
*
(
内存管理篇) | 虚拟内存全景图是怎样的?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/108821442
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4652284
)
*
(定时器机制篇) | 内核最高优先级任务是谁???
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/113774260
)
[
| OSCHINA >
]
(https://my.oschina.net/weharmony/blog/4951625)
*
(内存主奴篇) | 紫禁城的主子和奴才如何相处?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/108723672
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4646802)
### **基础篇**
*
(
汇编传参篇) | 汇编如何传递复杂的参数?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/113265990
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4927892
)
*
(
时间管理篇) | Tick是操作系统的基本时间单位
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/113867785
)
[
| oschina >
]
(https://my.oschina.net/weharmony/blog/4956163
)
*
(
汇编基础篇) | CPU在哪里打卡上班 ?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/112986628
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4920361
)
*
(
原子操作篇) | 是哪两条汇编指令在为原子操作保驾护航 ?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/113850603
)
[
| oschina >
]
(https://my.oschina.net/weharmony/blog/4955290
)
*
(
用栈方式篇) | 栈是构建底层运行的基础
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/112534331
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4893388
)
*
(
定时器机制篇) | 内核最高优先级任务是谁???
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/113774260
)
[
| oschina >
]
(https://my.oschina.net/weharmony/blog/4951625
)
*
(
位图管理篇) | 为何进程和线程都是32个优先级?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/112394982
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/4888467
)
*
(
用栈方式篇) | 栈是构建底层运行的基础
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/112534331
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/4893388
)
*
(
源码结构篇) | 内核500问你能答对多少?
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/111938348
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/486913
7)
*
(
位图管理篇) | 为何进程和线程都是32个优先级?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/112394982
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/488846
7)
*
(源码
注释篇) | 精读内核源码 深挖地基工程
[
< CSDN
](
https://blog.csdn.net/kuangyufei/article/details/109251754
)
[
| OSCHINA >
]
(https://my.oschina.net/u/3751245/blog/468674
7)
*
(源码
结构篇) | 内核500问你能答对多少?
[
< csdn
](
https://blog.csdn.net/kuangyufei/article/details/111938348
)
[
| oschina >
]
(https://my.oschina.net/u/3751245/blog/486913
7)
*
(双向链表篇) | 谁是内核最重要结构体?
[
<
CSDN
](
https://blog.csdn.net/kuangyufei/article/details/108585659
)
[
| OSCHINA
>
]
(https://my.oschina.net/u/3751245/blog/4572304)
*
(双向链表篇) | 谁是内核最重要结构体?
[
<
csdn
](
https://blog.csdn.net/kuangyufei/article/details/108585659
)
[
| oschina
>
]
(https://my.oschina.net/u/3751245/blog/4572304)
### **主流站点**
感谢
`
OSCHINA`
,
`CSDN
`
,
`华为开发者论坛`
,
`51CTO`
,
`电子发烧友`
,以及其他小伙伴通过自己的公众号对系列文章的转载和推荐,无以为报,唯有不断的深挖内核地基,输出更多文章,错漏之处请多见谅,会持续完善源码注解和文档内容,精雕细琢,尽全力打磨精品内容。文章输出站点:
感谢
`
oschina`
,
`csdn
`
,
`华为开发者论坛`
,
`51CTO`
,
`电子发烧友`
,以及其他小伙伴通过自己的公众号对系列文章的转载和推荐,无以为报,唯有不断的深挖内核地基,输出更多文章,错漏之处请多见谅,会持续完善源码注解和文档内容,精雕细琢,尽全力打磨精品内容。文章输出站点:
**[
CSDN |](https://blog.csdn.net/kuangyufei)**
**[开源中国 |](https://my.oschina.net/weharmony)**
**[51CTO |](https://harmonyos.51cto.com/column/34)**
**[头条号 |](https://gitee.com/weharmony/docs/raw/master/pic/other/tt.png)**
**[WeH
armony |](https://weharmony.gitee.io)**
**[公众号](https://gitee.com/weharmony/docs/raw/master/pic/other/wxcode.png)**
**[
csdn |](https://blog.csdn.net/kuangyufei)**
**[开源中国 |](https://my.oschina.net/weharmony)**
**[51cto |](https://harmonyos.51cto.com/column/34)**
**[头条号 |](https://gitee.com/weharmony/docs/raw/master/pic/other/tt.png)**
**[weh
armony |](https://weharmony.gitee.io)**
**[公众号](https://gitee.com/weharmony/docs/raw/master/pic/other/wxcode.png)**
## **Fork Me**
...
...
@@ -178,9 +183,9 @@
---
百万汉字注解 >> 精读内核源码,中文注解分析, 深挖地基工程,大脑永久记忆,四大码仓每日同步更新
[
<
Gitee
](
https://gitee.com/weharmony/kernel_liteos_a_note
)[
| Github
]
(https://github.com/kuangyufei/kernel_liteos_a_note)
[
| CSDN
](
https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note
)[
| C
oding >
]
(https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)
百万汉字注解 >> 精读内核源码,中文注解分析, 深挖地基工程,大脑永久记忆,四大码仓每日同步更新
[
<
gitee
](
https://gitee.com/weharmony/kernel_liteos_a_note
)[
| github
]
(https://github.com/kuangyufei/kernel_liteos_a_note)
[
| csdn
](
https://codechina.csdn.net/kuangyufei/kernel_liteos_a_note
)[
| c
oding >
]
(https://weharmony.coding.net/public/harmony/kernel_liteos_a_note/git/files)
百篇博客分析 >> 故事说内核,问答式导读,生活式比喻,表格化说明,图形化展示,多站点每日同步更新
[
<
OSCHINA
](
https://my.oschina.net/u/3751245/blog/4626852
)[
| CSDN
]
(https://blog.csdn.net/kuangyufei/article/details/108727970)
[
| WeH
armony >
](
https://weharmony.gitee.io/
)
百篇博客分析 >> 故事说内核,问答式导读,生活式比喻,表格化说明,图形化展示,多站点每日同步更新
[
<
oschina
](
https://my.oschina.net/u/3751245/blog/4626852
)[
| csdn
]
(https://blog.csdn.net/kuangyufei/article/details/108727970)
[
| weh
armony >
](
https://weharmony.gitee.io/
)
...
...
arch/arm/arm/src/include/los_hw_pri.h
浏览文件 @
69b09483
/*
* Copyright (c) 2013-2019, Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020, Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _LOS_HW_PRI_H
#define _LOS_HW_PRI_H
#include "los_base.h"
#include "los_hw.h"
#include "los_process_pri.h"
#include "los_signal.h"
#ifdef __cplusplus
#if __cplusplus
extern
"C"
{
#endif
/* __cplusplus */
#endif
/* __cplusplus */
#if defined(LOSCFG_ARCH_FPU_VFP_D16)
#define FP_REGS_NUM 16
#elif defined (LOSCFG_ARCH_FPU_VFP_D32)
#define FP_REGS_NUM 32
#endif
#define GEN_REGS_NUM 13
/* The size of this structure must be smaller than or equal to the size specified by OS_TSK_STACK_ALIGN (16 bytes). */
typedef
struct
{
#if !defined(LOSCFG_ARCH_FPU_DISABLE)
UINT64
D
[
FP_REGS_NUM
];
/* D0-D31 */
UINT32
regFPSCR
;
/* FPSCR */
UINT32
regFPEXC
;
/* FPEXC */
#endif
UINT32
resved
;
/* It's stack 8 aligned */
UINT32
regPSR
;
UINT32
R
[
GEN_REGS_NUM
];
/* R0-R12 */
UINT32
SP
;
/* R13 */
UINT32
LR
;
/* R14 */
UINT32
PC
;
/* R15 */
}
TaskContext
;
typedef
struct
{
#if !defined(LOSCFG_ARCH_FPU_DISABLE)
UINT64
D
[
FP_REGS_NUM
];
/* D0-D31 */
UINT32
regFPSCR
;
/* FPSCR */
UINT32
regFPEXC
;
/* FPEXC */
#endif
UINT32
resved
;
TASK_IRQ_CONTEXT
}
TaskIrqContext
;
/*
* Description : task stack initialization
* Input : taskID -- task ID
* stackSize -- task stack size
* topStack -- stack top of task (low address)
* Return : pointer to the task context
*/
extern
VOID
*
OsTaskStackInit
(
UINT32
taskID
,
UINT32
stackSize
,
VOID
*
topStack
,
BOOL
initFlag
);
extern
VOID
OsUserCloneParentStack
(
LosTaskCB
*
childTaskCB
,
LosTaskCB
*
parentTaskCB
);
extern
VOID
OsUserTaskStackInit
(
TaskContext
*
context
,
TSK_ENTRY_FUNC
taskEntry
,
UINTPTR
stack
);
extern
void
arm_clean_cache_range
(
UINTPTR
start
,
UINTPTR
end
);
extern
void
arm_inv_cache_range
(
UINTPTR
start
,
UINTPTR
end
);
#ifdef __cplusplus
#if __cplusplus
}
#endif
/* __cplusplus */
#endif
/* __cplusplus */
#endif
/* _LOS_HW_PRI_H */
/*
* Copyright (c) 2013-2019, Huawei Technologies Co., Ltd. All rights reserved.
* Copyright (c) 2020, Huawei Device Co., Ltd. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _LOS_HW_PRI_H
#define _LOS_HW_PRI_H
#include "los_base.h"
#include "los_hw.h"
#include "los_process_pri.h"
#include "los_signal.h"
#ifdef __cplusplus
#if __cplusplus
extern
"C"
{
#endif
/* __cplusplus */
#endif
/* __cplusplus */
#if defined(LOSCFG_ARCH_FPU_VFP_D16)
#define FP_REGS_NUM 16
#elif defined (LOSCFG_ARCH_FPU_VFP_D32)
#define FP_REGS_NUM 32
#endif
#define GEN_REGS_NUM 13
/* The size of this structure must be smaller than or equal to the size specified by OS_TSK_STACK_ALIGN (16 bytes). */
typedef
struct
{
#if !defined(LOSCFG_ARCH_FPU_DISABLE)
UINT64
D
[
FP_REGS_NUM
];
/* D0-D31 */
UINT32
regFPSCR
;
/* FPSCR */
UINT32
regFPEXC
;
/* FPEXC */
#endif
UINT32
resved
;
/* It's stack 8 aligned */
UINT32
regPSR
;
UINT32
R
[
GEN_REGS_NUM
];
/* R0-R12 */
UINT32
SP
;
/* R13 */
UINT32
LR
;
/* R14 */
UINT32
PC
;
/* R15 */
}
TaskContext
;
typedef
struct
{
//任务中断上下文
#if !defined(LOSCFG_ARCH_FPU_DISABLE)
UINT64
D
[
FP_REGS_NUM
];
/* D0-D31 */
UINT32
regFPSCR
;
/* FPSCR */
UINT32
regFPEXC
;
/* FPEXC */
#endif
UINT32
resved
;
TASK_IRQ_CONTEXT
}
TaskIrqContext
;
/*
* Description : task stack initialization
* Input : taskID -- task ID
* stackSize -- task stack size
* topStack -- stack top of task (low address)
* Return : pointer to the task context
*/
extern
VOID
*
OsTaskStackInit
(
UINT32
taskID
,
UINT32
stackSize
,
VOID
*
topStack
,
BOOL
initFlag
);
extern
VOID
OsUserCloneParentStack
(
LosTaskCB
*
childTaskCB
,
LosTaskCB
*
parentTaskCB
);
extern
VOID
OsUserTaskStackInit
(
TaskContext
*
context
,
TSK_ENTRY_FUNC
taskEntry
,
UINTPTR
stack
);
extern
void
arm_clean_cache_range
(
UINTPTR
start
,
UINTPTR
end
);
extern
void
arm_inv_cache_range
(
UINTPTR
start
,
UINTPTR
end
);
#ifdef __cplusplus
#if __cplusplus
}
#endif
/* __cplusplus */
#endif
/* __cplusplus */
#endif
/* _LOS_HW_PRI_H */
arch/arm/arm/src/los_dispatch.S
浏览文件 @
69b09483
...
...
@@ -324,7 +324,7 @@ OsIrqFromKernel: @从内核发起中断
ADD
SP
,
SP
,
#
4
@
sp
=
sp
+
4
OsIrqContextRestore
:
@
中断环境恢复
OsIrqContextRestore
:
@
恢复硬中断环境
LDR
R0
,
[
SP
,
#(
4
*
7
)]
@
读取
SP
+
28
位置数据给
R0
MSR
SPSR_cxsf
,
R0
@
恢复
spsr
AND
R0
,
R0
,
#
CPSR_MASK_MODE
...
...
arch/arm/arm/src/los_hw_exc.S
浏览文件 @
69b09483
...
...
@@ -190,7 +190,7 @@ _osExceptSwiHdl: @软中断异常处理
STMFD
R3
!,
{
R4
}
@
Save
the
CPSR
and
r15
(
pc
)
保存
LR
寄存器
STMFD
R3
,
{
R13
,
R14
}^
@
Save
user
mode
r13
(
sp
)
and
r14
(
lr
)
保存用户模式下的
SP
和
LR
寄存器
SUB
SP
,
SP
,
#
4
PUSH_FPU_REGS
R1
PUSH_FPU_REGS
R1
@
保存中断模式
(
用户模式模式
)
MOV
FP
,
#
0
@
Init
frame
pointer
CPSIE
I
@
开中断
,
表明在系统调用期间可响应中断
...
...
@@ -208,7 +208,7 @@ _osExceptSwiHdl: @软中断异常处理
LDMFD
SP
!,
{
R0
-
R12
}
@
恢复
R0
-
R12
寄存器
LDMFD
SP
,
{
R13
,
R14
}^
@
Restore
user
mode
R13
/
R14
恢复用户模式的
R13
/
R14
寄存器
ADD
SP
,
SP
,
#(
2
*
4
)
@
定位到保存旧
PC
值的位置
LDMFD
SP
!,
{PC}
^
@
Return
to
user
弹出值给
PC
寄存器
LDMFD
SP
!,
{PC}
^
@
Return
to
user
切回用户模式运行
OsKernelSVCHandler
:
ADD
R0
,
SP
,
#(
4
*
16
)
@
R0
=
sp
+
64
...
...
arch/arm/arm/src/los_hwi.c
浏览文件 @
69b09483
...
...
@@ -161,7 +161,7 @@ VOID OsInterrupt(UINT32 intNum)//中断实际处理函数
*
intCnt
=
*
intCnt
+
1
;
#ifdef LOSCFG_CPUP_INCLUDE_IRQ //开启查询系统CPU的占用率的中断
OsCpupIrqStart
();
//
开始统计本次中断处理还是
时间
OsCpupIrqStart
();
//
记录本次中断处理开始
时间
#endif
#ifdef LOSCFG_KERNEL_TICKLESS
...
...
@@ -191,7 +191,7 @@ VOID OsInterrupt(UINT32 intNum)//中断实际处理函数
*
intCnt
=
*
intCnt
-
1
;
//@note_why 这里没看明白为什么要 -1
#ifdef LOSCFG_CPUP_INCLUDE_IRQ //开启查询系统CPU的占用率的中断
OsCpupIrqEnd
(
intNum
);
//
结束统计本次中断处理还是
时间
OsCpupIrqEnd
(
intNum
);
//
记录中断处理时间完成
时间
#endif
}
//申请内核空间拷贝硬中断参数
...
...
arch/arm/arm/src/startup/reset_vector_mp.S
浏览文件 @
69b09483
...
...
@@ -112,7 +112,7 @@ __exception_handlers:
/
*
Startup
code
which
will
get
the
machine
into
supervisor
mode
*/
.
global
reset_vector
.
type
reset_vector
,
function
reset_vector
:
reset_vector
:
//鸿蒙开机代码
/
*
clear
register
TPIDRPRW
*/
mov
r0
,
#
0
@
r0
=
0
mcr
p15
,
0
,
r0
,
c13
,
c0
,
4
@
c0
,
c13
=
0
,
C13
为进程标识符
含义见
ARM720T
.
PDF
第
64
页
...
...
kernel/base/ipc/los_signal.c
浏览文件 @
69b09483
...
...
@@ -623,7 +623,7 @@ void OsSaveSignalContext(unsigned int *sp)
SCHEDULER_UNLOCK
(
intSave
);
}
//发生硬中断时,需保存用户态的用户栈现场,多了一个参数 R7寄存器
//汇编调用 见于 los_dispatch.S | 254行: BL OsSaveSignalContextIrq
//汇编调用 见于 los_dispatch.S | 254行: BL
OsSaveSignalContextIrq
void
OsSaveSignalContextIrq
(
unsigned
int
*
sp
,
unsigned
int
r7
)
{
UINTPTR
sigHandler
;
...
...
@@ -632,14 +632,14 @@ void OsSaveSignalContextIrq(unsigned int *sp, unsigned int r7)
sig_cb
*
sigcb
=
NULL
;
unsigned
long
cpsr
;
UINT32
intSave
;
TaskIrqContext
*
context
=
(
TaskIrqContext
*
)(
sp
);
TaskIrqContext
*
context
=
(
TaskIrqContext
*
)(
sp
);
//汇编设置好SP位置
OS_RETURN_IF_VOID
(
sp
==
NULL
);
cpsr
=
context
->
CPSR
;
OS_RETURN_IF_VOID
(((
cpsr
&
CPSR_MASK_MODE
)
!=
CPSR_USER_MODE
));
//必须在用户模式下保存用户栈信息
SCHEDULER_LOCK
(
intSave
);
task
=
OsCurrTaskGet
();
task
=
OsCurrTaskGet
();
//获取当前任务
process
=
OsCurrProcessGet
();
sigcb
=
&
task
->
sig
;
if
((
sigcb
->
context
.
count
==
0
)
&&
((
sigcb
->
sigFlag
!=
0
)
||
(
process
->
sigShare
!=
0
)))
{
...
...
@@ -656,9 +656,9 @@ void OsSaveSignalContextIrq(unsigned int *sp, unsigned int r7)
OsProcessExitCodeSignalSet
(
process
,
signo
);
(
VOID
)
memcpy_s
(
&
sigcb
->
context
.
R0
,
sizeof
(
TaskIrqDataSize
),
&
context
->
R0
,
sizeof
(
TaskIrqDataSize
));
//note_why 为何此处和OsSaveSignalContext的处理不一致?
sigcb
->
context
.
R7
=
r7
;
context
->
PC
=
sigHandler
;
context
->
R0
=
signo
;
context
->
R1
=
(
UINT32
)(
UINTPTR
)
sigcb
->
sigunbinfo
.
si_value
.
sival_ptr
;
context
->
PC
=
sigHandler
;
//入口函数
context
->
R0
=
signo
;
//参数1
context
->
R1
=
(
UINT32
)(
UINTPTR
)
sigcb
->
sigunbinfo
.
si_value
.
sival_ptr
;
//参数2
/* sig No bits 00000100 present sig No 3, but 1<< 3 = 00001000, so signo needs minus 1 */
sigcb
->
sigFlag
^=
1ULL
<<
(
signo
-
1
);
sigcb
->
context
.
count
++
;
...
...
kernel/user/src/los_user_init.c
浏览文件 @
69b09483
...
...
@@ -40,20 +40,21 @@ LITE_USER_SEC_RODATA STATIC CHAR *g_initPath = "/bin/init";//由Init_lite在编
//将 sys_call3 链接在 section(".user.text")段
LITE_USER_SEC_TEXT
STATIC
UINT32
sys_call3
(
UINT32
nbr
,
UINT32
parm1
,
UINT32
parm2
,
UINT32
parm3
)
{
register
UINT32
reg7
__asm__
(
"r7"
)
=
(
UINT32
)(
nbr
);
//给寄存器直接赋值
register
UINT32
reg2
__asm__
(
"r2"
)
=
(
UINT32
)(
parm3
);
register
UINT32
reg1
__asm__
(
"r1"
)
=
(
UINT32
)(
parm2
);
register
UINT32
reg0
__asm__
(
"r0"
)
=
(
UINT32
)(
parm1
);
register
UINT32
reg7
__asm__
(
"r7"
)
=
(
UINT32
)(
nbr
);
//系统调用号给了R7寄存器
register
UINT32
reg2
__asm__
(
"r2"
)
=
(
UINT32
)(
parm3
);
//R2 = 参数3
register
UINT32
reg1
__asm__
(
"r1"
)
=
(
UINT32
)(
parm2
);
//R1 = 参数2
register
UINT32
reg0
__asm__
(
"r0"
)
=
(
UINT32
)(
parm1
);
//R0 = 参数1
//SVC指令会触发一个“特权调用”异常。这为非特权软件调用操作系统或其他只能在PL1级别访问的系统组件提供了一种机制。
__asm__
__volatile__
(
"svc %1"
//管理模式(svc) [10011]:操作系统使用的保护模式
:
"=r"
(
reg0
)
:
"=r"
(
reg0
)
//输出寄存器为R0
:
"i"
(
SYS_CALL_VALUE
),
"r"
(
reg7
),
"r"
(
reg0
),
"r"
(
reg1
),
"r"
(
reg2
)
:
"memory"
,
"r14"
);
return
reg0
;
//相当于执行了 reset_vector_mp.S 中的 向量表0x08对应的 _osExceptSwiHdl
return
reg0
;
//reg0的值将在汇编中改变.
}
LITE_USER_SEC_ENTRY
VOID
OsUserInit
(
VOID
*
args
)
...
...
platform/hw/arm/interrupt/gic/gic_v3.c
浏览文件 @
69b09483
...
...
@@ -463,7 +463,7 @@ VOID HalIrqHandler(VOID)
}
g_curIrqNum
=
vector
;
//记录当前中断号
OsInterrupt
(
vector
);
OsInterrupt
(
vector
);
//处理中断
GiccSetEoir
(
vector
);
}
//获取中断控制器版本
...
...
syscall/ipc_syscall.c
浏览文件 @
69b09483
...
...
@@ -56,7 +56,7 @@ IPC实现方式之消息队列:
鸿蒙liteos 支持POSIX消息队列并加入了一种自研的消息队列 liteipc,此处重点讲 posix消息队列
********************************************************/
//打开一个消息队列,
封装了posix接口
//打开一个消息队列,
由posix接口封装
mqd_t
SysMqOpen
(
const
char
*
mqName
,
int
openFlag
,
mode_t
mode
,
struct
mq_attr
*
attr
)
{
mqd_t
ret
;
...
...
syscall/los_syscall.c
浏览文件 @
69b09483
...
...
@@ -98,6 +98,7 @@ void SyscallHandleInit(void)
SYSCALL是产生系统调用时触发的信号,R7寄存器存放具体的系统调用ID,也叫系统调用号
regs:参数就是所有寄存器
注意:本函数在用户态和内核态下都可能被调用到
//MOV R0, SP @获取SP值,R0将作为OsArmA32SyscallHandle的参数
******************************************************************/
LITE_OS_SEC_TEXT
UINT32
*
OsArmA32SyscallHandle
(
UINT32
*
regs
)
{
...
...
@@ -124,8 +125,8 @@ LITE_OS_SEC_TEXT UINT32 *OsArmA32SyscallHandle(UINT32 *regs)
regs
[
REG_R0
]
=
-
ENOSYS
;
return
regs
;
}
//regs[0-6] 记录系统调用的参数
switch
(
nArgs
)
{
//regs[0-6] 记录系统调用的参数
,这也是由R7寄存器保存系统调用号的原因
switch
(
nArgs
)
{
//参数的个数
case
ARG_NUM_0
:
case
ARG_NUM_1
:
ret
=
(
*
(
SyscallFun1
)
handle
)(
regs
[
REG_R0
]);
//执行系统调用,类似 SysUnlink(pathname);
...
...
@@ -139,13 +140,12 @@ LITE_OS_SEC_TEXT UINT32 *OsArmA32SyscallHandle(UINT32 *regs)
ret
=
(
*
(
SyscallFun5
)
handle
)(
regs
[
REG_R0
],
regs
[
REG_R1
],
regs
[
REG_R2
],
regs
[
REG_R3
],
regs
[
REG_R4
]);
break
;
default:
default:
//7个参数的情况
ret
=
(
*
(
SyscallFun7
)
handle
)(
regs
[
REG_R0
],
regs
[
REG_R1
],
regs
[
REG_R2
],
regs
[
REG_R3
],
regs
[
REG_R4
],
regs
[
REG_R5
],
regs
[
REG_R6
]);
}
regs
[
REG_R0
]
=
ret
;
//R0保存系统调用返回值
OsSaveSignalContext
(
regs
);
//保存用户栈现场
/* Return the last value of curent_regs. This supports context switches on return from the exception.
...
...
zzz/git/push.sh
浏览文件 @
69b09483
git add
-A
git commit
-m
'
硬中断汇编代码注解
git commit
-m
'
热爱是所有的理由和答案
百万汉字注解 + 百篇博客分析 => 挖透鸿蒙内核源码
https://weharmony.gitee.io
'
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录