aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/disk_image137
-rwxr-xr-xscripts/uboot-script-gen12
2 files changed, 105 insertions, 44 deletions
diff --git a/scripts/disk_image b/scripts/disk_image
index 892056d..6f5f3e2 100755
--- a/scripts/disk_image
+++ b/scripts/disk_image
@@ -17,6 +17,46 @@ function check_depends()
done
}
+function add_partition()
+{
+ local rootfs="$1"
+ _part_size=`stat -L --printf="%s" $rootfs`
+ _part_size=$(( $_part_size + $offset - 1))
+ _part_size=$(( $_part_size & ~($offset - 1) ))
+ # account for gzip compression
+ _part_size=$(( $_part_size * 2 ))
+ # add some slack
+ _part_size=$(( 128*1024*1024 + $_part_size ))
+ _part_size=$(( $_part_size / 1024 / 1024 ))
+ echo PART size: "$_part_size"MB
+
+ prev=$(( $_npart - 1 ))
+ _sector_start[$_npart]=$(( ${_sector_end[$prev]} + 1 ))
+ _sector_end[$_npart]=$(( $_part_size * 1024 * 1024 / $_sector_size + ${_sector_start[$_npart]} - 1))
+
+ _tot_size=$(( $_tot_size + $_part_size ))
+ _npart=$(( $_npart + 1 ))
+}
+
+function write_cpio()
+{
+ local j=$1
+ local rootfs=$2
+
+ # create mount point and mount diskn
+ mkdir -p ${DESTDIR}/part/disk$j
+ mount -t ext4 /dev/mapper/diskimage$j $DESTDIR/part/disk$j
+
+ # Extract rootfs cpio archive into `.../part/vos_$j`
+ cd ${DESTDIR}/part/disk$j
+ cat "${UBOOT_OUT_ABS}/$rootfs" | gunzip | cpio -id
+ cd -
+
+ # umount
+ sync
+ umount $DESTDIR/part/disk$j
+}
+
function print_help
{
echo "usage:"
@@ -115,27 +155,28 @@ _part1_size=$(( $_part1_size & ~($offset - 1) ))
_part1_size=$(( $_part1_size / 1024 / 1024 ))
echo PART1 size: "$_part1_size"MB
-if test "$DOM0_RAMDISK"
+_sector_size=512
+# _sector_start[0] needs to be aligned to 2048
+_sector_start[0]=2048
+_sector_end[0]=$(( $_part1_size * 1024 * 1024 / $_sector_size + ${_sector_start[0]} - 1))
+_tot_size=$(( $_part1_size ))
+_npart=1
+
+if test "$DOM0_ROOTFS"
then
- _part2_size=`stat -L --printf="%s" $UBOOT_OUT/$DOM0_RAMDISK`
+ add_partition "$UBOOT_OUT/$DOM0_ROOTFS"
fi
-_part2_size=$(( $_part2_size + $offset - 1))
-_part2_size=$(( $_part2_size & ~($offset - 1) ))
-# account for gzip compression
-_part2_size=$(( $_part2_size * 2 ))
-# add some slack
-_part2_size=$(( 128*1024*1024 + $_part2_size ))
-_part2_size=$(( $_part2_size / 1024 / 1024 ))
-echo PART2 size: "$_part2_size"MB
-
-_sector_size=512
-# _sector_first_start needs to be aligned to 2048
-_sector_first_start=2048
-_sector_first_end=$(( $_part1_size * 1024 * 1024 / $_sector_size + $_sector_first_start - 1))
-_sector_second_start=$(( $_sector_first_end + 1 ))
-_sector_second_end=$(( $_part2_size * 1024 * 1024 / $_sector_size + $_sector_second_start - 1))
-_tot_size=$(( $_part1_size + $_part2_size + 16 ))
+i=0
+while test $i -lt $NUM_DOMUS
+do
+ if test "${DOMU_ROOTFS[$i]}"
+ then
+ add_partition "$UBOOT_OUT/${DOMU_ROOTFS[$i]}"
+ fi
+ i=$(( $i + 1 ))
+done
+_tot_size=$(( $_tot_size + 16 ))
# NOTE: Increase vos_a to 256 to accomodate rootfs
# 528 MiB (256 + 256 + 16)
@@ -144,8 +185,14 @@ truncate $IMG -s "$_tot_size"M
# create GPT partition table
sgdisk -og $IMG
-sgdisk -n 1:$_sector_first_start:$_sector_first_end -c 1:"Linux1" -t 1:8300 $IMG
-sgdisk -n 2:$_sector_second_start:$_sector_second_end -c 2:"Linux2" -t 2:8300 $IMG
+i=0
+j=1
+while test $i -lt $_npart
+do
+ sgdisk -n $j:${_sector_start[$i]}:${_sector_end[$i]} -c $j:"Linux""$j" -t $j:8300 $IMG
+ i=$(( $i + 1 ))
+ j=$(( $j + 1 ))
+done
# find the first available loop device
_loop_dev=$(losetup -f)
@@ -165,31 +212,20 @@ done
kpartx -a /dev/mapper/diskimage
-# ensure that /dev/mapper/{diskimage1,diskimage2} exists
-while [ ! -b /dev/mapper/diskimage1 ] || [ ! -b /dev/mapper/diskimage2 ]
+# ensure that /dev/mapperdiskimage1 exists
+while [ ! -b /dev/mapper/diskimage1 ]
do
sleep 2
done
-# format vos_a partition
-mkfs.ext4 -L vos_a -F /dev/mapper/diskimage1
-
-# format vos_b partition
-mkfs.ext4 -L vos_b -F /dev/mapper/diskimage2
-
-
-# create mount point and mount disk2
-mkdir -p ${DESTDIR}/part/disk2
-mount -t ext4 /dev/mapper/diskimage2 $DESTDIR/part/disk2
-
-# Extract rootfs cpio archive into `.../part/vos_a`
-cd ${DESTDIR}/part/disk2
-cat "${UBOOT_OUT_ABS}/${DOM0_RAMDISK}" | gunzip | cpio -id
-cd -
-
-# umount
-sync
-umount $DESTDIR/part/disk2
+i=0
+j=1
+while test $i -lt $_npart
+do
+ mkfs.ext4 -L vos_$j -F /dev/mapper/diskimage$j
+ i=$(( $i + 1 ))
+ j=$(( $j + 1 ))
+done
# create mount point and mount disk1
mkdir -p ${DESTDIR}/part/disk1
@@ -224,6 +260,25 @@ sync
# fstrim $DESTDIR/part/disk1
umount $DESTDIR/part/disk1
+j=2
+if test "$DOM0_ROOTFS"
+then
+ write_cpio 2 "$DOM0_ROOTFS"
+ j=$(( $j + 1 ))
+fi
+
+i=0
+while test $i -lt $NUM_DOMUS
+do
+ if test "${DOMU_ROOTFS[$i]}"
+ then
+ write_cpio $j "${DOMU_ROOTFS[$i]}"
+ j=$(( $j + 1 ))
+ fi
+ i=$(( $i + 1 ))
+done
+
+
kpartx -d /dev/mapper/diskimage
dmsetup remove diskimage
losetup -d $_loop_dev
diff --git a/scripts/uboot-script-gen b/scripts/uboot-script-gen
index bc41d1f..d878bf6 100755
--- a/scripts/uboot-script-gen
+++ b/scripts/uboot-script-gen
@@ -66,7 +66,7 @@ function device_tree_editing()
echo "fdt mknod /chosen dom0" >> $UBOOT_SOURCE
echo "fdt set /chosen/dom0 compatible \"xen,linux-zimage\" \"xen,multiboot-module\"" >> $UBOOT_SOURCE
echo "fdt set /chosen/dom0 reg <0x0 "$dom0_kernel_addr" 0x0 "$dom0_kernel_size">" >> $UBOOT_SOURCE
- if test "$LOAD_CMD" = "tftpb"
+ if test "$DOM0_RAMDISK"
then
echo "fdt set /chosen xen,dom0-bootargs \"$DOM0_CMD\"" >> $UBOOT_SOURCE
if test $dom0_ramdisk_addr != "-"
@@ -276,7 +276,7 @@ then
fi
if [[ ! $DOM0_CMD =~ root= ]]
then
- if test "$LOAD_CMD" = "tftpb"
+ if test -z "$DOM0_ROOTFS"
then
DOM0_CMD="$DOM0_CMD root=/dev/ram0"
else
@@ -323,6 +323,12 @@ do
then
DOMU_VCPUS[$i]=1
fi
+ if test "${DOMU_ROOTFS[$i]}"
+ then
+ echo "Cannot handle non-ramdisk rootfses for dom0less VMs."
+ echo "DomUs with rootfses on disk need to be created from dom0 using xl."
+ exit 1
+ fi
i=$(( $i + 1 ))
done
@@ -352,7 +358,7 @@ dom0_kernel_addr=$memaddr
load_file $DOM0_KERNEL
dom0_kernel_size=$filesize
-if test "$DOM0_RAMDISK" && [[ $LOAD_CMD = "tftpb" ]]
+if test "$DOM0_RAMDISK"
then
check_compressed_file_type $DOM0_RAMDISK "cpio archive"
dom0_ramdisk_addr=$memaddr