svn commit: r259994 - in user/gjb/hacking/release-embedded: release release/arm tools/release tools/release/arm

Glen Barber gjb at FreeBSD.org
Sat Dec 28 02:27:07 UTC 2013


Author: gjb
Date: Sat Dec 28 02:27:06 2013
New Revision: 259994
URL: http://svnweb.freebsd.org/changeset/base/259994

Log:
  Implement cross build support for embedded devices into
  release.sh:
  
   - Modify release/release.sh to recognize an 'EMBEDDEDBUILD'
     variable.  When set, release/release.sh will build the chroot
     userland as is done for big-iron builds.
  
   - Instead of running the 'buildworld', 'buildkernel', and
     'release' targets in the chroot, a separate script is run.
     The script tools/release/${XDEV}/release.sh sets up the rest
     of the chroot workspace, such as installing ports that will
     be needed, and building the 'xdev' target.
  
   - crochet (by kientzle@) is checked out from the upstream
     repository (and if needed, u-boot, in the case of Raspberry
     Pi).
  
   - tools/release/${XDEV}/release.sh then runs crochet with
     a configuration file specific to the ${KERNCONF} being built.
  
  Note that this is effectively a first-pass attempt to integrate
  this into the release process.
  
  Tested against:	head at r259961
  Sponsored by:	The FreeBSD Foundation

Added:
  user/gjb/hacking/release-embedded/release/arm/
  user/gjb/hacking/release-embedded/release/arm/RPI-B.conf   (contents, props changed)
  user/gjb/hacking/release-embedded/release/arm/release.sh   (contents, props changed)
  user/gjb/hacking/release-embedded/tools/release/
  user/gjb/hacking/release-embedded/tools/release/arm/
  user/gjb/hacking/release-embedded/tools/release/arm/crochet-RPI-B.conf   (contents, props changed)
Modified:
  user/gjb/hacking/release-embedded/release/release.sh

Added: user/gjb/hacking/release-embedded/release/arm/RPI-B.conf
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/gjb/hacking/release-embedded/release/arm/RPI-B.conf	Sat Dec 28 02:27:06 2013	(r259994)
@@ -0,0 +1,37 @@
+#
+# $FreeBSD$
+#
+
+# This is only supported on amd64 right now.  It may work on
+# i386, but I do not have the hardware to test, so until I get
+# a VM set up to make sure, be cautious and assume it will not.
+if [ "$(uname -p)" != "amd64" ] || [ "$(uname -m)" != "amd64" ]; then
+    echo "This is only supported on amd64 right now."
+    exit 0
+fi
+
+# Build chroot configuration
+TARGET="amd64"
+TARGET_ARCH="amd64"
+SVNROOT="svn://svn.FreeBSD.org"
+SRCBRANCH="base/head at rHEAD"
+DOCBRANCH="doc/head at rHEAD"
+PORTBRANCH="ports/head at rHEAD"
+NODOC=yes
+
+# Build target configuration
+# Since this file is sourced by a script that runs another
+# script, these must be exported.
+set -a
+CHROOTDIR="/scratch"
+EMBEDDEDBUILD=1
+EMBEDDEDPORTS="lang/python textproc/gsed"
+XDEV="arm"
+XDEV_ARCH="arm"
+KERNEL="RPI-B"
+CROCHETSRC="https://github.com/kientzle/crochet-freebsd"
+CROCHETBRANCH="trunk"
+UBOOTSRC="https://github.com/gonzoua/u-boot-pi"
+UBOOTBRANCH="trunk"
+UBOOTDIR="/tmp/crochet/u-boot-rpi"
+set +a

Added: user/gjb/hacking/release-embedded/release/arm/release.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/gjb/hacking/release-embedded/release/arm/release.sh	Sat Dec 28 02:27:06 2013	(r259994)
@@ -0,0 +1,57 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+# This script is intended to be called by release/release.sh to build ARM
+# images for release.  It is not intended to be run directly.  This sets up
+# the software needed within a build chroot, then runs crochet to provide
+# downloadable images for embedded devices.
+
+set -e
+
+install_crochet() {
+	chroot ${CHROOTDIR} svn co -q ${CROCHETSRC}/${CROCHETBRANCH} \
+		/tmp/crochet
+}
+
+install_uboot() {
+	# Only fetch u-boot sources if UBOOTSRC is set; otherwise it is
+	# not needed.
+	if [ "X${UBOOTSRC}" != "X" ]; then
+		continue
+	else
+		return 0
+	fi
+	chroot ${CHROOTDIR} svn co -q ${UBOOTSRC}/${UBOOTBRANCH} \
+		/${UBOOTDIR}
+}
+
+main() {
+	# Build the 'xdev' target for crochet.
+	eval chroot ${CHROOTDIR} make -C /usr/src \
+		XDEV=${XDEV} XDEV_ARCH=${XDEV_ARCH} WITH_GCC=1 xdev
+
+	# Run the ldconfig(8) startup script so /var/run/ld-elf*.so.hints
+	# is created.
+	eval chroot ${CHROOTDIR} /etc/rc.d/ldconfig forcerestart
+	# Install security/ca_root_nss since we need to check the https
+	# certificate of github.
+	eval chroot ${CHROOTDIR} make -C /usr/ports/security/ca_root_nss \
+		OPTIONS_SET="ETCSYMLINK" BATCH=1 FORCE_PKG_REGISTER=1 \
+		install clean distclean
+	EMBEDDEDPORTS="${EMBEDDEDPORTS} devel/subversion"
+	for _PORT in ${EMBEDDEDPORTS}; do
+		eval chroot ${CHROOTDIR} make -C /usr/ports/${_PORT} \
+			BATCH=1 FORCE_PKG_REGISTER=1 install clean distclean
+	done
+
+	install_crochet
+	install_uboot
+	mkdir -p ${CHROOTDIR}/tmp/crochet/work
+	eval chroot ${CHROOTDIR} /bin/sh /tmp/crochet/crochet.sh \
+		-c /usr/src/tools/release/${XDEV}/crochet-${KERNEL}.conf
+}
+
+main "$@"
+exit 0

