OpenHarmony操作系统的基本构成会因配置和内核的不同而有所区别。在首次开源的部分中,以LiteOS-A为内核的L1开发部分比较典型,因此本章将以此为例进行介绍。
通过串口连接到OpenHarmony开发板后,执行命令“ls”,即可查看OpenHarmony的文件结构。OpenHarmony的文件结构如表2-1所示。
表2-1 OpenHarmony的文件结构
下面简单介绍各个目录的内容和作用。
(1)/dev:设备路径,其中包含各种各样的设备,如GPIO、SDIO、eMMC、USB等设备。
(2)/proc:伪文件系统,存储的是当前内核运行状态的一些特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行的进程信息,甚至可以通过更改其中某些文件改变内核的运行状态。
(3)/sdcard:OpenHarmony官方开发板支持自动驱动sdcard目录,即可操作其中的文件。
(4)/storage:系统、服务、App在运行过程中需要读写的一些存储数据。
(5)/userdata:用户数据存放的目录,例如图片和视频数据。
(6)/bin:可执行文件存放的目录。
(7)/etc:包含OpenHarmony的系统级配置文件,其中,os-release文件包含操作系统的发布版本信息,而init.cfg文件则包含系统自动启动的进程信息,这个文件非常重要,因此需要仔细理解。以下是该文件的部分代码展示。
经过分析上述代码可见,该代码显示了init.cfg文件由两部分组成,分别是jobs和services,其中,jobs是内核本身的启动任务,而services则是针对系统所需启动的服务及服务的配置。
jobs部分又分为pre-init、init和post-init三部分,分别对应操作系统的init函数执行前、执行中和执行后的阶段。在init部分中,OpenHarmony会按照在配置文件中的顺序执行相应的任务。需要注意的是,在当前版本的OpenHarmony中,jobs部分只支持mkdir、chmod、chown和mount命令。
services部分列出的服务,系统会监控服务的状态,其中一些关键的配置及说明如下。
当前服务进程是否为一次性进程。0值表示当前服务非一次性进程,当进程因任何原因退出时,init收到SIGCHLD信号后将重新启动该服务进程;非0值表示当前服务为一次性进程,当进程因任何原因退出时,init不会重新启动该服务进程。
当前服务是否为关键系统进程。0值表示当前服务非关键系统进程,当进程因任何原因退出时,init不会做系统复位操作;非0值表示当前服务为关键系统进程,当进程因任何原因退出时,init收到SIGCHLD信号后进行系统复位重启。
当前服务所需的权限值,根据安全子系统已支持的权限,评估所需的权限,遵循最小权限原则配置(最多可配置100个值)。