从Busybox启动Linux(pivot_root或switch_root,还是?)

时间:2014-06-06 14:02:11

标签: linux init busybox systemd

在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

然后我尝试了两种方法:

  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”的任何调用都将返回上面的错误,并且系统不起作用(例如,如果我调用“rebo​​ot”,它会失败;如果我打电话给“killall busybox”,它会触发重启。

    我试过没有“./usr/sbin/chroot。”,它给出了相同的结果。

  2. switch_root

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

    这给了我一个新的busybox登录提示,我仍然在busybox分区

  3. 知道我做错了吗?我错过了一步吗?我忘记考虑的任何参数或任何方法,以查看有关错误的更多详细信息?

0 个答案:

没有答案