В чем разница между switch_root
и run_init
, кроме того switch_root
делается по busybox
, а run_init
- от klibc
?В чем разница между switch_root и run_init?
Большое спасибо
В чем разница между switch_root
и run_init
, кроме того switch_root
делается по busybox
, а run_init
- от klibc
?В чем разница между switch_root и run_init?
Большое спасибо
Они оба выполняют точно ту же самую функцию, которая должна перейти к «реальному» корню и execv(3)
«реальной» init(8)
программы из initramfs. Они оба предполагают, что файловая система, которая должна стать корнем, была смонтирована в какой-то директории, которую они принимают в качестве аргумента.
(An initramfs является (обычно) временная файловая система в памяти загружается загрузчиком. Его цель состоит в том, чтобы делать какие-либо настройки, которые могут потребоваться перед установкой вещественный корень и переход к реальной init
программе.)
Недавний исходный код для run-init
можно найти here. run_init()
- это точка входа (от run-init.c, которая анализирует аргументы).
Недавний исходный код для switch_root
можно найти here. switch_root_main()
- точка входа.
Код не подходит для обеих реализаций (хотя и немного сложный), что позволяет легко сравнивать их на глаз. Единственная разница, по-видимому, заключается в том, что они выполняют несколько иные проверки на работоспособность, и что в последних версиях run-init
есть дополнительная опция для удаления выбранных capabilities(7)
до execv()
'в новом init
.
Странно, я нашел несколько старых [патчей] (http://www.zytor.com/pipermail/klibc/2011-July/002980.html), которые, между прочим, переименовывают 'run_init' в 'switch_root' в klibc. Не знаете, почему они не находятся в [klibc-2.0.4] (https://www.kernel.org/pub/linux/libs/klibc/2.0/). – Ulfalizer
Есть ли что-нибудь еще, что вам интересно? – Ulfalizer
Большое спасибо @Ulfalizer – jefby