1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openharmony-startup_init

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Инициализация

Введение

Модуль инициализации запускает процессы системных служб с момента загрузки первым процессом пространства пользователя до старта первого приложения. Кроме того, этот модуль конфигурирует права доступа этих процессов во время запуска и обеспечивает их жизнеспособность после запуска их подпроцессов. В случае аномального завершения работы процесса, модуль должен перезапустить его и выполнить сброс системы для специального процесса.

Структура директорий

base/startup/init/             # модуль инициализации
├── LICENSE
└── services
    ├── include                  # заголовочные файлы для модуля инициализации
    ├── src                      # исходные файлы для модуля инициализации
    └── test                     # исходные файлы тестовых случаев для модуля инициализации
        └── unittest
vendor
└── huawei
        └── camera
                └── init_configs  # файлы конфигураций инициализации (в формате JSON, и развернутые в /etc/init.cfg после записи образа)

Ограничения На данный момент модуль инициализации применим только к устройствам малых систем ((не менее 1 МБ оперативной памяти)), например, Hi3516D V300 и Hi3518E V300.

Использование

Модуль инициализации делит начальную загрузку системы на три этапа:

до-инициализация: операции, необходимые перед запуском системных служб, например, монтирование файловой системы, создание каталога и изменение прав доступа;

инициализация: операции, необходимые для запуска системных служб;

после-инициализация: операции, необходимые после запуска системных служб.

В файле init.cfg каждый из вышеупомянутых этапов представлен задачей, которая соответствует набору команд. Модуль init_lite инициализирует систему путём последовательного выполнения команд каждой задачи. Задачи выполняются в следующем порядке: до-инициализация > инициализация > после-инициализация. Все задачи хранятся в массиве jobs файла init.cfg. Кроме массива jobs, файл init.cfg также предоставляет массив services, который используется для хранения названий, путей исполняемых файлов, прав доступа и других атрибутов ключевых системных служб, которые должны быть запущены процессом init.

Файл хранится в директории /vendor/hisilicon/hispark_aries/init_configs/ внутри /etc/. Он имеет формат JSON, и его размер не может превышать OnClickListener 100 КБ.Формат и содержание файла init.cfg следующие:

