Здесь приведены примеры init-описаний, демонстрирующие различные аспекты запуска процессов.
Запуск клиента и сервера и создание IPC-канала между ними
В этом примере будут запущены процесс класса Client и процесс класса Server. Имена процессов не указаны, поэтому они будут совпадать с именами классов процессов. Имена исполняемых файлов также не указаны, они также будут совпадать с именами классов процессов. Процессы будут соединены IPC-каналом с именем server_connection.
init.yaml
entities:
- name: Client
connections:
- target: Server
id: server_connection
- name: Server
Запуск процессов из заданных исполняемых файлов
В этом примере будут запущены процесс класса Client из исполняемого файла с именем cl, процесс класса ClientServer из исполняемого файла с именем csr и процесс класса MainServer из исполняемого файла с именем msr. Имена процессов не указаны, поэтому они будут совпадать с именами классов процессов.
init.yaml
entities:
- name: Client
path: cl
- name: ClientServer
path: csr
- name: MainServer
path: msr
Запуск двух процессов из одного исполняемого файла
В этом примере будут запущены процесс класса Client из исполняемого файла с именем Client, а также два процесса классов MainServer и BkServer из исполняемого файла с именем srv. Имена процессов не указаны, поэтому они будут совпадать с именами классов процессов.
init.yaml
entities:
- name: Client
- name: MainServer
path: srv
- name: BkServer
path: srv
Запуск двух серверов одного класса и клиента и создание IPC-каналов между клиентом и серверами
В этом примере будут запущены процесс класса Client (с именем Client) и два процесса класса Server с именами UserServer и PrivilegedServer. Клиент будет соединен с серверами IPC-каналами с именами server_connection_us и server_connection_ps. Имена исполняемых файлов не указаны, поэтому они будут совпадать с именами классов процессов.
init.yaml
entities:
- name: Client
connections:
- id: server_connection_us
target: UserServer
- id: server_connection_ps
target: PrivilegedServer
- task: UserServer
name: Server
- task: PrivilegedServer
name: Server
Установка параметров запуска и переменных окружения программ
В этом примере будут запущены процесс класса VfsFirst (с именем VfsFirst) и процесс класса VfsSecond (с именем VfsSecond). Программа, которая будет исполняться в контексте процесса VfsFirst, будет запущена с параметром -f /etc/fstab, а также получит переменную окружения ROOTFS со значением ramdisk0,0 / ext2 0 и переменную окружения UNMAP_ROMFS со значением 1. Программа, которая будет исполняться в контексте процесса VfsSecond, будет запущена с параметром -l devfs /dev devfs 0. Имена исполняемых файлов не указаны, поэтому они будут совпадать с именами классов процессов.
init.yaml
entities:
- name: VfsFirst
args:
- -f
- /etc/fstab
env:
ROOTFS: ramdisk0,0 / ext2 0
UNMAP_ROMFS: 1
- name: VfsSecond
args:
- -l
- devfs /dev devfs 0
На аппаратных платформах с процессорными архитектурами x86 и x86-64 можно задавать параметры запуска и переменные окружения программ не только фиксированными значениями, но и ссылками на параметры запуска ядра:
${BOOTARG:<имя параметра запуска ядра>[:=<значение параметра запуска программы по умолчанию>]}Заданный параметр запуска программы принимает значение параметра запуска ядра с заданным именем. Опционально можно указать значение по умолчанию, которое применяется, если параметр запуска ядра с заданными именем не передан ядру. Если значение по умолчанию не указано, и параметр запуска ядра с заданным именем не передан ядру, то заданный параметр запуска программы не будет передан программе.
Пример:
args:
- ${BOOTARG:ROOTFS:=/opt/data}
- ${BOOTARG:test_switch}
- -f ${BOOTARG:FSTAB:=/etc/fstab}
- --message ${BOOTARG:MOTD}
- --timeout=${BOOTARG:timeout:=60}
имя переменной окружения программы>: ${BOOTARG:<имя параметра запуска ядра>[:=<значение переменной окружения программы по умолчанию>]}Переменная окружения программы с заданными именем принимает значение параметра запуска ядра с заданным именем. Опционально можно указать значение по умолчанию, которое применяется, если параметр запуска ядра с заданными именем не передан ядру. Если значение по умолчанию не указано, и параметр запуска ядра с заданным именем не передан ядру, то переменная окружения программы с заданными именем не будет создана.
Пример:
env:
rootdir: ${BOOTARG:FS:=/home}
Параметры запуска ядра, которые передаются программам в качестве параметров запуска и переменных окружения, имеют следующий формат:
<имя>=<значение>
Чтобы передать параметры через командную строку ядра на QEMU, нужно использовать параметр запуска QEMU -append.
Пример установки параметров запуска ядра на QEMU с помощью CMake-команды build_kos_qemu_image():
set(QEMU_FLAGS "-append \"ROOTFS=/opt/data test_switch=-b FSTAB=/etc/fstab MOTD=Hello! timeout=30 FS=/home\"")
build_kos_qemu_image(kos-qemu-image
...
QEMU_FLAGS "${QEMU_FLAGS}")
Для получения сведений о том, как передавать параметры через командную строку ядра на аппаратной платформе, нужно обратиться к документации на используемый загрузчик.
В начало