Modified: user/gjb/hacking/release-embedded/release/release.sh
==============================================================================
--- user/gjb/hacking/release-embedded/release/release.sh	Sat Dec 28 02:15:30 2013	(r259993)
+++ user/gjb/hacking/release-embedded/release/release.sh	Sat Dec 28 02:27:06 2013	(r259994)
@@ -45,6 +45,9 @@ SRCBRANCH="base/head at rHEAD"
 DOCBRANCH="doc/head at rHEAD"
 PORTBRANCH="ports/head at rHEAD"
 
+# Set for embedded device builds.
+EMBEDDEDBUILD=
+
 # Sometimes one needs to checkout src with --force svn option.
 # If custom kernel configs copied to src tree before checkout, e.g.
 SRC_FORCE_CHECKOUT=
@@ -98,6 +101,11 @@ while getopts c: opt; do
 done
 shift $(($OPTIND - 1))
 
+if [ "x${EMBEDDEDBUILD}" != "x" ]; then
+	WITH_DVD=
+	NODOC=yes
+fi
+
 # If PORTS is set and NODOC is unset, force NODOC=yes because the ports tree
 # is required to build the documentation set.
 if [ "x${NOPORTS}" != "x" ] && [ "x${NODOC}" = "x" ]; then
@@ -184,6 +192,21 @@ if [ -e ${SRC_CONF} ] && [ ! -c ${SRC_CO
 	cp ${SRC_CONF} ${CHROOTDIR}/${SRC_CONF}
 fi
 
+# Embedded builds do not use the 'make release' target.
+if [ "X${EMBEDDEDBUILD}" != "X" ]; then
+	if [ -e ${CHROOTDIR}/usr/src/release/${XDEV}/release.sh ]; then
+		/bin/sh ${CHROOTDIR}/usr/src/release/${XDEV}/release.sh
+	fi
+	# If the script does not exist for this architecture, exit.
+	# This probably should be checked earlier, but allowing the rest
+	# of the build process to get this far will at least set up the
+	# chroot environment for testing.
+	exit 0
+else
+	# Not embedded.
+	continue
+fi
+
 if [ -d ${CHROOTDIR}/usr/ports ]; then
 	# Run ldconfig(8) in the chroot directory so /var/run/ld-elf*.so.hints
 	# is created.  This is needed by ports-mgmt/pkg.

Added: user/gjb/hacking/release-embedded/tools/release/arm/crochet-RPI-B.conf
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/gjb/hacking/release-embedded/tools/release/arm/crochet-RPI-B.conf	Sat Dec 28 02:27:06 2013	(r259994)
@@ -0,0 +1,29 @@
+#
+# $FreeBSD$
+#
+
+# This is the configuration file for use with crochet to produce
+# FreeBSD Raspberry Pi images.
+
+board_setup RaspberryPi
+#option UsrPorts
+#option UsrSrc
+# 4GB
+option ImageSize 3900mb
+
+export MAKEOBJDIRPREFIX=/usr/obj
+FREEBSD_SRC=/usr/src
+__MAKE_CONF=/dev/null
+SRCCONF=/dev/null
+WORKDIR=/usr/obj
+_BRANCH=$(make -C ${FREEBSD_SRC}/release -V BRANCH)
+_REVISION=$(make -C ${FREEBSD_SRC}/release -V REVISION)
+KERNCONF=RPI-B
+FREEBSD_BUILDWORLD_EXTRA_ARGS=""
+FREEBSD_INSTALLWORLD_EXTRA_ARGS=""
+FREEBSD_BUILDKERNEL_EXTRA_ARGS=""
+FREEBSD_INSTALLKERNEL_EXTRA_ARGS=""
+FREEBSD_WORLD_EXTRA_ARGS=""
+FREEBSD_KERNEL_EXTRA_ARGS=""
+FREEBSD_EXTRA_ARGS=""
+IMG=${WORKDIR}/FreeBSD-${_REVISION}-${_BRANCH}-${KERNCONF}.img


More information about the svn-src-user mailing list