{
    "jobs": [{
            "name": "pre-init",
            "cmds": [
                "mkdir /testdir",
                "chmod 0700 /testdir",
                "chown 99 99 /testdir",
                "mkdir /testdir2",
                "mount vfat /dev/mmcblk0p0 /testdir2 noexec nosuid"
            ]
        },
        {
            "name": "init",
            "cmds": [
                "start service1",
                "start service2"
            ]
        },
        {
            "name": "post-init",
            "cmds": []
        }
    ],
    "services": [{
            "name": "service1",
            "path": "/bin/process1",
            "uid": 1,
            "gid": 1,
            "secon": "u:r:untrusted_app:s0",
            "once": 0,
            "importance": 1,
            "caps": [0, 1, 2, 5]
        },
        {
            "name": "service2",
            "path": "/bin/process2",
            "uid": 2,
            "gid": 2,
            "secon": "u:r:untrusted_app:s0",
            "once": 1,
            "importance": 0,
            "caps": []
        }
    ]
}
```**Таблица 1** Описание задач<a name="table1801509284"></a>

<table>
<thead align="left">
<tr id="row680703289">
<th class="cellrowborder" valign="top" width="13.4%" id="mcps1.2.3.1.1">
<p id="p11805012282"><a name="p11805012282"></a><a name="p11805012282"></a>Название задачи</p>
</th>
<th class="cellrowborder" valign="top" width="86.6%" id="mcps1.2.3.1.2">
<p id="p2811605289"><a name="p2811605289"></a><a name="p2811605289"></a>Описание</p>
</th>
</tr>
</thead>
<tbody>
<tr id="row178140112810">
<td class="cellrowborder" valign="top" width="13.4%" headers="mcps1.2.3.1.1">
<p id="p6811809281"><a name="p6811809281"></a><a name="p6811809281"></a>pre-init</p>
</td>
<td class="cellrowborder" valign="top" width="86.6%" headers="mcps1.2.3.1.2">
<p id="p18115019284"><a name="p18115019284"></a><a name="p18115019284"></a>Задача, выполняемая первой. В этой задаче выполняются операции (например, создание папки), необходимые до запуска процесса.</p>
</td>
</tr>
<tr id="row381120182817">
<td class="cellrowborder" valign="top" width="13.4%" headers="mcps1.2.3.1.1">
<p id="p148116002812"><a name="p148116002812"></a><a name="p148116002812"></a>init</p>
</td>
<td class="cellrowborder" valign="top" width="86.6%" headers="mcps1.2.3.1.2">
<p id="p14818016288"><a name="p14818016288"></a><a name="p14818016288"></a>Задача, выполняемая между другими. В этой задаче выполняются операции (например, запуск службы).</p>
</td>
</tr>
<tr id="row181100162813">
<td class="cellrowborder" valign="top" width="13.4%" headers="mcps1.2.3.1.1">
<p id="p3811804281"><a name="p3811804281"></a><a name="p3811804281"></a>post-init</p>
</td>
<td class="cellrowborder" valign="top" width="86.6%" headers="mcps1.2.3.1.2">
<p id="p18116016285"><a name="p18116016285"></a><a name="p18116016285"></a>Задача, выполняемая последней. В этой задаче выполняются операции (например, монтирование устройства после инициализации драйвера), необходимые после запуска процесса.</p>
</td>
</tr>
</tbody>
</table></table>Одна задача может содержать максимум 30 команд  настоящее время поддерживаются только **start**, **mkdir**, **chmod**, **chown**, **mount** и **loadcfg**). Имя команды и ее параметры (не более 128 байт) должны разделаться только одним пробелом.**Таблица 2** Поддерживаемые команды в задаче<a name="table122681439144112"></a>
<table>
<thead align="left">
<tr id="row826873984116">
<th class="cellrowborder" valign="top" width="10.15%" id="mcps1.2.4.1.1">
<p id="p826833919412"><a name="p826833919412"></a><a name="p826833919412"></a>Команда</p>
</th>
<th class="cellrowborder" valign="top" width="34.09%" id="mcps1.2.4.1.2">
<p id="p3381142134118"><a name="p3381142134118"></a><a name="p3381142134118"></a>Формат и пример</p>
</th>
<th class="cellrowborder" valign="top" width="55.76%" id="mcps1.2.4.1.3">
<p id="p1268539154110"><a name="p1268539154110"></a><a name="p1268539154110"></a>Описание</p>
</th>
</tr>
</thead>
<tbody>
<tr id="row142681039124116">
<td class="cellrowborder" valign="top" width="10.15%" headers="mcps1.2.4.1.1">
<p id="p2083714604313"><a name="p2083714604313"></a><a name="p2083714604313"></a>mkdir</p>
</td>
<td class="cellrowborder" valign="top" width="34.09%" headers="mcps1.2.4.1.2">
<p id="p143811842154111"><a name="p143811842154111"></a><a name="p143811842154111"></a>mkdir <em id="i59061027135319"><a name="i59061027135319"></a><a name="i59061027135319"></a>целевой_каталог</em></p>
<p id="p4377174213435"><a name="p4377174213435"></a><a name="p4377174213435"></a>Пример: mkdir /storage/myDirectory</p>
</td>
<td class="cellrowborder" valign="top" width="55.76%" headers="mcps1.2.4.1.3">
<p id="p56817536457"><a name="p56817536457"></a><a name="p56817536457"></a>Создает каталог. Команда <strong id="b1111653719537"><a name="b1111653719537"></a><a name="b1111653719537"></a>mkdir</strong> и целевой каталог должны быть разделены только одним пробелом.</p>
</td>
</tr>
<tr id="row1268133919413">
<td class="cellrowborder" valign="top" width="10.15%" headers="mcps1.2.4.1.1">
<p id="p97961563461"><a name="p97961563461"></a><a name="p97961563461"></a>chmod</p>
</td>
<td class="cellrowborder" valign="top" width="34.09%" headers="mcps1.2.4.1.2">
<p id="p20381144234118"><a name="p20381144234118"></a><a name="p20381144234118"></a>chmod <em id="i15124416538"><a name="i15124416538"></a><a name="i15124416538"></a>разрешение</em> <em id="i1056644195314"><a name="i1056644195314"></a><a name="i1056644195314"></a>целевой_объект</em></p>
<td class="cellrowborder" valign="top" width="55.76%" headers="mcps1.2.4.1.3">
<p id="p1268133919413">Устанавливает права доступа для файла или директории. Разрешение должно быть указано в виде цифрового значения или символьной строки.</p>
</td>
</tr>
</tbody>
</table><table>
 <tbody>
 <tr>
 <td class="cellrowborder" valign="top" width="44. 24%">
 <p id="p6334213124413"><a name="p6334213124413"></a><a name="p6334213124413"></a>Примеры: chmod 0600 /storage/myFile.txt</p>
 <p id="p1748214543444"><a name="p1748214543444"></a><a name="p1748214543444"></a>chmod 0750 /storage/myDir</p>
 </td>
 <td class="cellrowborder" valign="top" width="55. 76%" headers="mcps1. 2. 4. 1. 3">
 <p id="p1748214543444"><a name="p1748214543444"></a><a name="p1748214543444"></a>Изменяет права доступа к файлам и директориям. Команда <strong id="b1111653719537"><a name="b1111653719537"></a><a name="b1111653719537"></a>chmod</strong> принимает два аргумента: первым указывается число, представляющее собой набор битовых значений прав доступа, вторым  путь к файлу или директории.</p>
 <p id="p2023822074614"><a name="p2023822074614"></a><a name="p2023822074614"></a>Изменяет права доступа, которые должны быть в формате <strong id="b8112193214139"><a name="b8112193214139"></a><a name="b8112193214139"></a>0<em id="i11455534181314"><a name="i11455534181314"></a><a name="i11455534181314"></a>xxx</em></strong>. Команда <strong id="b2675148175310"><a name="b2675148175310"></a><a name="b2675148175310"></a>chmod</strong>, аргумент <em id="i46798488538"><a name="i46798488538"></a><a name="i46798488538"></a>permission</em> и целевой объект <em id="i667944825318"><a name="i667944825318"></a><a name="i667944825318"></a>target</em> должны быть разделены только одним пробелом.</p>
 </td>
 </tr>
 </tbody>
</table><tr id="row7268143918416">
<td class="cellrowborder" valign="top" width="10.15%" headers="mcps1.2.4.1.1">
<p id="p8255346174610"><a name="p8255346174610"></a><a name="p8255346174610"></a>chown</p>
</td>
<td class="cellrowborder" valign="top" width="34.089999999999996%" headers="mcps1.2.4.1.2">
<p id="p238114423418"><a name="p238114423418"></a><a name="p238114423418"></a>chown uid gid <em id="i161565145312">целевой_объект</em></p>
<p id="p1118592184518"><a name="p1118592184518"></a><a name="p1118592184518"></a>Пример: chown 900 800 /storage/myDir</p>
<p id="p1235374884510"><a name="p1235374884510"></a><a name="p1235374884510"></a>chown 100 100 /storage/myFile.txt</p>
</td>
<td class="cellrowborder" valign="top" width="55.76%" headers="mcps1.2.4.1.3">
<p id="p18408185817467"><a name="p18408185817467"></a><a name="p18408185817467"></a>Изменяет владельца и группу. Команда <strong id="b19641958195310">chown</strong>, аргумент <strong id="b15698584534">uid</strong>, аргумент <strong id="b1692058135310">gid</strong> и целевой объект <em id="i56935885316">target</em> должны быть разделены только одним пробелом.</p>
</td>
</tr>```markdown
<tr id="row109751379478">
<td class="cellrowborder" valign="top" width="10.15%" headers="mcps1.2.4.1.1">
<p id="p1017823174717"><a name="p1017823174717"></a><a name="p1017823174717"></a>mount</p>
</td>
</tr>
<tr id="row1334911198482">
<td class="cellrowborder" valign="top" width="10.15%" headers="mcps1.2.4.1.1">
<p id="p1214153117480"><a name="p1214153117480"></a><a name="p1214153117480"></a>mount</p>
</td>
<td class="cellrowborder" valign="top" width="34.09%" headers="mcps1.2.4.1.2">
<p id="p133816420411"><a name="p133816420411"></a><a name="p133816420411"></a>mount fileSystemType src dst flags data</p>
<p id="p2036714132541"><a name="p2036714132541"></a><a name="p2036714132541"></a>Пример: mount vfat /dev/mmcblk0 /sdc rw,umask=000</p>
<p id="p115951820185412"><a name="p115951820185412"></a><a name="p115951820185412"></a>Пример: mount jffs2 /dev/mtdblock3 /storage nosuid</p>
</td>
<td class="cellrowborder" valign="top" width="55.76%" headers="mcps1.2.4.1.3">
<p id="p11976107144710"><a name="p11976107144710"></a><a name="p11976107144710"></a>Монтирует устройство. Каждые два параметра должны быть разделены только одним пробелом. В настоящее время поддерживаются флаги <strong id="b5512525411"><a name="b5512525411"></a><a name="b5512525411"></a>nodev</strong>, <strong id="b41014514541"><a name="b41014514541"></a><a name="b41014514541"></a>noexec</strong>, <strong id="b5101152543"><a name="b5101152543"></a><a name="b5101152543"></a>nosuid</strong>, <strong id="b20103555419"><a name="b20103555419"></a><a name="b20103555419"></a>rdonly</strong>, а также опционально <strong id="b41045175420"><a name="b41045175420"></a><a name="b41045175420"></a>data</strong>.</p>
</td>
</tr>
<tr id="row1334911198482">
<td class="cellrowborder" valign="top" width="10.15%" headers="mcps1.2.4.1.1">
<p id="p1214153117480"><a name="p1214153117480"></a><a name="p1214153117480"></a>start</p>
</td>

