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

@@ -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"