grub: refactor

This commit is contained in:
spycat88
2025-07-17 22:56:07 +01:00
parent f62ffe9d36
commit 017ff2b973
12 changed files with 77 additions and 127 deletions

View File

@@ -77,4 +77,18 @@
<file>meson-g12b-odroid-go-ultra</file>
<file>meson-g12b-powkiddy-rgb10-max-3-pro</file>
</S922X>
<SM8250 bootmethod="grub">
<file short="rp5" full="Retroid Pocket 5" rotation="3">sm8250-retroidpocket-rp5</file>
<file short="rpflip2" full="Retroid Pocket Flip2" rotation="3">sm8250-retroidpocket-flip2</file>
<file short="rpmini" full="Retroid Pocket Mini" rotation="1">sm8250-retroidpocket-rpmini</file>
<file short="rpminiv2" full="Retroid Pocket Mini V2" rotation="1">sm8250-retroidpocket-rpminiv2</file>
</SM8250>
<SM8550 bootmethod="grub">
<file short="odin2" full="AYN Odin2">qcs8550-ayn-odin2</file>
<file short="odin2portal" full="AYN Odin2 Portal">qcs8550-ayn-odin2portal</file>
<file short="odin2mini" full="AYN Odin2 Mini">qcs8550-ayn-odin2mini</file>
<file short="pocketace" full="AYANEO Pocket ACE">qcs8550-ayaneo-pocketace</file>
<file short="pocketdmg" full="AYANEO Pocket DMG">qcs8550-ayaneo-pocketdmg</file>
<file short="pocketevo" full="AYANEO Pocket EVO">qcs8550-ayaneo-pocketdmg</file>
</SM8550>
</dtb>

View File

@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX)
# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX)
source ${PROJECT_DIR}/${PROJECT}/devices/${DEVICE}/options
DTBXML="${PROJECT_DIR}/${PROJECT}/bootloader/dtb.xml"
mkdir -p "${INSTALL}/usr/share/bootloader/EFI/BOOT"
cat << EOF > "${INSTALL}/usr/share/bootloader/EFI/BOOT/grub.cfg"
@@ -39,48 +39,29 @@ terminal_output gfxterm
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
menuentry 'Retroid Pocket 5' \$menuentry_id_option 'rp5' {
EOF
xmlstarlet sel -t -m "//${DEVICE}/file" \
-v "concat(@short, '|', @full, '|', @rotation, '|', .)" -n "${DTBXML}" | while IFS='|' read -r SHORT FULL ROTATION DTB; do
cat << EOF >> "${INSTALL}/usr/share/bootloader/EFI/BOOT/grub.cfg"
menuentry '${FULL}' \$menuentry_id_option '${SHORT}' {
savedefault
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE} fbcon=rotate:3
devicetree /${DEVICE_DTB[0]}.dtb
}
menuentry 'Retroid Pocket Flip2' \$menuentry_id_option 'rpflip2' {
savedefault
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE} fbcon=rotate:3
devicetree /${DEVICE_DTB[1]}.dtb
}
menuentry 'Retroid Pocket Mini' \$menuentry_id_option 'rpmini' {
savedefault
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE} fbcon=rotate:1
devicetree /${DEVICE_DTB[2]}.dtb
}
menuentry 'Retroid Pocket Mini V2' \$menuentry_id_option 'rpminiv2' {
savedefault
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE} fbcon=rotate:1
devicetree /${DEVICE_DTB[3]}.dtb
}
menuentry 'Retroid Pocket 5 RECOVERY' \$menuentry_id_option 'rp5-recovery' {
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE} fbcon=rotate:3 recovery
devicetree /${DEVICE_DTB[0]}.dtb
}
menuentry 'Retroid Pocket Flip2 RECOVERY' \$menuentry_id_option 'rpflip2-recovery' {
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE} fbcon=rotate:3 recovery
devicetree /${DEVICE_DTB[1]}.dtb
}
menuentry 'Retroid Pocket Mini RECOVERY' \$menuentry_id_option 'rpmini-recovery' {
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE} fbcon=rotate:1 recovery
devicetree /${DEVICE_DTB[2]}.dtb
}
menuentry 'Retroid Pocket Mini V2 RECOVERY' \$menuentry_id_option 'rpminiv2-recovery' {
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE} fbcon=rotate:1 recovery
devicetree /${DEVICE_DTB[3]}.dtb
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE} fbcon=rotate:${ROTATION}
devicetree /${DTB}.dtb
}
EOF
done
xmlstarlet sel -t -m "//${DEVICE}/file" \
-v "concat(@short, '|', @full, '|', @rotation, '|', .)" -n "${DTBXML}" | while IFS='|' read -r SHORT FULL ROTATION DTB; do
cat << EOF >> "${INSTALL}/usr/share/bootloader/EFI/BOOT/grub.cfg"
menuentry '${FULL} RECOVERY' \$menuentry_id_option '${SHORT}-recovery' {
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE} fbcon=rotate:${ROTATION} recovery
devicetree /${DTB}.dtb
}
EOF
done