start serviceName

Пример: start foundation

start shell

Запускает службу. serviceName должно находиться в массиве services.

Извините за возможную путаницу, но выше представлен перевод только первой строки команды start. Давайте продолжим с остальной частью:```markdown

mount

mount fileSystemType src dst flags data

Пример: mount vfat /dev/mmcblk0 /sdc rw,umask=000

Пример: mount jffs2 /dev/mtdblock3 /storage nosuid

Монтирует устройства. Каждые два параметра должны быть разделены только одним пробелом. В настоящее время поддерживаются флаги nodev, noexec, nosuid, rdonly, а также опционально data.

``````markdown

start

start serviceName

...

loadcfg путь_файла

Пример: loadcfg /patch/fstab.cfg

Загружает другие .cfg файлы. Максимальный размер целевого файла (в настоящее время поддерживаются только /patch/fstab.cfg) составляет 50 КБ. Каждая строка в файле /patch/fstab.cfg представляет команду. Типы и форматы команд должны соответствовать требованиям, указанным в этой таблице. Разрешено максимум 20 команд.

Таблица 3. Элементы в массиве services

Поле

Описание

name

...
``` ```markdown

path

Полный путь (включая параметры) исполняемого файла для текущего сервиса. Это массив. Убедитесь, что первый элемент — это путь исполняемого файла, максимальное количество элементов — 20, а каждый элемент — это строка, содержащая максимум 64 байта.

uid

ID пользователя (UID) процесса текущего сервиса.

gid

ID группы (GID) процесса текущего сервиса.

Name of the current service. The value cannot be empty and must contain a maximum of 32 bytes.

Полный путь (включая параметры) исполняемого файла для текущего сервиса. Это массив. Убедитесь, что первый элемент — это путь исполняемого файла, максимальное количество элементов — 20, а каждый элемент — это строка, содержащая максимум 64 байта.

uid

ID пользователя (UID) процесса текущего сервиса.

gid

ID группы (GID) процесса текущего сервиса.

sec_context

Контекст безопасности (Sec Context) процесса текущего сервиса.

```

