aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorStefano Stabellini2022-03-31 10:09:50 -0700
committerStefano Stabellini2022-04-06 12:55:34 -0700
commit96b30388509a9bcff297f8eaa91cae5546842573 (patch)
tree3a8bdfdfcfe922c214955d61037efbf71302c98a /scripts
parent60f2a6d5af3a36dcb28768a18f61ade70cbf21b5 (diff)
disk_image: use DOS partition table and FAT for the first partition
This way, ImageBuilder can generate an SD card image with BOOT.BIN bootable on Xilinx ZCU102 systems. Retain the ability to generate a GPT partition table with a GPT config option. Signed-off-by: Stefano Stabellini <stefano.stabellini@xilinx.com> Tested-by: Andrea Stevanato <andrea.stevanato@santannapisa.it>
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/disk_image53
1 files changed, 37 insertions, 16 deletions
diff --git a/scripts/disk_image b/scripts/disk_image
index 1efc3af..12fb06b 100755
--- a/scripts/disk_image
+++ b/scripts/disk_image
@@ -1,6 +1,6 @@
#!/bin/bash
-PROG_REQ=( kpartx mkfs.ext4 losetup sgdisk readlink awk )
+PROG_REQ=( kpartx mkfs.ext4 mkfs.vfat losetup readlink awk parted )
SLACK=128
function cleanup_disk_image()
@@ -366,7 +366,7 @@ function generate_domU_configs()
local dest
local dtb_name
- mount -t ext4 /dev/mapper/diskimage$j $DESTDIR/part/disk$j
+ mount /dev/mapper/diskimage$j $DESTDIR/part/disk$j
mkdir -p $DESTDIR/part/disk$j/etc/xen
add_rootfs 0
first_part=$retval
@@ -512,7 +512,7 @@ function write_rootfs()
# create mount point and mount diskn
mkdir -p ${DESTDIR}/part/disk$j
- mount -t ext4 /dev/mapper/diskimage$j $DESTDIR/part/disk$j
+ mount /dev/mapper/diskimage$j $DESTDIR/part/disk$j
# Extract rootfs cpio archive into `.../part/vos_$j`
cd ${DESTDIR}/part/disk$j
@@ -756,17 +756,37 @@ fi
# 528 MiB (256 + 256 + 16)
truncate $IMG -s "$_tot_size"M
-# create GPT partition table
-sgdisk -og $IMG
+if test "$GPT"
+then
+ # create GPT partition table
+ sgdisk -og $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
+ 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
+else
+ tmp_dos=`mktemp`
+ tmp_files+=($tmp_dos)
+
+ i=0
+ parted -s $IMG mklabel "msdos"
+ parted $IMG mkpart primary fat32 "${_sector_start[$i]}"s "${_sector_end[$i]}"s
+ parted $IMG set 1 boot on
+
+ i=1
+ j=2
+ while test $i -lt $_npart
+ do
+ parted $IMG mkpart logical ext4 "${_sector_start[$i]}"s "${_sector_end[$i]}"s
+ i=$(( $i + 1 ))
+ j=$(( $j + 1 ))
+ done
+fi
# find the first available loop device
_loop_dev=$(losetup -f)
@@ -792,8 +812,9 @@ do
sleep 2
done
-i=0
-j=1
+mkfs.vfat -F 32 -n boot /dev/mapper/diskimage1
+i=1
+j=2
while test $i -lt $_npart
do
mkfs.ext4 -L vos_$j -F /dev/mapper/diskimage$j
@@ -803,7 +824,7 @@ done
# create mount point and mount disk1
mkdir -p ${DESTDIR}/part/disk1
-mount -t ext4 /dev/mapper/diskimage1 $DESTDIR/part/disk1
+mount /dev/mapper/diskimage1 $DESTDIR/part/disk1
# only copy over files that were counted for the partition size
cd "$UBOOT_OUT"