Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 6 May 2015 19:58:12 +0000 (UTC)
From:      Glen Barber <gjb@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r282566 - in projects/release-arm-redux/release: . arm tools
Message-ID:  <201505061958.t46JwCX9099087@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: gjb
Date: Wed May  6 19:58:12 2015
New Revision: 282566
URL: https://svnweb.freebsd.org/changeset/base/282566

Log:
  Add tools/arm.subr to contain common subroutines used for
  building arm images.  This is similar to tools/vmimage.subr
  used for building virtual machine disk images.  By default,
  only arm_create_disk() and arm_install_base() contain real
  functionality here, and arm_install_uboot() must be overridden
  in the arm/KERNEL.conf file.
  
  In release.sh, make create_arm_armv6_build_release() do
  something now.
  
  In arm/BEAGLEBONE.conf, set IMAGE_SIZE, PART_SCHEME, FAT_SIZE,
  FAT_TYPE, and MD_ARGS, as well as make arm_install_uboot()
  functional.
  
  Parts of this were taken from disecting a previous BEAGLEBONE
  image, and other parts obtained from Crochet sources.
  
  Sponsored by:	The FreeBSD Foundation

Added:
  projects/release-arm-redux/release/tools/arm.subr   (contents, props changed)
Modified:
  projects/release-arm-redux/release/arm/BEAGLEBONE.conf
  projects/release-arm-redux/release/release.sh

Modified: projects/release-arm-redux/release/arm/BEAGLEBONE.conf
==============================================================================
--- projects/release-arm-redux/release/arm/BEAGLEBONE.conf	Wed May  6 19:47:31 2015	(r282565)
+++ projects/release-arm-redux/release/arm/BEAGLEBONE.conf	Wed May  6 19:58:12 2015	(r282566)
@@ -8,3 +8,24 @@ EMBEDDED_TARGET="arm"
 EMBEDDED_TARGET_ARCH="armv6"
 EMBEDDEDPORTS="sysutils/u-boot-beaglebone"
 KERNEL="BEAGLEBONE"
+IMAGE_SIZE="1G"
+PART_SCHEME="MBR"
+FAT_SIZE="2m"
+FAT_TYPE="12"
+MD_ARGS="-x 63 -y 255"
+
+arm_install_uboot() {
+	UBOOT_DIR="/usr/local/share/u-boot/u-boot-beaglebone"
+	FDT_DIR="${WORLDIR}/sys/boot/fdt/dts/arm"
+	mount_msdosfs /dev/${mddev}s1 ${DESTDIR}
+	cp -p ${UBOOT_DIR}/MLO ${DESTDIR}/MLO
+	cp -p ${UBOOT_DIR}/u-boot.img ${DESTDIR}/bb-uboot.img
+	cp -p ${FDT_DIR}/beaglebone.dts ${DESTDIR}/bbone.dts
+	cp -p ${FDT_DIR}/beaglebone.dts ${DESTDIR}/bbone.dtb
+	cp -p ${FDT_DIR}/beaglebone-black.dts ${DESTDIR}/bboneblk.dts
+	cp -p ${FDT_DIR}/beaglebone-black.dts ${DESTDIR}/bboneblk.dtb
+	touch ${DESTDIR}/bb-uEnv.txt
+	umount_loop ${DESTDIR}
+	
+	return 0
+}

Modified: projects/release-arm-redux/release/release.sh
==============================================================================
--- projects/release-arm-redux/release/release.sh	Wed May  6 19:47:31 2015	(r282565)
+++ projects/release-arm-redux/release/release.sh	Wed May  6 19:58:12 2015	(r282566)
@@ -327,6 +327,17 @@ chroot_arm_armv6_build_release() {
 	if [ -e "${RELENGDIR}/tools/${TARGET}.subr" ]; then
 		. "${RELENGDIR}/tools/${TARGET}.subr"
 	fi
+	. "${RELENGDIR}/arm/${KERNEL}.conf"
+	WORLDDIR="$(eval chroot ${CHROOTDIR} make -C /usr/src/release -V WORLDDIR)"
+	OBJDIR="$(eval chroot ${CHROOTDIR} make -C /usr/src/release -V .OBJDIR)"
+	DESTDIR="${OBJDIR}/${KERNEL}"
+	IMGBASE="${OBJDIR}/${KERNEL}.img"
+	mkdir -p ${DESTDIR}
+	truncate -s ${IMAGE_SIZE} ${IMGBASE}
+	mddev=$(mdconfig -f ${IMGBASE} ${MD_ARGS})
+	arm_create_disk
+	arm_install_base
+	arm_install_uboot
 
 	return 0
 } # chroot_arm_armv6_build_release()