Контекст безопасности текущего сервисного процесса (в настоящее время установка не требуется).

once

Показывает, является ли текущий сервисный процесс одноразовым.

1: Текущий сервисный процесс является одноразовым. Если процесс завершается, демон init не будет его перезапускать.

0: Текущий сервисный процесс не является одноразовым. Если процесс завершается, демон init перезапустит его после получения сигнала SIGCHLD.

Примечание: Если процесс несколько раз завершается, демон init больше не будет перезапускать его после пятого завершения.

importance

Указывает, является ли текущий сервисный процесс ключевым системным процессом.

0: Текущий сервисный процесс не является ключевым системным процессом.

1: Текущий сервисный процесс является ключевым системным процессом. Если он завершается, инициализирующий процесс сбрасывает и перезапускает систему.

caps

Необходимые возможности для текущего сервиса. Они оцениваются на основе поддерживаемых возможностей безопасности подсистемы и конфигурируются в соответствии с принципом наименьших прав. В настоящее время можно настроить максимум 100 значений.

## Участвующие репозитории

Подсистема запуска

startup_syspara_lite

startup_appspawn_lite

startup_bootstrap_lite

[startup_init_lite]

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

null Развернуть Свернуть
Apache-2.0
Отмена

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/openharmony-startup_init.git
git@api.gitlife.ru:oschina-mirror/openharmony-startup_init.git
oschina-mirror
openharmony-startup_init
openharmony-startup_init
master