- Rename board config to .csc (no maintainer) - Remove duplicate board name from comment - Change verbosity from 7 to 1 (default) - Remove ATF patch, use ATF_SKIP_LDFLAGS_WL instead - Move CONFIG_RD_* to kernel config (fix artifact caching) - Fix networking comment (chrony -> NetworkManager) - Replace -j12 with -j8 - Add fdt addr/resize after DTB reload on overlay error
156 lines
5.0 KiB
Batchfile
156 lines
5.0 KiB
Batchfile
# DO NOT EDIT THIS FILE
|
|
#
|
|
# Please edit /boot/armbianEnv.txt to set supported parameters
|
|
#
|
|
# Nuvoton MA35D1 boot script for Armbian
|
|
|
|
setenv overlay_error "false"
|
|
# default values
|
|
setenv rootdev "LABEL=armbi_root"
|
|
setenv verbosity "1"
|
|
setenv console "serial"
|
|
setenv bootlogo "false"
|
|
setenv rootfstype "ext4"
|
|
setenv docker_optimizations "on"
|
|
setenv earlycon "off"
|
|
|
|
# MA35D1 memory map - load addresses
|
|
# Memory layout (avoiding overlaps):
|
|
# 0x80000000 - Kernel (~15MB, ends ~0x80F00000)
|
|
# 0x81000000 - Temp load address for env/overlays
|
|
# 0x82000000 - Ramdisk (~20MB max, ends ~0x83400000)
|
|
# 0x84000000 - DTB (~64KB)
|
|
setenv load_addr "0x81000000"
|
|
setenv kernel_addr_r "0x80000000"
|
|
setenv ramdisk_addr_r "0x82000000"
|
|
setenv fdt_addr_r "0x84000000"
|
|
|
|
# Set default fdtfile if not set by U-Boot
|
|
test -n "${fdtfile}" || setenv fdtfile "nuvoton/ma35d1-iot-512m.dtb"
|
|
|
|
test -n "${distro_bootpart}" || setenv distro_bootpart 1
|
|
|
|
echo "Boot script loaded from ${devtype} ${devnum}:${distro_bootpart}"
|
|
|
|
# get PARTUUID of first partition on SD/eMMC the boot script was loaded from
|
|
echo "Detecting PARTUUID for ${devtype} device ${devnum}:${distro_bootpart}..."
|
|
setenv partuuid
|
|
|
|
if test "${devtype}" = "mmc"; then
|
|
part uuid ${devtype} ${devnum}:${distro_bootpart} partuuid
|
|
fi
|
|
|
|
# Use PARTUUID if available (more reliable), otherwise fall back to rootdev label
|
|
if test -n "${partuuid}"; then
|
|
setenv rootdev "PARTUUID=${partuuid}"
|
|
fi
|
|
|
|
# Load armbianEnv.txt if it exists
|
|
echo "Attempting to load ${prefix}armbianEnv.txt from ${devtype} ${devnum}:${distro_bootpart} to ${load_addr}..."
|
|
if load ${devtype} ${devnum}:${distro_bootpart} ${load_addr} ${prefix}armbianEnv.txt; then
|
|
echo "Successfully loaded armbianEnv.txt (${filesize} bytes)"
|
|
if env import -t ${load_addr} ${filesize}; then
|
|
echo "Successfully imported environment from armbianEnv.txt"
|
|
else
|
|
echo "Warning: Failed to import environment from armbianEnv.txt"
|
|
fi
|
|
else
|
|
echo "armbianEnv.txt not found or failed to load - using default environment"
|
|
fi
|
|
|
|
echo "Final rootdev: ${rootdev}"
|
|
|
|
# Set console arguments
|
|
setenv consoleargs ""
|
|
if test "${console}" = "display" || test "${console}" = "both"; then
|
|
setenv consoleargs "console=tty1 ${consoleargs}"
|
|
fi
|
|
if test "${console}" = "serial" || test "${console}" = "both"; then
|
|
setenv consoleargs "console=ttyS0,115200n8 ${consoleargs}"
|
|
fi
|
|
if test "${earlycon}" = "on"; then
|
|
setenv consoleargs "earlycon ${consoleargs}"
|
|
fi
|
|
|
|
if test "${bootlogo}" = "true"; then
|
|
setenv consoleargs "splash plymouth.ignore-serial-consoles ${consoleargs}"
|
|
else
|
|
setenv consoleargs "splash=verbose ${consoleargs}"
|
|
fi
|
|
|
|
# MA35D1 specific: limit kernel memory if needed (for OP-TEE reserved memory)
|
|
# OP-TEE reserves 0x8f800000-0x90000000 (8MB)
|
|
setenv bootargs "root=${rootdev} rootwait rootfstype=${rootfstype} ${consoleargs} consoleblank=0 loglevel=${verbosity} ubootpart=${partuuid} ${extraargs} ${extraboardargs}"
|
|
|
|
if test "${docker_optimizations}" = "on"; then
|
|
setenv bootargs "${bootargs} cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory"
|
|
fi
|
|
|
|
echo "Final bootargs: ${bootargs}"
|
|
|
|
# Load kernel
|
|
echo "Loading kernel image to ${kernel_addr_r}..."
|
|
if load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} ${prefix}Image; then
|
|
echo "Kernel loaded successfully"
|
|
else
|
|
echo "ERROR: Failed to load kernel!"
|
|
exit
|
|
fi
|
|
|
|
# Load initramfs
|
|
echo "Loading initramfs to ${ramdisk_addr_r}..."
|
|
if load ${devtype} ${devnum}:${distro_bootpart} ${ramdisk_addr_r} ${prefix}uInitrd; then
|
|
setenv ramdisk_arg "${ramdisk_addr_r}:${filesize}"
|
|
echo "Initramfs loaded successfully (${filesize} bytes)"
|
|
else
|
|
echo "Warning: Failed to load initramfs, booting without it"
|
|
setenv ramdisk_arg "-"
|
|
fi
|
|
|
|
# Load device tree
|
|
echo "Loading device tree ${fdtfile} to ${fdt_addr_r}..."
|
|
if load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}dtb/${fdtfile}; then
|
|
echo "DTB loaded successfully"
|
|
else
|
|
echo "ERROR: Failed to load device tree!"
|
|
exit
|
|
fi
|
|
|
|
# Setup FDT for overlays
|
|
fdt addr ${fdt_addr_r}
|
|
fdt resize 65536
|
|
|
|
# Apply overlays if specified
|
|
for overlay_file in ${overlays}; do
|
|
if load ${devtype} ${devnum}:${distro_bootpart} ${load_addr} ${prefix}dtb/nuvoton/overlay/${overlay_file}.dtbo; then
|
|
echo "Applying kernel provided DT overlay ${overlay_file}.dtbo"
|
|
fdt apply ${load_addr} || setenv overlay_error "true"
|
|
fi
|
|
done
|
|
|
|
for overlay_file in ${user_overlays}; do
|
|
if load ${devtype} ${devnum}:${distro_bootpart} ${load_addr} ${prefix}overlay-user/${overlay_file}.dtbo; then
|
|
echo "Applying user provided DT overlay ${overlay_file}.dtbo"
|
|
fdt apply ${load_addr} || setenv overlay_error "true"
|
|
fi
|
|
done
|
|
|
|
if test "${overlay_error}" = "true"; then
|
|
echo "Error applying DT overlays, restoring original DT"
|
|
load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}dtb/${fdtfile}
|
|
fdt addr ${fdt_addr_r}
|
|
fdt resize 65536
|
|
fi
|
|
|
|
# Resize FDT to actual size
|
|
fdt resize
|
|
|
|
echo "Booting kernel..."
|
|
echo " kernel: ${kernel_addr_r}"
|
|
echo " initrd: ${ramdisk_arg}"
|
|
echo " dtb: ${fdt_addr_r}"
|
|
booti ${kernel_addr_r} ${ramdisk_arg} ${fdt_addr_r}
|
|
|
|
# Recompile with:
|
|
# mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr
|