View File

@@ -3,7 +3,7 @@
mkimage_dtb() {
echo "image: copying device trees..."
for dtb in ${DEVICE_DTB[@]}; do
for dtb in ${DTB[@]}; do
echo "image: copying ${dtb}.dtb..."
mcopy "${RELEASE_DIR}/3rdparty/bootloader/${dtb}.dtb" ::
done
@@ -14,5 +14,8 @@ mkimage_efi() {
mcopy -s -o "${RELEASE_DIR}/3rdparty/bootloader/EFI" ::
}
DTBXML="${PROJECT_DIR}/${PROJECT}/bootloader/dtb.xml"
readarray -t DTB < <(xmlstarlet sel -t -v "//dtb/${DEVICE}/${SUBDEVICE}/file" ${DTBXML})
mkimage_dtb
mkimage_efi

View File

@@ -24,14 +24,13 @@
esac
PARTITION_TABLE="gpt"
DEVICE_DTB=("sm8250-retroidpocket-rp5" "sm8250-retroidpocket-flip2" "sm8250-retroidpocket-rpmini" "sm8250-retroidpocket-rpminiv2")
HW_CPU="Snapdragon 865"
# Kernel target
KERNEL_TARGET="Image"
# Additional kernel make parameters (for example to specify the u-boot loadaddress)
KERNEL_MAKE_EXTRACMD=" $(for DTB in "${DEVICE_DTB[@]}"; do echo -n "qcom/${DTB}.dtb "; done)"
KERNEL_MAKE_EXTRACMD=" $(xmlstarlet sel -t -m "//dtb/${DEVICE}//file" -o "qcom/" -v "." -o ".dtb " "${PROJECT_DIR}/${PROJECT}/bootloader/dtb.xml")"
# Kernel cmdline
EXTRA_CMDLINE="quiet rootwait console=tty0 clk_ignore_unused pd_ignore_unused"

View File

@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2024 ROCKNIX (https://github.com/ROCKNIX)
# Copyright (C) 2024-present ROCKNIX (https://github.com/ROCKNIX)
source ${PROJECT_DIR}/${PROJECT}/devices/${DEVICE}/options
DTBXML="${PROJECT_DIR}/${PROJECT}/bootloader/dtb.xml"
mkdir -p "${INSTALL}/usr/share/bootloader/EFI/BOOT"
cat << EOF > "${INSTALL}/usr/share/bootloader/EFI/BOOT/grub.cfg"
@@ -32,79 +32,36 @@ set timeout_style=menu
set lang=en_US
loadfont /EFI/BOOT/dejavu-mono.pf2
set rotation=270
set gfxmode=1920x1080
set gfxmode=auto
insmod efi_gop
insmod gfxterm
terminal_output gfxterm
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
menuentry 'AYN Odin2' \$menuentry_id_option 'odin2' {
savedefault
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE}
devicetree /${DEVICE_DTB[1]}.dtb
}
menuentry 'AYN Odin2 Portal' \$menuentry_id_option 'odin2portal' {
savedefault
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE}
devicetree /${DEVICE_DTB[0]}.dtb
}
menuentry 'AYN Odin2 Mini' \$menuentry_id_option 'odin2mini' {
savedefault
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE}
devicetree /${DEVICE_DTB[2]}.dtb
}
menuentry 'AYANEO Pocket ACE' \$menuentry_id_option 'pocketace' {
savedefault
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE}
devicetree /${DEVICE_DTB[3]}.dtb
}
menuentry 'AYANEO Pocket DMG' \$menuentry_id_option 'pocketdmg' {
savedefault
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE}
devicetree /${DEVICE_DTB[4]}.dtb
}
menuentry 'AYANEO Pocket EVO' \$menuentry_id_option 'pocketevo' {
savedefault
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE}
devicetree /${DEVICE_DTB[5]}.dtb
}
menuentry 'AYN Odin2 RECOVERY' \$menuentry_id_option 'odin2-recovery' {
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE} recovery
devicetree /${DEVICE_DTB[1]}.dtb
}
menuentry 'AYN Odin2 Portal RECOVERY' \$menuentry_id_option 'odin2portal-recovery' {
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE} recovery
devicetree /${DEVICE_DTB[0]}.dtb
}
menuentry 'AYN Odin2 Mini RECOVERY' \$menuentry_id_option 'odin2mini-recovery' {
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE} recovery
devicetree /${DEVICE_DTB[2]}.dtb
}
menuentry 'AYANEO Pocket ACE RECOVERY' \$menuentry_id_option 'pocketace-recovery' {
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE} recovery
devicetree /${DEVICE_DTB[3]}.dtb
}
menuentry 'AYANEO Pocket DMG RECOVERY' \$menuentry_id_option 'pocketdmg-recovery' {
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE} recovery
devicetree /${DEVICE_DTB[4]}.dtb
}
menuentry 'AYANEO Pocket EVO RECOVERY' \$menuentry_id_option 'pocketevo-recovery' {
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE} recovery
devicetree /${DEVICE_DTB[5]}.dtb
}
EOF
xmlstarlet sel -t -m "//${DEVICE}/file" \
-v "concat(@short, '|', @full, '|', .)" -n "${DTBXML}" | while IFS='|' read -r SHORT FULL DTB; do
cat << EOF >> "${INSTALL}/usr/share/bootloader/EFI/BOOT/grub.cfg"
menuentry '${FULL}' \$menuentry_id_option '${SHORT}' {
savedefault
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE}
devicetree /${DTB}.dtb
}
EOF
done
xmlstarlet sel -t -m "//${DEVICE}/file" \
-v "concat(@short, '|', @full, '|', .)" -n "${DTBXML}" | while IFS='|' read -r SHORT FULL DTB; do
cat << EOF >> "${INSTALL}/usr/share/bootloader/EFI/BOOT/grub.cfg"
menuentry '${FULL} RECOVERY' \$menuentry_id_option '${SHORT}-recovery' {
search --set -f /KERNEL
linux /KERNEL boot=LABEL=${DISTRO_BOOTLABEL} disk=LABEL=${DISTRO_DISKLABEL} grub_portable ${EXTRA_CMDLINE} recovery
devicetree /${DTB}.dtb
}
EOF
done

