Запуск 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 способа:

  1. 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 . ", И он дает те же результаты.

  2. switch_root

    exec switch_root -c /dev/ttyO0 /mnt/root /mnt/root/sbin/init
    

    Это дает мне новый запрос на вход в систему busybox, и я все еще в разделе busybox

Есть идеи, что я сделал не так? Я пропустил шаг? Любой параметр, который я забыл принять во внимание или какой-либо метод, чтобы увидеть более подробную информацию о том, что пошло не так?

0 ответов

Другие вопросы по тегам