
Scripts for generating boot-to-ramdisk images are now available. These can be used for example to boot from PXE or from a USB stick, as the ramdisk are self-contained and do not rely on any block devices after being loaded into RAM. The image generation framework has also been slightly cleaned up in order to better accomodate tarball sets bundling in images. Change-Id: I65a176832bd0d6954b430fa8305f90af0bd606c1
111 lines
2.7 KiB
Bash
111 lines
2.7 KiB
Bash
#!/bin/sh
|
|
set -e
|
|
|
|
exec >/dev/log
|
|
exec 2>/dev/log
|
|
exec </dev/null
|
|
|
|
FSCK=/bin/fsck_mfs
|
|
ACPI=/service/acpi
|
|
|
|
if [ X`/bin/sysenv arch` = Xi386 ]
|
|
then if [ -e $ACPI -a -n "`sysenv acpi`" ]
|
|
then
|
|
/bin/service -c up $ACPI
|
|
fi
|
|
/bin/service -c up /service/pci -dev /dev/pci
|
|
|
|
/bin/service -c up /service/input -dev /dev/kbdmux
|
|
/bin/service -c up /service/pckbd || :
|
|
|
|
# Start procfs so we can access /proc/pci
|
|
mount -t procfs none /proc >/dev/null
|
|
|
|
# Do we want to use the virtio block device?
|
|
# If not specified, default to yes if the device is found.
|
|
if /bin/sysenv virtio_blk >/dev/null
|
|
then virtio_blk="`/bin/sysenv virtio_blk`"
|
|
elif grep '^[^ ]* [^ ]* 1AF4:1001[^ ]* ' /proc/pci >/dev/null
|
|
then echo "virtio_blk not set, defaulting to using found virtio device."
|
|
virtio_blk=yes
|
|
fi
|
|
|
|
/bin/service -cn up /service/floppy -dev /dev/fd0
|
|
if [ X`/bin/sysenv ahci` = Xyes ]
|
|
then
|
|
# this is here temporarily, for testing purposes
|
|
/bin/service -c up /service/ahci -dev /dev/c0d0 -label ahci_0 -args instance=0
|
|
elif [ X"$virtio_blk" = Xyes ]
|
|
then
|
|
/bin/service -c up /service/virtio_blk -dev /dev/c0d0 -label virtio_blk_0 -args instance=0
|
|
else
|
|
/bin/service -c up /service/at_wini -dev /dev/c0d0 -label at_wini_0
|
|
/bin/service -cr up /service/at_wini -dev /dev/c1d0 -label at_wini_1 -args instance=1 2>/dev/null || :
|
|
fi
|
|
/bin/umount /proc >/dev/null
|
|
fi
|
|
|
|
if [ X`/bin/sysenv arch` = Xearm ]
|
|
then echo Starting the mmc driver
|
|
/bin/service -c up /service/mmc -dev /dev/c0d0
|
|
fi
|
|
|
|
/bin/service up /service/procfs || echo "WARNING: couldn't start procfs"
|
|
|
|
if /bin/sysenv rootdevname >/dev/null
|
|
then rootdevname=/dev/`/bin/sysenv rootdevname`
|
|
else
|
|
if (! sysenv cdproberoot) && (! sysenv bootramdisk) >/dev/null
|
|
then echo "rootdevname not set"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ "`sysenv bin_img`" = 1 ]
|
|
then
|
|
bin_img="-i "
|
|
fi
|
|
|
|
if sysenv cdproberoot >/dev/null
|
|
then
|
|
echo
|
|
echo 'Looking for boot CD. This may take a minute.'
|
|
echo 'Please ignore any error messages.'
|
|
echo
|
|
rootdevname=$(cdprobe) || { echo 'No CD found'; exit 1; }
|
|
export rootdevname
|
|
elif [ "$rootdevname" = "/dev/ram" ]
|
|
then
|
|
ramimagename=/dev/`/bin/sysenv ramimagename`
|
|
echo "Loading ramdisk from $ramimagename"
|
|
loadramdisk "$ramimagename" || echo "WARNING: loadramdisk failed"
|
|
fi
|
|
|
|
if sysenv bootramdisk >/dev/null
|
|
then
|
|
rootdevname=imgrd
|
|
fi
|
|
|
|
echo "Root device name is $rootdevname"
|
|
|
|
if ! sysenv cdproberoot >/dev/null
|
|
then
|
|
if [ -e $FSCK ]
|
|
then $FSCK -p $rootdevname
|
|
fi
|
|
fi
|
|
|
|
# Change root from temporary boot ramdisk to the configure
|
|
# root device
|
|
if ! sysenv bootramdisk >/dev/null
|
|
then
|
|
/bin/mount -n $bin_img"$rootdevname" /
|
|
fi
|
|
|
|
/bin/mount -e -n -t procfs none /proc || echo "WARNING: couldn't mount procfs"
|
|
|
|
if ! sysenv bootramdisk >/dev/null
|
|
then
|
|
exec /bin/sh /etc/rc `sysenv bootopts` "$@"
|
|
fi
|