View File

@@ -3,7 +3,7 @@
mkimage_dtb() {
echo "image: copying device trees..."
for dtb in ${DEVICE_DTB[@]}; do
for dtb in ${DTB[@]}; do
echo "image: copying ${dtb}.dtb..."
mcopy "${RELEASE_DIR}/3rdparty/bootloader/${dtb}.dtb" ::
done
@@ -24,6 +24,9 @@ mkimage_uboot() {
mcopy -s -o "${RELEASE_DIR}/3rdparty/bootloader/boot" ::
}
DTBXML="${PROJECT_DIR}/${PROJECT}/bootloader/dtb.xml"
readarray -t DTB < <(xmlstarlet sel -t -v "//dtb/${DEVICE}/${SUBDEVICE}/file" ${DTBXML})
mkimage_dtb
mkimage_efi
mkimage_linuxloader

View File

@@ -25,14 +25,13 @@
esac
PARTITION_TABLE="gpt"
DEVICE_DTB=("qcs8550-ayn-odin2portal" "qcs8550-ayn-odin2" "qcs8550-ayn-odin2mini" "qcs8550-ayaneo-pocketace" "qcs8550-ayaneo-pocketdmg" "qcs8550-ayaneo-pocketevo")
HW_CPU="Snapdragon 8 Gen2"
# Kernel target
KERNEL_TARGET="Image"
# Additional kernel make parameters (for example to specify the u-boot loadaddress)
KERNEL_MAKE_EXTRACMD=" $(for DTB in "${DEVICE_DTB[@]}"; do echo -n "qcom/${DTB}.dtb "; done)"
KERNEL_MAKE_EXTRACMD=" $(xmlstarlet sel -t -m "//dtb/${DEVICE}//file" -o "qcom/" -v "." -o ".dtb " "${PROJECT_DIR}/${PROJECT}/bootloader/dtb.xml")"
# Kernel cmdline
EXTRA_CMDLINE="quiet rootwait console=tty0 allow_mismatched_32bit_el0 fw_devlink.strict=1 pcie_ports=compat irqaffinity=0-2 cgroup.memory=nokmem,nosocket nosoftlockup"

View File

@@ -70,6 +70,7 @@ makeinstall_target() {
search_label chain reboot loadenv test gfxterm efi_gop
mkdir -p ${INSTALL}/usr/share/bootloader/EFI/BOOT
cp -av ${PKG_DIR}/config/* ${INSTALL}/usr/share/bootloader/EFI/BOOT
cp -av bootaa64.efi ${INSTALL}/usr/share/bootloader/EFI/BOOT
# Create grub configuration
@@ -77,8 +78,4 @@ makeinstall_target() {
# Always install the update script
find_file_path bootloader/update.sh && cp -av ${FOUND_PATH} ${INSTALL}/usr/share/bootloader
if [ -d ${PKG_DIR}/sources/${DEVICE} ]; then
cp -av ${PKG_DIR}/sources/${DEVICE}/* ${INSTALL}/usr/share/bootloader/EFI/BOOT
fi
}

View File

@@ -1,3 +0,0 @@
# GRUB Environment Block
# WARNING: Do not edit this file by tools other than grub-editenv!!!
##################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################