Module Name:    src
Committed By:   jmcneill
Date:           Thu May 28 10:22:49 UTC 2020

Modified Files:
        src/etc/etc.evbarm: Makefile.inc
Added Files:
        src/distrib/utils/embedded/conf: arm64mbr.conf

Log Message:
Create a separate Arm64 image that uses MBR partitioning. Amlogic SoCs
require the bootloader to be installed on SD cards at LBA1 which makes
them incompatible with GPT images.


To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 src/distrib/utils/embedded/conf/arm64mbr.conf
cvs rdiff -u -r1.119 -r1.120 src/etc/etc.evbarm/Makefile.inc

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/etc/etc.evbarm/Makefile.inc
diff -u src/etc/etc.evbarm/Makefile.inc:1.119 src/etc/etc.evbarm/Makefile.inc:1.120
--- src/etc/etc.evbarm/Makefile.inc:1.119	Sun May 24 14:44:11 2020
+++ src/etc/etc.evbarm/Makefile.inc	Thu May 28 10:22:49 2020
@@ -1,4 +1,4 @@
-#	$NetBSD: Makefile.inc,v 1.119 2020/05/24 14:44:11 jmcneill Exp $
+#	$NetBSD: Makefile.inc,v 1.120 2020/05/28 10:22:49 jmcneill Exp $
 #
 #	etc.evbarm/Makefile.inc -- evbarm-specific etc Makefile targets
 #
@@ -146,6 +146,9 @@ SNAP_MD_POST_DEPS+=	smp_armv7
 smp_arm64: __mkimage
 MKI_OPTS.smp_arm64=	-K ${IMAGE.kern}
 SNAP_MD_POST_DEPS+=	smp_arm64
+smp_arm64mbr: __mkimage
+MKI_OPTS.smp_arm64mbr=	-K ${IMAGE.kern}
+SNAP_MD_POST_DEPS+=	smp_arm64mbr
 .endif
 
 .if !empty(KERNEL_SETS:MRPI)

Added files:

Index: src/distrib/utils/embedded/conf/arm64mbr.conf
diff -u /dev/null src/distrib/utils/embedded/conf/arm64mbr.conf:1.1
--- /dev/null	Thu May 28 10:22:49 2020
+++ src/distrib/utils/embedded/conf/arm64mbr.conf	Thu May 28 10:22:49 2020
@@ -0,0 +1,110 @@
+# $NetBSD: arm64mbr.conf,v 1.1 2020/05/28 10:22:49 jmcneill Exp $
+# ARM64 (MBR partitioning) customization script used by mkimage
+#
+board=arm64mbr
+hostname=arm64
+console=fb
+resize=true
+
+. ${DIR}/conf/evbarm.conf
+
+kernel_GENERIC64="GENERIC64"
+
+make_label() {
+	make_label_evbarm
+}
+
+make_fstab() {
+	make_fstab_evbarm
+}
+
+customize() {
+	customize_evbarm
+	cat >> "${mnt}/etc/rc.conf" << EOF
+mdnsd=YES
+devpubd=YES
+wscons=\$(dev_exists wsdisplay0)
+ec2_init=\$(dev_exists ena0)
+EOF
+}
+
+populate_common() {
+	# Add EC2 init script
+	cp ${DIR}/files/ec2_init ${mnt}/etc/rc.d/ec2_init
+	echo "./etc/rc.d/ec2_init type=file uname=root gname=wheel mode=0555" \
+	    >> "$tmp/selected_sets"
+
+	# Rename kernel to netbsd.img
+	mv "${mnt}/boot/netbsd-${kernel_GENERIC64}.img" "${mnt}/boot/netbsd.img"
+
+	# Install EFI bootloader
+	mkdir -p "${mnt}/boot/EFI/BOOT"
+	cp "${release}/usr/mdec/bootaa64.efi" "${mnt}/boot/EFI/BOOT/bootaa64.efi"
+
+	# Install kernel to root of the FFS partition
+	${GZIP_CMD} -dc ${kernel}/netbsd-${kernel_GENERIC64}.gz > "${mnt}/netbsd"
+	echo "./netbsd type=file uname=root gname=wheel mode=0755" \
+	    >> "$tmp/selected_sets"
+}
+
+
+populate_rpi() {
+	firmwaredir="${src}/external/broadcom/rpi-firmware/dist"
+	firmwarefiles="LICENCE.broadcom bootcode.bin fixup4cd.dat fixup4.dat fixup_cd.dat fixup.dat start4cd.elf start4.elf start_cd.elf start.elf"
+
+	cat > "${mnt}/boot/cmdline.txt" << EOF
+root=ld0a console=${console}
+EOF
+
+	cat > "${mnt}/boot/config.txt" << EOF
+#
+upstream_kernel=1
+#
+arm_64bit=1
+os_prefix=dtb/broadcom/
+cmdline=../../cmdline.txt
+kernel=/netbsd.img
+kernel_address=0x200000
+enable_uart=1
+force_turbo=0
+EOF
+
+	echo "${bar} installing firmware files ${bar}"
+	(cd "${mnt}/boot" &&
+		for f in ${firmwarefiles}; do
+			echo " $f"
+			cp "${firmwaredir}/${f}" .
+		done
+	)
+}
+
+populate() {
+	echo "${bar} looking for kernel in ${kernel} ${bar}"
+	kernels=""
+	k="$kernel_GENERIC64"
+
+	# .img kernel
+	f="${kernel}/netbsd-${k}.img.gz"
+	test -f "${f}" && kernels="${kernels} ${f}"
+
+	# install files to /boot partition
+	for k in ${kernels}; do
+		tgt="$(basename ${k} | sed 's/\.gz$//')"
+		echo "${bar} installing ${k} to /boot/${tgt} ${bar}"
+		case "${k}" in
+		*.gz)
+			${GZIP_CMD} -dc "${k}" > "${mnt}/boot/${tgt}"
+			;;
+		*)
+			cp "${k}" "${mnt}/boot/${tgt}"
+			;;
+		esac ||
+			fail "Copy of ${k} to ${mnt}/boot/${tgt} failed"
+	done
+
+	# Board specific configuration
+	populate_rpi
+
+	# common configuration
+	populate_common
+}

Reply via email to