Запуск Linux из Busybox (pivot_root или switch_root, или?)
На оборудовании beaglebone я хочу начать с раздела с минималистичной системой busybox (/dev/mmcblk0p2), выполнить некоторые проверки на 2 других разделах (/dev/mmcblk0p5 & /dev/mmcblk0p6), содержащих более полные системы Linux (Angström)), затем запустите на одной или другой из двух систем Linux на основе этих тестов.
Проблема в том, что я не могу найти, как правильно запустить другую систему из busybox.
Что я сделал:
Из (отлично работающей) системы busybox:
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
mount -t sysfs sysfs /sys
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
mount /dev/mmcblk0p5 /mnt/root
Тогда я попробовал 2 способа:
pivot_root
cd /mnt/root pivot_root . ./initrd ./bin/mount -n --move ./initrd/sys ./sys ./bin/mount -n --move ./initrd/proc ./proc ./bin/mount -t devtmpfs none ./dev ./bin/mount -n --move ./initrd/dev/pts ./dev/pts exec ./usr/sbin/chroot . ./sbin/init < ./dev/ttyO0 > ./dev/ttyO0 2>&1
Это дает следующую ошибку:
Couldn't find an alternative telinit implementation to spawn.
Затем он запускает новое приглашение к входу в Angström, но после входа в систему любой вызов "init" вернет ошибку, описанную выше, и система не будет работать (например, если я вызываю "reboot", происходит сбой; если я вызываю "killall busybox", запускает перезагрузку).
Я пробовал без "./usr/sbin/chroot . ", И он дает те же результаты.
switch_root
exec switch_root -c /dev/ttyO0 /mnt/root /mnt/root/sbin/init
Это дает мне новый запрос на вход в систему busybox, и я все еще в разделе busybox
Есть идеи, что я сделал не так? Я пропустил шаг? Любой параметр, который я забыл принять во внимание или какой-либо метод, чтобы увидеть более подробную информацию о том, что пошло не так?