mirror of
https://git.launchpad.net/livecd-rootfs
synced 2026-02-21 17:33:28 +00:00
Use consistent formatting across all architectures: 4-space indent, two spaces after "linux", one space after "initrd". Also fix an extra blank line before "fi" in amd64's UEFI section caused by f-string interpolation. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
"""ARM 64-bit architecture boot configuration."""
|
|
|
|
import pathlib
|
|
|
|
from .uefi import UEFIBootConfigurator
|
|
from .base import default_kernel_params
|
|
|
|
|
|
class ARM64BootConfigurator(UEFIBootConfigurator):
|
|
"""Boot setup for ARM 64-bit architecture."""
|
|
|
|
efi_suffix = "aa64"
|
|
grub_target = "arm64"
|
|
arch = "arm64"
|
|
|
|
def mkisofs_opts(self) -> list[str | pathlib.Path]:
|
|
"""Return mkisofs options for ARM64."""
|
|
opts: list[str | pathlib.Path] = [
|
|
"-J",
|
|
"-joliet-long",
|
|
"-l",
|
|
"-c",
|
|
"boot/boot.cat",
|
|
]
|
|
# Add common UEFI options
|
|
opts.extend(self.get_uefi_mkisofs_opts())
|
|
# ARM64-specific: partition cylinder alignment
|
|
opts.extend(["-partition_cyl_align", "all"])
|
|
return opts
|
|
|
|
def extract_files(self) -> None:
|
|
"""Download and extract bootloader packages for ARM64."""
|
|
with self.logger.logged("extracting ARM64 boot files"):
|
|
self.extract_uefi_files()
|
|
|
|
def generate_grub_config(self) -> str:
|
|
"""Generate grub.cfg for ARM64."""
|
|
kernel_params = default_kernel_params(self.project)
|
|
|
|
result = self.grub_header()
|
|
|
|
# ARM64-specific: Snapdragon workarounds
|
|
result += f"""\
|
|
set cmdline=
|
|
smbios --type 4 --get-string 5 --set proc_version
|
|
regexp "Snapdragon.*" "$proc_version"
|
|
if [ $? = 0 ]; then
|
|
# Work around Snapdragon X firmware bug. cutmem is not allowed in lockdown mode.
|
|
if [ $lockdown != "y" ]; then
|
|
cutmem 0x8800000000 0x8fffffffff
|
|
fi
|
|
# arm64.nopauth works around 8cx Gen 3 firmware bug
|
|
cmdline="clk_ignore_unused pd_ignore_unused arm64.nopauth"
|
|
fi
|
|
|
|
menuentry "Try or Install {self.humanproject}" {{
|
|
set gfxpayload=keep
|
|
linux /casper/vmlinuz $cmdline {kernel_params} console=tty0
|
|
initrd /casper/initrd
|
|
}}
|
|
"""
|
|
|
|
# HWE kernel option if available
|
|
result += self.hwe_menu_entry(
|
|
"vmlinuz",
|
|
f"{kernel_params} console=tty0",
|
|
extra_params="$cmdline ",
|
|
)
|
|
|
|
# Note: ARM64 HWE also includes $dtb in the original shell script,
|
|
# but it's not actually set anywhere in the grub.cfg, so we omit it here
|
|
|
|
# UEFI Entries (ARM64 is UEFI-only, no grub_platform check needed)
|
|
result += self.uefi_menu_entries()
|
|
|
|
return result
|