mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
testing: add support for creating efi live images
TODO: full uefi support in installer
This commit is contained in:
parent
9b83058be4
commit
76a19cc0a6
3
Makefile
3
Makefile
@ -11,6 +11,9 @@ release:
|
||||
image:
|
||||
./scripts/image mkimage
|
||||
|
||||
image-efi:
|
||||
./scripts/image mkimage efi
|
||||
|
||||
noobs:
|
||||
./scripts/image noobs
|
||||
|
||||
|
@ -278,6 +278,9 @@ IMAGE_NAME="$DISTRONAME-$TARGET_VERSION"
|
||||
|
||||
# create image files if requested
|
||||
if [ "$1" = "mkimage" -a -n "$BOOTLOADER" ]; then
|
||||
if [ "$2" == "efi" ] ; then
|
||||
UEFI=yes
|
||||
fi
|
||||
# variables used in image script must be passed
|
||||
sudo env \
|
||||
PATH="$PATH" \
|
||||
@ -289,6 +292,7 @@ IMAGE_NAME="$DISTRONAME-$TARGET_VERSION"
|
||||
RELEASE_DIR="$RELEASE_DIR" \
|
||||
UUID_SYSTEM="$(uuidgen)" \
|
||||
UUID_STORAGE="$(uuidgen)" \
|
||||
UEFI="$UEFI" \
|
||||
$SCRIPTS/mkimage
|
||||
fi
|
||||
|
||||
|
@ -49,6 +49,14 @@
|
||||
|
||||
trap cleanup SIGINT
|
||||
|
||||
# generate volume id for fat partition
|
||||
if [ "$UEFI" = "yes" ] ; then
|
||||
UUID_1=$(date '+%d%m')
|
||||
UUID_2=$(date '+%M%S')
|
||||
FAT_VOL_ID="${UUID_1}${UUID_2}"
|
||||
UUID_SYSTEM="${UUID_1}-${UUID_2}"
|
||||
fi
|
||||
|
||||
# ensure loopX not in use
|
||||
umount "$OE_TMP" &>/dev/null || :
|
||||
umount "$LOOP" &>/dev/null >/dev/null || :
|
||||
@ -62,29 +70,46 @@ trap cleanup SIGINT
|
||||
# write a disklabel
|
||||
echo "image: creating partition table on $DISK..."
|
||||
losetup "$LOOP" "$DISK"
|
||||
parted -s "$LOOP" mklabel msdos
|
||||
if [ "$UEFI" = "yes" ] ; then
|
||||
parted -s "$LOOP" mklabel gpt
|
||||
else
|
||||
parted -s "$LOOP" mklabel msdos
|
||||
fi
|
||||
sync
|
||||
|
||||
# create part1
|
||||
echo "image: creating part1 on $DISK..."
|
||||
SYSTEM_PART_END=$(( $SYSTEM_SIZE * 1024 * 1024 / 512 + 2048 ))
|
||||
if [ "$BOOTLOADER" = "syslinux" ]; then
|
||||
parted -s "$LOOP" -a min unit s mkpart primary ext4 2048 $SYSTEM_PART_END
|
||||
if [ "$UEFI" = "yes" ] ; then
|
||||
parted -s "$LOOP" -a min unit s mkpart primary fat32 2048 $SYSTEM_PART_END
|
||||
else
|
||||
parted -s "$LOOP" -a min unit s mkpart primary ext4 2048 $SYSTEM_PART_END
|
||||
fi
|
||||
elif [ "$BOOTLOADER" = "bcm2835-bootloader" ]; then
|
||||
parted -s "$LOOP" -a min unit s mkpart primary fat32 2048 $SYSTEM_PART_END
|
||||
fi
|
||||
parted -s "$LOOP" set 1 boot on
|
||||
if [ "$UEFI" = "yes" ] ; then
|
||||
parted -s "$LOOP" set 1 legacy_boot on
|
||||
else
|
||||
parted -s "$LOOP" set 1 boot on
|
||||
fi
|
||||
|
||||
# create part2
|
||||
echo "image: creating part2 on $DISK..."
|
||||
STORAGE_PART_START=$(( $SYSTEM_PART_END + 2048 ))
|
||||
parted -s "$LOOP" -a min unit s mkpart primary ext4 $STORAGE_PART_START 100%
|
||||
STORAGE_PART_END=$(( $STORAGE_PART_START + (( $STORAGE_SIZE * 1024 * 1024 / 512 )) ))
|
||||
parted -s "$LOOP" -a min unit s mkpart primary ext4 $STORAGE_PART_START $STORAGE_PART_END
|
||||
sync
|
||||
|
||||
if [ "$BOOTLOADER" = "syslinux" ]; then
|
||||
# write mbr
|
||||
echo "image: writing mbr..."
|
||||
MBR="$ROOT/$TOOLCHAIN/share/syslinux/mbr.bin"
|
||||
if [ "$UEFI" = "yes" ] ; then
|
||||
MBR="$ROOT/$TOOLCHAIN/share/syslinux/gptmbr.bin"
|
||||
else
|
||||
MBR="$ROOT/$TOOLCHAIN/share/syslinux/mbr.bin"
|
||||
fi
|
||||
if [ -n "$MBR" ]; then
|
||||
dd bs=440 count=1 conv=notrunc if="$MBR" of="$LOOP"
|
||||
fi
|
||||
@ -98,9 +123,13 @@ fi
|
||||
SIZELIMIT=$(( $SYSTEM_SIZE * 1024 * 1024 ))
|
||||
losetup -o $OFFSET --sizelimit $SIZELIMIT "$LOOP" "$DISK"
|
||||
if [ "$BOOTLOADER" = "syslinux" ]; then
|
||||
mke2fs -q -t ext4 -m 0 "$LOOP"
|
||||
tune2fs -U $UUID_SYSTEM "$LOOP"
|
||||
e2fsck -n "$LOOP"
|
||||
if [ "$UEFI" = "yes" ] ; then
|
||||
mkfs.vfat -i "$FAT_VOL_ID" "$LOOP"
|
||||
else
|
||||
mke2fs -q -t ext4 -m 0 "$LOOP"
|
||||
tune2fs -U $UUID_SYSTEM "$LOOP"
|
||||
e2fsck -n "$LOOP"
|
||||
fi
|
||||
elif [ "$BOOTLOADER" = "bcm2835-bootloader" ]; then
|
||||
mkfs.vfat "$LOOP"
|
||||
fi
|
||||
@ -156,7 +185,11 @@ EOF
|
||||
|
||||
# install extlinux
|
||||
echo "image: installing extlinux to part1..."
|
||||
extlinux --heads=4 --sector=32 -i "$OE_TMP"
|
||||
if [ "$UEFI" = "yes" ] ; then
|
||||
syslinux --heads=4 --sector=32 -i "$LOOP"
|
||||
else
|
||||
extlinux --heads=4 --sector=32 -i "$OE_TMP"
|
||||
fi
|
||||
|
||||
# copy files
|
||||
echo "image: copying files to part1..."
|
||||
@ -166,7 +199,26 @@ EOF
|
||||
cp $ROOT/$TOOLCHAIN/share/syslinux/vesamenu.c32 "$OE_TMP"
|
||||
cp $ROOT/$TOOLCHAIN/share/syslinux/libcom32.c32 "$OE_TMP"
|
||||
cp $ROOT/$TOOLCHAIN/share/syslinux/libutil.c32 "$OE_TMP"
|
||||
if [ "$UEFI" = "yes" ] ; then
|
||||
mkdir -p "$OE_TMP/EFI/BOOT"
|
||||
cp $RELEASE_DIR/splash.png "$OE_TMP/EFI/BOOT"
|
||||
cp $ROOT/$TOOLCHAIN/share/syslinux/vesamenu.c32 "$OE_TMP/EFI/BOOT"
|
||||
cp $ROOT/$TOOLCHAIN/share/syslinux/libcom32.c32 "$OE_TMP/EFI/BOOT"
|
||||
cp $ROOT/$TOOLCHAIN/share/syslinux/libutil.c32 "$OE_TMP/EFI/BOOT"
|
||||
cp $ROOT/$TOOLCHAIN/share/syslinux/syslinux.efi "$OE_TMP/EFI/BOOT/bootx64.efi"
|
||||
cp $ROOT/$TOOLCHAIN/share/syslinux/ldlinux.e64 "$OE_TMP/EFI/BOOT"
|
||||
cat << EOF > "$OE_TMP"/EFI/BOOT/syslinux.cfg
|
||||
DEFAULT live
|
||||
|
||||
LABEL installer
|
||||
KERNEL /KERNEL
|
||||
APPEND boot=UUID=$UUID_SYSTEM installer quiet tty vga=current
|
||||
|
||||
LABEL live
|
||||
KERNEL /KERNEL
|
||||
APPEND boot=UUID=$UUID_SYSTEM disk=UUID=$UUID_STORAGE quiet vga=current
|
||||
EOF
|
||||
fi
|
||||
elif [ "$BOOTLOADER" = "bcm2835-bootloader" ]; then
|
||||
# create bootloader configuration
|
||||
echo "image: creating bootloader configuration..."
|
||||
@ -204,8 +256,10 @@ fi # bootloader
|
||||
mount "$LOOP" "$OE_TMP"
|
||||
|
||||
# add resize mark
|
||||
touch "$OE_TMP/.please_resize_me"
|
||||
sync
|
||||
if [ "$UEFI" != "yes" ] ; then
|
||||
touch "$OE_TMP/.please_resize_me"
|
||||
sync
|
||||
fi
|
||||
|
||||
# unmount part2
|
||||
echo "image: unmounting part2..."
|
||||
|
Loading…
x
Reference in New Issue
Block a user