Процесс загрузки OpenWRT крайне схож с процессом загрузки персонального компьютера, работающего под управлением Linux или UNIX. Он может быть разделен на три этапа.
Системный загрузчик является специальной программой, которая предназначена для начальной загрузки устройства. В Linux-системах в качестве системного загрузчика используется программа GRUB 2, которая разбирает параметры загрузки и выводит системное меню. После завершения начальной загрузки системный загрузчик передает управление ядру Linux.
В случае OpenWRT процесс загрузки выглядит следующим образом:
init=
(по умолчанию параметром является /etc/preinit
).После завершения работы системного загрузчика управление передается ядру Linux (Linux Kernel). Оно выполняет следующие операции:
start_kernel
./etc
) в точку монтирования /rom
в случае его нахождения./etc/preinit
для осуществления предварительной инициализации (создание системных директорий, монтирование файловых систем /proc
, /sys
и так далее)./etc/preinit
запускает сценарий /etc/mount_root
, который монтирует другую файловую систему JFFS2 в точку монтирования /overlay
и комбинирует ее с ранее смонтированной в точку монтирования /rom
файловой системой SquashFS для формирования корневой файловой системы /
.INITRAMFS
инициирует запуск процесса /sbin/init
(родительский процесс для всех процессов в пространстве пользователя).На персональных компьютерах в качестве системы инициализации чаще всего используется набор программ Systemd, в то время, как в OpenWRT для тех же целей используется проверенный временем набор сценариев командной оболочки. Первый сценарий системы инициализации запускается ядром Linux для последующего запуска системных процессов, не относящихся к нему. Пространство пользователя становится доступным после монтирования ядром Linux корневой файловой системы и запуска первого процесса пространства пользователя (по умолчанию /sbin/init
). Интерфейсом между пространствами ядра и пользователя являются функции библиотеки языка C и системные вызовы.
Сценарий системы инициализации считается родителем всех процессов пространства пользователя, так как он позволяет запускать демоны, изменять уровни исполнения, работать с терминалами/псевдотерминалами и так далее.
В OpenWRT система инициализации выполняет следующие операции:
init
читает файл /etc/inittab
в поисках записи sysinit
(по умолчанию "::sysinit:/etc/init.d/rcS S boot"
)./etc/init.d/rcS S boot
.rcS
переходит по символьным ссылкам и исполняет реальные сценарии инициализации с именами /etc/rc.d/S##xxxxxx
с параметром start
.rcS
система должна находиться в рабочем состоянии.