在beaglebone硬件上,我想从一个带有极简busybox系统(/ dev / mmcblk0p2)的分区开始,在另外2个分区(/ dev / mmcblk0p5和/ dev / mmcblk0p6)上运行一些检查,其中包含更完整的Linux系统(Angström) ),然后根据这些测试在2个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
然后我尝试了两种方法:
ivot_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分区上
知道我做错了什么吗?我错过了一步吗?我忘记考虑的任何参数或查看发生错误的详细信息的任何方法?