add OS/opensbi.md, update OS/Android/启动过程.md

This commit is contained in:
shzhxh 2019-05-16 16:51:33 +08:00
parent b1246eeda5
commit 7c9fd09af2
2 changed files with 31 additions and 5 deletions

View File

@ -158,11 +158,23 @@ init是第一个进程也叫root进程或所有进程的父进程。在此阶
bootmode是个全局静态变量用来标示启动模式android的启动模式分为正常开机流程和关机充电流程。
init_parse_config_file用于解析rc配置文件。
3. 触发所有的事件并不断监听新的事件
action_for_each_trigger遍历从rc文件得到的action_list链表将满足触发器的动作添加到action_queue中。一个action结构体包含4个链表一个是所有动作的链表一个是执行队列中动作的链表一个是触发器对应的动作的链表一个是命令的链表
之前的工作是建立各种各样的事件并没有去触发。只有在本while循环里才真正的触发所有的事件并用epoll不断监听新的事件
在事件循环里接收SIGCHLD信号进而通过handle_signal执行wait_for_process函数完成进程资源回收或进程重启工作。
如要执行关机命令,则通过`HandlePowerctlMessage()`来执行之。
当没有属性设置且没有Server开始运行时才通过`am.ExecuteOneCommand()`从current_executing_actions\_列表里执行一个command由于外部是一个无限循环所以current_executing_actions\_列表里的每个command都会执行一遍。这样的条件设定是为了保证属性设置和Server启动的完整性。
当没有属性设置且没有Server开始运行时
- 如系统不是正在关机,执行`restart_processes()`来判断当前Server是否需要重启如需重启则执行重启操作。
- 如有进程需要重启,设置`epoll_timeout_ms`的值
- 如有其它command需要执行则将`epoll_timeout_ms`设置为0以立即唤醒。
`epoll_wait`用于监听事件的产生,参数`epoll_fd`是由前面的`epoll_create1()`创建的epoll的文件描述符参数`ev`用于保存事件信息,参数`epoll_timeout_ms`是等待时间
如未监听到事件则向log系统添加一条监听失败的信息如监听到事件则直接执行`ev.data.ptr()`即epoll_ctl注册时的回调函数
#### step5: Zygote
@ -186,7 +198,7 @@ Zygote启动系统服务即ZygoteInit类里的startSystemServer方法。
由五类语句构成Actions, Commands, Services, Options and Imports。
从整体来看一个rc文件是由若干个段组成的。一个段有如下两种结构
从整体来看一个rc文件是由若干个段组成的。一个段只能是Actions或Server其中之一
- Actions其中Commands和trigger是对Actions的补充。
- Servers其中Options是对Servers的补充。
@ -209,6 +221,8 @@ on <trigger> [&& <trigger>]*
<command>
```
以on开头后面的trigger是判断条件(详见[Triggers](#triggers))command是具体要执行的操作。
##### Services
Services是程序它由init进程启动并且可以退出后重启(可选)。
@ -221,6 +235,8 @@ service <name> <pathname> [<argument> ]*
<option>
```
name是程序名pathname是程序所在的路径argument是程序的参数option是服务配置(详见[Options](#options))。
##### Options
Options是Services的修改器它们影响init进程如何运行service以及何时运行service。
@ -236,7 +252,7 @@ Options是Services的修改器它们影响init进程如何运行service以及
- capabilities在执行服务的时候设置capabilities.
- seclabel在执行服务前改变为seclabel。
- oneshot当服务退出后不要重启它。
- class为服务指定类
- class为服务指定所属的类。在同一个类里的服务可以同时打开或关闭。如不使用此选项明确指定服务所属的类则默认在default类里。我
- animation将会包含所有启动和关闭animation所必须的服务。
- onrestart当服务重启的时候执行一条命令。
- writepid当子进程forks的时候将其pid写到给定文件中。

10
OS/opensbi.md Normal file
View File

@ -0,0 +1,10 @@
#### OpenSBI库
OpenSBI提供了两种静态链接库
1. libsbi.a - 平台无关实现了SBI规范的接口由于不包含平台相关的部分所以必须实现与平台相关的钩子且链接到本库里。
2. libplatsbi.a - 即包括了libsbi.a也包括了平台相关的钩子。
#### 平台支持
平台支持是通过数据结构`sbi_platform`来实现的。