Я шел через учебник по настройке пользовательских initramfs, где говорится:
Единственное, чего не хватает - это / init, исполняемый файл в корне initramfs, который выполняется ядром после его загрузки. Поскольку sys-apps / busybox включает в себя полностью функциональную оболочку, это означает, что вы можете написать свой двоичный файл / init в виде простого сценария оболочки (вместо того, чтобы делать его сложным приложением, написанным на ассемблере или C, который нужно скомпилировать).
и дает пример init как сценарий оболочки, который начинается с #!/bin/busybox sh
До сих пор у меня сложилось впечатление, что init - это основной процесс, который запускается, и что все остальные процессы пользовательского пространства в конечном итоге являются потомками init. Тем не менее, в данном примере первый процесс фактически является результатом, bin/busybox/ sh
из которого позже создается init.
Это правильная интерпретация? Если бы у меня, например, был доступный интерпретатор, я мог бы написать init как скрипт Python и т. Д.?
/
не исчезает в воздухе - он монтируется (хотя обычно все его содержимое удаляется перед тем, как сохранить память) . Это все еще там .switch_root
выполняет системный вызовswitchroot
- это то, что разработчики ядра предоставили, когда они изменили процесс загрузки в ядре 2.6. Что-то требующее initramfs. Это ядро делает магию.