Added: projects/release-arm-redux/release/tools/arm.subr
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/release-arm-redux/release/tools/arm.subr	Wed May  6 19:58:12 2015	(r282566)
@@ -0,0 +1,121 @@
+#!/bin/sh
+#-
+# Copyright (c) 2015 The FreeBSD Foundation
+# All rights reserved.
+#
+# Portions of this software were developed by Glen Barber
+# under sponsorship from the FreeBSD Foundation.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# Common subroutines used to build arm/armv6 images.
+#
+# $FreeBSD$
+#
+
+cleanup() {
+	if [ -c "${DESTDIR}/dev/null" ]; then
+		umount_loop ${DESTDIR}/dev 2>/dev/null
+	fi
+	umount_loop ${DESTDIR}
+	if [ ! -z "${mddev}" ]; then
+		mdconfig -d -u ${mddev}
+	fi
+
+	return 0
+}
+
+umount_loop() {
+	DIR=$1
+	i=0
+	sync
+	while ! umount ${DIR}; do
+		i=$(( $i + 1 ))
+		if [ $i -ge 10 ]; then
+			# This should never happen.  But, it has happened.
+			echo "Cannot umount(8) ${DIR}"
+			echo "Something has gone horribly wrong."
+			return 1
+		fi
+		sleep 1
+	done
+
+	return 0
+}
+
+arm_create_disk() {
+	# Create the target raw file and temporary work directory.
+	gpart create -s ${PART_SCHEME} ${IMGBASE}
+	gpart add -t '\!12' -a 63 -s ${FAT_SIZE} ${mddev}
+	gpart set -a active -i 1 ${mddev}
+	newfs_msdos -L msdosboot -F ${FAT_TYPE} /dev/${mddev}s1
+	gpart add -t freebsd ${mddev}
+	gpart create -s bsd ${mddev}s2
+	gpart add -t freebsd-ufs -a 64k /dev/${mddev}s2
+	newfs -U -L rootfs /dev/${mddev}s2a
+	tunefs -j enable -N enable /dev/${mddev}s2a
+
+	return 0
+}
+
+arm_install_base() {
+	mount /dev/${mddev}s2a ${DESTDIR}
+	cd ${WORLDDIR} && \
+		eval make TARGET=${EMBEDDED_TARGET} \
+			TARGET_ARCH=${EMBEDDED_TARGET_ARCH} \
+			DESTDIR=${DESTDIR} KERNCONF=${KERNEL} \
+			installworld installkernel distribution
+
+	echo '# Custom /etc/fstab for FreeBSD embedded images' \
+		> ${DESTDIR}/etc/fstab
+	echo "/dev/msdosfs/MSDOSBOOT /boot/msdos msdosfs rw,noatime 0 0" \
+		>> ${DESTDIR}/etc/fstab
+	echo "/dev/ufs/rootfs   /       ufs     rw      1       1" \
+		>> ${DESTDIR}/etc/fstab
+	echo "md /tmp mfs rw,noatime,-s30m 0 0" \
+		>> ${DESTDIR}/etc/fstab
+	echo "md /var/log mfs rw,noatime,-s15m 0 0" \
+		>> ${DESTDIR}/etc/fstab
+	echo "md /var/tmp mfs rw,noatime,-s12m 0 0" \
+		>> ${DESTDIR}/etc/fstab
+
+	local hostname
+	hostname="$(echo ${KERNEL} | tr '[:upper:]' '[:lower:]')"
+	echo "hostname=\"${hostname}\"" > ${DESTDIR}/etc/rc.conf
+	echo 'ifconfig_DEFAULT="DHCP"' >> ${DESTDIR}/etc/rc.conf
+	echo 'sshd_enable="YES"' >> ${DESTDIR}/etc/rc.conf
+	echo 'sendmail_enable="NONE"' >> ${DESTDIR}/etc/rc.conf
+	echo 'sendmail_submit_enable="NO"' >> ${DESTDIR}/etc/rc.conf
+	echo 'sendmail_outbound_enable="NO"' >> ${DESTDIR}/etc/rc.conf
+	echo 'sendmail_msp_queue_enable="NO"' >> ${DESTDIR}/etc/rc.conf
+
+	sync
+	umount_loop ${DESTDIR}
+
+	return 0
+}
+
+arm_install_uboot() {
+	# Override in the arm/KERNEL.conf file.
+
+	return 0
+}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201505061958.t46JwCX9099087>