Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
44c9c713
D
Docs
项目概览
OpenHarmony
/
Docs
1 年多 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
44c9c713
编写于
2年前
作者:
M
Mupceet
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add: another way to get information
Signed-off-by:
N
Mupceet
<
laiguizhong@huawei.com
>
上级
518ab8de
无相关合并请求
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
23 addition
and
7 deletion
+23
-7
zh-cn/device-dev/subsystems/subsys-boot-overview.md
zh-cn/device-dev/subsystems/subsys-boot-overview.md
+23
-7
未找到文件。
zh-cn/device-dev/subsystems/subsys-boot-overview.md
浏览文件 @
44c9c713
...
...
@@ -154,18 +154,20 @@
所谓required分区,就是系统启动引导过程的必要分区,必须在二级启动开始前进行挂载。比如system、vendor等必选镜像,挂载这些镜像前,需要先创建对应的块设备文件。这些块设备文件是通过内核上报UEVENT事件来创建的。init需要知道存储器的主设备目录,需要bootloader通过default_boot_device传递。
目前init支持两种方式获取required分区信息,一是通过保存在/proc/cmdline中的bootargs,init会首先尝试从cmdline读取required分区信息;二是通过读取ramdisk中的fstab.required文件,只有在前一种方式获取失败的情况下才会尝试通过这种方式获取。
- 块设备的创建逻辑
- 准备工作
1. init
会读取fstab.required中的内容,
获取必须挂载的块设备的PARTNAME,例如system和vendor.
1. init
从cmdline中读取required fstab,若获取失败,则尝试读fstab.required文件,从中
获取必须挂载的块设备的PARTNAME,例如system和vendor.
2. 创建接收内核上报uevent事件广播消息的socket,从/proc/cmdline里读取default_boot_device。
3. 带着fstab信息和socket句柄遍历/sys/devices目录,准备开始触发内核上报uevent事件。
- 触发事件
1. 通过ueventd触发内核上报uevent事件
2. 匹配uevent事件中的partitionName与
从fstab.required中读取
的device信息。
2. 匹配uevent事件中的partitionName与
required fstab中
的device信息。
3. 匹配成功后将会进一步处理,格式化设备节点路径,准备开始创建设备节点。
- 创建节点
...
...
@@ -183,18 +185,32 @@
- 实例
下面以OpenHarmony系统在Hi3516DV300平台启动过程中必要的system分区为例,详细介绍init进程启动后,从读取
fstab.required文件
到创建required分区块设备节点再到最后完成required分区挂载的全部流程。其中会包含一些关键代码段和关键的log信息供开发者调试参考。
下面以OpenHarmony系统在Hi3516DV300平台启动过程中必要的system分区为例,详细介绍init进程启动后,从读取
required fstab信息
到创建required分区块设备节点再到最后完成required分区挂载的全部流程。其中会包含一些关键代码段和关键的log信息供开发者调试参考。
![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
从此处开始出现的代码是按逻辑顺序展示的关键代码行,不代表其在源码当中真正的相邻关系。
1.
读取fstab文件,获得
required设备信息
1.
获取
required设备信息
```
const char *fstabFile = "/etc/fstab.required";
fstab = ReadFstabFromFile(fstabFile, false);
char **devices = GetRequiredDevices(*fstab, &requiredNum);
Fstab* LoadRequiredFstab(void)
{
Fstab *fstab = NULL;
fstab = LoadFstabFromCommandLine();
if (fstab == NULL) {
INIT_LOGI("Cannot load fstab from command line, try read from fstab.required");
const char *fstabFile = "/etc/fstab.required";
if (access(fstabFile, F_OK) != 0) {
fstabFile = "/system/etc/fstab.required";
}
INIT_ERROR_CHECK(access(fstabFile, F_OK) == 0, abort(), "Failed get fstab.required");
fstab = ReadFstabFromFile(fstabFile, false);
}
return fstab;
}
```
以上代码分别展示了获取fstab信息的两种方式,首先调用LoadFstabFromCommandLine(),从cmdline中获取fstab信息,如果获取失败,则输出log,表示继续尝试从fstab.required文件中获取fstab信息。
对于system分区来说,其读到devices中的关键信息如下所示:
```
/dev/block/platform/fe310000.sdhci/by-name/system
...
...
This diff is collapsed.
Click to expand it.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录
反馈
建议
客服
返回
顶部