# KubeSolo OS — GRUB Configuration (ARM64) # A/B partition boot with automatic rollback. # # Same A/B logic as build/grub/grub.cfg; only the console parameters differ # (ARM64 PL011 / 16550-compat UART rather than x86 ttyS0). # # Partition layout: # (hd0,gpt1) — EFI/Boot (256 MB, FAT32) — contains GRUB + grubenv # (hd0,gpt2) — System A (512 MB, ext4) — vmlinuz + kubesolo-os.gz # (hd0,gpt3) — System B (512 MB, ext4) — vmlinuz + kubesolo-os.gz # (hd0,gpt4) — Data (remaining, ext4) — persistent K8s state set default=0 set timeout=3 load_env # --- A/B Rollback Logic (identical to amd64 grub.cfg) --- if [ "${boot_success}" != "1" ]; then if [ "${boot_counter}" = "0" ]; then if [ "${active_slot}" = "A" ]; then set active_slot=B else set active_slot=A fi save_env active_slot set boot_counter=3 save_env boot_counter else if [ "${boot_counter}" = "3" ]; then set boot_counter=2 elif [ "${boot_counter}" = "2" ]; then set boot_counter=1 elif [ "${boot_counter}" = "1" ]; then set boot_counter=0 fi save_env boot_counter fi fi set boot_success=0 save_env boot_success if [ "${active_slot}" = "A" ]; then set root='(hd0,gpt2)' set slot_label="System A" else set root='(hd0,gpt3)' set slot_label="System B" fi # --- ARM64 console string --- # Covers QEMU virt (ttyAMA0), Ampere/RPi-equivalent PL011 (ttyAMA0), and # Graviton/16550-compat (ttyS0). Last `console=` becomes the system console. menuentry "KubeSolo OS (${slot_label})" { echo "Booting KubeSolo OS from ${slot_label}..." echo "Boot counter: ${boot_counter}, Boot success: ${boot_success}" linux /vmlinuz kubesolo.data=LABEL=KSOLODATA console=ttyAMA0,115200 console=ttyS0,115200 quiet initrd /kubesolo-os.gz } menuentry "KubeSolo OS (${slot_label}) — Debug Mode" { echo "Booting KubeSolo OS (debug) from ${slot_label}..." linux /vmlinuz kubesolo.data=LABEL=KSOLODATA kubesolo.debug console=ttyAMA0,115200 console=ttyS0,115200 initrd /kubesolo-os.gz } menuentry "KubeSolo OS — Emergency Shell" { echo "Booting to emergency shell..." linux /vmlinuz kubesolo.shell console=ttyAMA0,115200 console=ttyS0,115200 initrd /kubesolo-os.gz } menuentry "KubeSolo OS — Boot Other Slot" { if [ "${active_slot}" = "A" ]; then set root='(hd0,gpt3)' echo "Booting from System B (passive)..." else set root='(hd0,gpt2)' echo "Booting from System A (passive)..." fi linux /vmlinuz kubesolo.data=LABEL=KSOLODATA kubesolo.debug console=ttyAMA0,115200 console=ttyS0,115200 initrd /kubesolo-os.gz }