Author: gjb
Date: Wed May 20 19:32:57 2015
New Revision: 283161
URL: https://svnweb.freebsd.org/changeset/base/283161

Log:
  MFC r282500, r282693:
   r282500:
    Add initial support for building RPI2 images.
  
    In release.sh, allow overriding buildenv_setup() before
    the handoff to arm/release.sh.
  
    Copy arm/RPI-B.conf -> arm/RPI2.conf, set UBOOT_PORT and
    the correct KERNEL, and add the buildenv_setup() override
    to install the sysutils/u-boot-rpi2 port/package.
  
    Copy tools/arm/crochet-RPI-B.conf -> tools/arm/crochet-RPI2.conf,
    and set the correct entries for the RaspberryPi2 board.
  
   r282693:
    Merge ^/projects/release-arm-redux into ^/head.
  
    Of note:
  
    - This commit adds native FreeBSD/arm release build support without
      requiring out-of-tree utilities.
  
    - Part of this merge removes the WANDBOARD-{SOLO,DUAL,QUAD} kernel
      configuration files, for which the IMX6 kernel configuration file
      should be used instead.
  
    - The resulting images have a 'freebsd' user (password 'freebsd'),
      to allow ssh(1) access when console access is not available (VGA
      or serial).  The default 'root' user password is set to 'root'.
  
    - The /etc/ttys file for arm images now enable both ttyv0 and ttyu0
      by default.
  
  Note:  The RPI2 kernel configuration does not yet exist in stable/10,
  however the merge conflicts needed to be properly resolved.
  Additionally, SRCBRANCH has been set to base/stable/10 in the updated
  arm configuration files as part of this commit.
  
  Sponsored by: The FreeBSD Foundation

Added:
  stable/10/release/arm/RPI2.conf
     - copied, changed from r282500, head/release/arm/RPI2.conf
  stable/10/release/arm/WANDBOARD.conf
     - copied, changed from r282693, head/release/arm/WANDBOARD.conf
  stable/10/release/tools/arm.subr
     - copied unchanged from r282693, head/release/tools/arm.subr
Deleted:
  stable/10/release/arm/WANDBOARD-QUAD.conf
  stable/10/release/arm/ZEDBOARD.conf
  stable/10/release/arm/release.sh
  stable/10/release/tools/arm/
  stable/10/sys/arm/conf/WANDBOARD-DUAL
  stable/10/sys/arm/conf/WANDBOARD-QUAD
  stable/10/sys/arm/conf/WANDBOARD-SOLO
Modified:
  stable/10/etc/etc.arm/ttys
  stable/10/release/arm/BEAGLEBONE.conf
  stable/10/release/arm/PANDABOARD.conf
  stable/10/release/arm/RPI-B.conf
  stable/10/release/release.sh
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/etc/etc.arm/ttys
==============================================================================
--- stable/10/etc/etc.arm/ttys  Wed May 20 18:56:29 2015        (r283160)
+++ stable/10/etc/etc.arm/ttys  Wed May 20 19:32:57 2015        (r283161)
@@ -29,7 +29,7 @@
 # when going to single-user mode.
 console        none                            unknown off secure
 #
-ttyv0  "/usr/libexec/getty Pc"         xterm   off  secure
+ttyv0  "/usr/libexec/getty Pc"         xterm   onifconsole  secure
 # Virtual terminals
 ttyv1  "/usr/libexec/getty Pc"         xterm   off  secure
 ttyv2  "/usr/libexec/getty Pc"         xterm   off  secure
@@ -41,7 +41,7 @@ ttyv7 "/usr/libexec/getty Pc"         xterm   off
 #ttyv8 "/usr/local/bin/xdm -nodaemon"  xterm   off secure
 # Serial terminals
 # The 'dialup' keyword identifies dialin lines to login, fingerd etc.
-ttyu0  "/usr/libexec/getty std.9600"   vt100   on  secure
+ttyu0  "/usr/libexec/getty 3wire"      vt100   onifconsole  secure
 ttyu1  "/usr/libexec/getty std.9600"   dialup  off secure
 ttyu2  "/usr/libexec/getty std.9600"   dialup  off secure
 ttyu3  "/usr/libexec/getty std.9600"   dialup  off secure

Modified: stable/10/release/arm/BEAGLEBONE.conf
==============================================================================
--- stable/10/release/arm/BEAGLEBONE.conf       Wed May 20 18:56:29 2015        
(r283160)
+++ stable/10/release/arm/BEAGLEBONE.conf       Wed May 20 19:32:57 2015        
(r283161)
@@ -2,29 +2,36 @@
 # $FreeBSD$
 #
 
-# Build chroot configuration
-TARGET="amd64"
-TARGET_ARCH="amd64"
-SVNROOT="svn://svn.FreeBSD.org/"
 SRCBRANCH="base/stable/10@rHEAD"
-DOCBRANCH="doc/head@rHEAD"
-PORTBRANCH="ports/head@rHEAD"
-NODOC=yes
-
-# Build target configuration
-# Since this file is sourced by a script that runs another
-# script, these must be exported.
-set -a
-WORLD_FLAGS="-j $(sysctl -n hw.ncpu)"
-KERNEL_FLAGS="-j $(( $(( $(sysctl -n hw.ncpu) + 1 )) / 2 ))"
-CHROOTDIR="/scratch"
 EMBEDDEDBUILD=1
-EMBEDDEDPORTS="lang/python textproc/gsed"
-XDEV="arm"
-XDEV_ARCH="armv6"
-XDEV_FLAGS="WITH_GCC=1 WITH_GNUCXX=1 WITHOUT_CLANG_IS_CC=1"
+EMBEDDED_TARGET="arm"
+EMBEDDED_TARGET_ARCH="armv6"
+EMBEDDEDPORTS="sysutils/u-boot-beaglebone"
 KERNEL="BEAGLEBONE"
-CROCHETSRC="https://github.com/freebsd/crochet";
-CROCHETBRANCH="trunk@rHEAD"
-set +a
+WORLD_FLAGS="${WORLD_FLAGS} UBLDR_LOADADDR=0x88000000"
+IMAGE_SIZE="1G"
+PART_SCHEME="MBR"
+FAT_SIZE="2m"
+FAT_TYPE="12"
+MD_ARGS="-x 63 -y 255"
+NODOC=1
 
+arm_install_uboot() {
+       UBOOT_DIR="/usr/local/share/u-boot/u-boot-beaglebone"
+       FATMOUNT="${DESTDIR%${KERNEL}}/fat"
+       UFSMOUNT="${DESTDIR%${KERNEL}}/ufs"
+       chroot ${CHROOTDIR} mkdir -p "${FATMOUNT}" "${UFSMOUNT}"
+       chroot ${CHROOTDIR} mount_msdosfs /dev/${mddev}s1 ${FATMOUNT}
+       chroot ${CHROOTDIR} mount /dev/${mddev}s2a ${UFSMOUNT}
+       chroot ${CHROOTDIR} cp -p ${UBOOT_DIR}/MLO  ${FATMOUNT}/MLO
+       chroot ${CHROOTDIR} cp -p ${UBOOT_DIR}/u-boot.img ${FATMOUNT}/u-boot.img
+       chroot ${CHROOTDIR} cp -p ${UFSMOUNT}/boot/ubldr ${FATMOUNT}/ubldr
+       chroot ${CHROOTDIR} touch ${UFSMOUNT}/firstboot
+       sync
+       umount_loop ${CHROOTDIR}/${FATMOUNT}
+       umount_loop ${CHROOTDIR}/${UFSMOUNT}
+       chroot ${CHROOTDIR} rmdir ${FATMOUNT}
+       chroot ${CHROOTDIR} rmdir ${UFSMOUNT}
+       
+       return 0
+}

Modified: stable/10/release/arm/PANDABOARD.conf
==============================================================================
--- stable/10/release/arm/PANDABOARD.conf       Wed May 20 18:56:29 2015        
(r283160)
+++ stable/10/release/arm/PANDABOARD.conf       Wed May 20 19:32:57 2015        
(r283161)
@@ -2,29 +2,36 @@
 # $FreeBSD$
 #
 
-# Build chroot configuration
-TARGET="amd64"
-TARGET_ARCH="amd64"
-SVNROOT="svn://svn.FreeBSD.org/"
 SRCBRANCH="base/stable/10@rHEAD"
-DOCBRANCH="doc/head@rHEAD"
-PORTBRANCH="ports/head@rHEAD"
-NODOC=yes
-
-# Build target configuration
-# Since this file is sourced by a script that runs another
-# script, these must be exported.
-set -a
-WORLD_FLAGS="-j $(sysctl -n hw.ncpu)"
-KERNEL_FLAGS="-j $(( $(( $(sysctl -n hw.ncpu) + 1 )) / 2 ))"
-CHROOTDIR="/scratch"
 EMBEDDEDBUILD=1
-EMBEDDEDPORTS="lang/python textproc/gsed"
-XDEV="arm"
-XDEV_ARCH="armv6"
-XDEV_FLAGS="WITH_GCC=1 WITH_GNUCXX=1 WITHOUT_CLANG_IS_CC=1"
+EMBEDDED_TARGET="arm"
+EMBEDDED_TARGET_ARCH="armv6"
+EMBEDDEDPORTS="sysutils/u-boot-pandaboard"
 KERNEL="PANDABOARD"
-CROCHETSRC="https://github.com/freebsd/crochet";
-CROCHETBRANCH="trunk@rHEAD"
-set +a
+NODOC=1
+WORLD_FLAGS="${WORLD_FLAGS} UBLDR_LOADADDR=0x88000000"
+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-pandaboard"
+       FATMOUNT="${DESTDIR%${KERNEL}}/fat"
+       UFSMOUNT="${DESTDIR%${KERNEL}}/ufs"
+       chroot ${CHROOTDIR} mkdir -p "${FATMOUNT}" "${UFSMOUNT}"
+       chroot ${CHROOTDIR} mount_msdosfs /dev/${mddev}s1 ${FATMOUNT}
+       chroot ${CHROOTDIR} mount /dev/${mddev}s2a ${UFSMOUNT}
+       chroot ${CHROOTDIR} cp -p ${UBOOT_DIR}/MLO ${FATMOUNT}/MLO
+       chroot ${CHROOTDIR} cp -p ${UBOOT_DIR}/u-boot.img ${FATMOUNT}/u-boot.img
+       chroot ${CHROOTDIR} cp -p ${UFSMOUNT}/boot/ubldr ${FATMOUNT}/ubldr
+       chroot ${CHROOTDIR} touch ${UFSMOUNT}/firstboot
+       sync
+       umount_loop ${CHROOTDIR}/${FATMOUNT}
+       umount_loop ${CHROOTDIR}/${UFSMOUNT}
+       chroot ${CHROOTDIR} rmdir ${FATMOUNT}
+       chroot ${CHROOTDIR} rmdir ${UFSMOUNT}
+       
+       return 0
+}

Modified: stable/10/release/arm/RPI-B.conf
==============================================================================
--- stable/10/release/arm/RPI-B.conf    Wed May 20 18:56:29 2015        
(r283160)
+++ stable/10/release/arm/RPI-B.conf    Wed May 20 19:32:57 2015        
(r283161)
@@ -2,31 +2,42 @@
 # $FreeBSD$
 #
 
-# Build chroot configuration
-TARGET="amd64"
-TARGET_ARCH="amd64"
-SVNROOT="svn://svn.FreeBSD.org/"
 SRCBRANCH="base/stable/10@rHEAD"
-DOCBRANCH="doc/head@rHEAD"
-PORTBRANCH="ports/head@rHEAD"
-NODOC=yes
-
-# Build target configuration
-# Since this file is sourced by a script that runs another
-# script, these must be exported.
-set -a
-WORLD_FLAGS="-j $(sysctl -n hw.ncpu)"
-KERNEL_FLAGS="-j $(( $(( $(sysctl -n hw.ncpu) + 1 )) / 2 ))"
-CHROOTDIR="/scratch"
 EMBEDDEDBUILD=1
-EMBEDDEDPORTS="lang/python textproc/gsed"
-XDEV="arm"
-XDEV_ARCH="armv6"
-XDEV_FLAGS="WITH_GCC=1 WITH_GNUCXX=1 WITHOUT_CLANG_IS_CC=1"
+EMBEDDED_TARGET="arm"
+EMBEDDED_TARGET_ARCH="armv6"
+EMBEDDEDPORTS="sysutils/u-boot-rpi"
 KERNEL="RPI-B"
-CROCHETSRC="https://github.com/freebsd/crochet";
-CROCHETBRANCH="trunk@rHEAD"
-UBOOTSRC="https://github.com/gonzoua/u-boot-pi";
-UBOOTBRANCH="trunk"
-UBOOTDIR="/tmp/crochet/u-boot-rpi"
-set +a
+WORLD_FLAGS="${WORLD_FLAGS} UBLDR_LOADADDR=0x2000000"
+IMAGE_SIZE="1G"
+PART_SCHEME="MBR"
+FAT_SIZE="17m"
+FAT_TYPE="16"
+MD_ARGS="-x 63 -y 255"
+NODOC=1
+
+arm_install_uboot() {
+       UBOOT_DIR="/usr/local/share/u-boot/u-boot-rpi"
+       UBOOT_FILES="bootcode.bin config.txt fixup.dat fixup_cd.dat \
+               start.elf start_cd.elf u-boot.img"
+       FATMOUNT="${DESTDIR%${KERNEL}}/fat"
+       UFSMOUNT="${DESTDIR%${KERNEL}}/ufs"
+       chroot ${CHROOTDIR} mkdir -p "${FATMOUNT}" "${UFSMOUNT}"
+       chroot ${CHROOTDIR} mount_msdosfs /dev/${mddev}s1 ${FATMOUNT}
+       chroot ${CHROOTDIR} mount /dev/${mddev}s2a ${UFSMOUNT}
+       for _UF in ${UBOOT_FILES}; do
+               chroot ${CHROOTDIR} cp -p ${UBOOT_DIR}/${_UF} \
+                       ${FATMOUNT}/${_UF}
+       done
+       chroot ${CHROOTDIR} cp -p ${UFSMOUNT}/boot/ubldr ${FATMOUNT}/ubldr
+       chroot ${CHROOTDIR} cp -p ${UFSMOUNT}/boot/dtb/rpi.dtb \
+               ${FATMOUNT}/rpi.dtb
+       chroot ${CHROOTDIR} touch ${UFSMOUNT}/firstboot
+       sync
+       umount_loop ${CHROOTDIR}/${FATMOUNT}
+       umount_loop ${CHROOTDIR}/${UFSMOUNT}
+       chroot ${CHROOTDIR} rmdir ${FATMOUNT}
+       chroot ${CHROOTDIR} rmdir ${UFSMOUNT}
+       
+       return 0
+}

Copied and modified: stable/10/release/arm/RPI2.conf (from r282500, 
head/release/arm/RPI2.conf)
==============================================================================
--- head/release/arm/RPI2.conf  Tue May  5 16:28:04 2015        (r282500, copy 
source)
+++ stable/10/release/arm/RPI2.conf     Wed May 20 19:32:57 2015        
(r283161)
@@ -3,51 +3,42 @@
 # $FreeBSD$
 #
 
-# Global variables.
-export SVNROOT="svn://svn.FreeBSD.org/"
-export SRCBRANCH="base/head@rHEAD"
-export DOCBRANCH="doc/head@rHEAD"
-export PORTBRANCH="ports/head@rHEAD"
-export NODOC=yes
-export WORLD_FLAGS="-j $(sysctl -n hw.ncpu)"
-export KERNEL_FLAGS="-j $(( $(( $(sysctl -n hw.ncpu) + 1 )) / 2 ))"
-export CHROOTDIR="/scratch"
-export EMBEDDEDBUILD=1
-export UBOOT_PORT="sysutils/u-boot-rpi2"
+SRCBRANCH="base/stable/10@rHEAD"
+EMBEDDEDBUILD=1
+EMBEDDED_TARGET="arm"
+EMBEDDED_TARGET_ARCH="armv6"
+EMBEDDEDPORTS="sysutils/u-boot-rpi2"
+KERNEL="RPI2"
+NODOC=1
+WORLD_FLAGS="${WORLD_FLAGS} UBLDR_LOADADDR=0x2000000"
+IMAGE_SIZE="1G"
+PART_SCHEME="MBR"
+FAT_SIZE="50m"
+FAT_TYPE="16"
+MD_ARGS="-x 63 -y 255"
 
-# Build chroot configuration
-load_chroot_env() {
-       # Avoid collision with TARGET and XDEV.
-       unset XDEV XDEV_ARCH KERNEL
-       export TARGET="amd64"
-       export TARGET_ARCH="amd64"
-}
-
-# Build target configuration
-load_target_env() {
-       # Avoid collision with TARGET and XDEV.
-       unset TARGET TARGET_ARCH
-       export XDEV="arm"
-       export XDEV_ARCH="armv6"
-       export XDEV_FLAGS="WITH_GCC=1 WITH_GCC_BOOTSTRAP=1 
WITHOUT_CLANG_IS_CC=1"
-       export XDEV_FLAGS="${XDEV_FLAGS} MK_TESTS=no"
-       export KERNEL="RPI2"
-       export CROCHETSRC="https://github.com/freebsd/crochet";
-       export CROCHETBRANCH="trunk@rHEAD"
-}
-
-# Build environment setup
-buildenv_setup() {
-       if [ ! -d ${CHROOTDIR}/usr/ports/${UBOOT_PORT} ]; then
-               chroot ${CHROOTDIR} env ASSUME_ALWAYS_YES=yes \
-                       /usr/sbin/pkg bootstrap -y
-               chroot ${CHROOTDIR} env ASSUME_ALWAYS_YES=yes \
-                       /usr/sbin/pkg install -y ${UBOOT_PORT}
-       else
-               chroot ${CHROOTDIR} env BATCH=1 \
-                       make -C /usr/ports/${UBOOT_PORT} \
-                       all install clean
-       fi
+arm_install_uboot() {
+       UBOOT_DIR="/usr/local/share/u-boot/u-boot-rpi2"
+       UBOOT_FILES="bootcode.bin config.txt fixup.dat fixup_cd.dat \
+               fixup_x.dat start.elf start_cd.elf start_x.elf u-boot.bin"
+       FATMOUNT="${DESTDIR%${KERNEL}}/fat"
+       UFSMOUNT="${DESTDIR%${KERNEL}}/ufs"
+       chroot ${CHROOTDIR} mkdir -p "${FATMOUNT}" "${UFSMOUNT}"
+       chroot ${CHROOTDIR} mount_msdosfs /dev/${mddev}s1 ${FATMOUNT}
+       chroot ${CHROOTDIR} mount /dev/${mddev}s2a ${UFSMOUNT}
+       for _UF in ${UBOOT_FILES}; do
+               chroot ${CHROOTDIR} cp -p ${UBOOT_DIR}/${_UF} \
+                       ${FATMOUNT}/${_UF}
+       done
+       chroot ${CHROOTDIR} cp -p ${UFSMOUNT}/boot/ubldr ${FATMOUNT}/ubldr
+       chroot ${CHROOTDIR} cp -p ${UFSMOUNT}/boot/dtb/rpi2.dtb \
+               ${FATMOUNT}/rpi2.dtb
+       chroot ${CHROOTDIR} touch ${UFSMOUNT}/firstboot
+       sync
+       umount_loop ${CHROOTDIR}/${FATMOUNT}
+       umount_loop ${CHROOTDIR}/${UFSMOUNT}
+       chroot ${CHROOTDIR} rmdir ${FATMOUNT}
+       chroot ${CHROOTDIR} rmdir ${UFSMOUNT}
+       
        return 0
 }
-

Copied and modified: stable/10/release/arm/WANDBOARD.conf (from r282693, 
head/release/arm/WANDBOARD.conf)
==============================================================================
--- head/release/arm/WANDBOARD.conf     Sat May  9 21:08:12 2015        
(r282693, copy source)
+++ stable/10/release/arm/WANDBOARD.conf        Wed May 20 19:32:57 2015        
(r283161)
@@ -3,6 +3,7 @@
 # $FreeBSD$
 #
 
+SRCBRANCH="base/stable/10@rHEAD"
 EMBEDDEDBUILD=1
 EMBEDDED_TARGET="arm"
 EMBEDDED_TARGET_ARCH="armv6"

Modified: stable/10/release/release.sh
==============================================================================
--- stable/10/release/release.sh        Wed May 20 18:56:29 2015        
(r283160)
+++ stable/10/release/release.sh        Wed May 20 19:32:57 2015        
(r283161)
@@ -36,250 +36,359 @@
 # $FreeBSD$
 #
 
-PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin"
-export PATH
+export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin"
 
-# The directory within which the release will be built.
-CHROOTDIR="/scratch"
-RELENGDIR="$(realpath $(dirname $(basename ${0})))"
-
-# The default version control system command to obtain the sources.
-VCSCMD="svn checkout"
-
-# The default svn checkout server, and svn branches for src/, doc/,
-# and ports/.
-SVNROOT="svn://svn.FreeBSD.org/"
-SRCBRANCH="base/head@rHEAD"
-DOCBRANCH="doc/head@rHEAD"
-PORTBRANCH="ports/head@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=
-
-# The default make.conf and src.conf to use.  Set to /dev/null
-# by default to avoid polluting the chroot(8) environment with
-# non-default settings.
-MAKE_CONF="/dev/null"
-SRC_CONF="/dev/null"
-
-# The number of make(1) jobs, defaults to the number of CPUs available for
-# buildworld, and half of number of CPUs available for buildkernel.
-WORLD_FLAGS="-j$(sysctl -n hw.ncpu)"
-KERNEL_FLAGS="-j$(( $(( $(sysctl -n hw.ncpu) + 1 )) / 2))"
-
-MAKE_FLAGS="-s"
-
-# The name of the kernel to build, defaults to GENERIC.
-KERNEL="GENERIC"
-
-# Set to non-empty value to disable checkout of doc/ and/or ports/.  Disabling
-# ports/ checkout also forces NODOC to be set.
-NODOC=
-NOPORTS=
-
-# Set to non-empty value to build dvd1.iso as part of the release.
-WITH_DVD=
-WITH_COMPRESSED_IMAGES=
-
-# Set to non-empty value to build virtual machine images as part of
-# the release.
-WITH_VMIMAGES=
-WITH_COMPRESSED_VMIMAGES=
-
-# Set to non-empty value to build virtual machine images for various
-# cloud providers as part of the release.
-WITH_CLOUDWARE=
+VERSION=2
+
+# Prototypes that can be redefined per-chroot or per-target.
+load_chroot_env() { }
+load_target_env() { }
+buildenv_setup() { }
 
 usage() {
        echo "Usage: $0 [-c release.conf]"
        exit 1
 }
 
-while getopts c: opt; do
-       case ${opt} in
-       c)
-               RELEASECONF="${OPTARG}"
-               if [ ! -e "${RELEASECONF}" ]; then
-                       echo "ERROR: Configuration file ${RELEASECONF} does not 
exist."
-                       exit 1
-               fi
-               # Source the specified configuration file for overrides
-               . ${RELEASECONF}
-               ;;
-       \?)
-               usage
-               ;;
-       esac
-done
-shift $(($OPTIND - 1))
+# env_setup(): Set up the default build environment variables, such as the
+# CHROOTDIR, VCSCMD, SVNROOT, etc.  This is called before the release.conf
+# file is sourced, if '-c <release.conf>' is specified.
+env_setup() {
+       # The directory within which the release will be built.
+       CHROOTDIR="/scratch"
+       RELENGDIR="$(dirname $(realpath ${0}))"
+
+       # The default version control system command to obtain the sources.
+       for _dir in /usr/bin /usr/local/bin; do
+               for _svn in svn svnlite; do
+                       [ -x "${_dir}/${_svn}" ] && VCSCMD="${_dir}/${_svn}"
+                       [ ! -z "${VCSCMD}" ] && break 2
+               done
+       done
+       VCSCMD="${VCSCMD} checkout"
+
+       # The default svn checkout server, and svn branches for src/, doc/,
+       # and ports/.
+       SVNROOT="svn://svn.FreeBSD.org/"
+       SRCBRANCH="base/head@rHEAD"
+       DOCBRANCH="doc/head@rHEAD"
+       PORTBRANCH="ports/head@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=
+
+       # The default make.conf and src.conf to use.  Set to /dev/null
+       # by default to avoid polluting the chroot(8) environment with
+       # non-default settings.
+       MAKE_CONF="/dev/null"
+       SRC_CONF="/dev/null"
+
+       # The number of make(1) jobs, defaults to the number of CPUs available
+       # for buildworld, and half of number of CPUs available for buildkernel.
+       WORLD_FLAGS="-j$(sysctl -n hw.ncpu)"
+       KERNEL_FLAGS="-j$(( $(( $(sysctl -n hw.ncpu) + 1 )) / 2))"
+
+       MAKE_FLAGS="-s"
+
+       # The name of the kernel to build, defaults to GENERIC.
+       KERNEL="GENERIC"
+
+       # Set to non-empty value to disable checkout of doc/ and/or ports/.
+       # Disabling ports/ checkout also forces NODOC to be set.
+       NODOC=
+       NOPORTS=
 
-# Fix for backwards-compatibility with release.conf that does not have the
-# trailing '/'.
-case ${SVNROOT} in
-       *svn*)
-               SVNROOT="${SVNROOT}/"
-               ;;
-       *)
-               ;;
-esac
-
-# Prefix the branches with the SVNROOT for the full checkout URL.
-SRCBRANCH="${SVNROOT}${SRCBRANCH}"
-DOCBRANCH="${SVNROOT}${DOCBRANCH}"
-PORTBRANCH="${SVNROOT}${PORTBRANCH}"
-
-if [ -n "${EMBEDDEDBUILD}" ]; then
-       if [ -z "${XDEV}" ] || [ -z "${XDEV_ARCH}" ]; then
-               echo "ERROR: XDEV and XDEV_ARCH must be set in ${RELEASECONF}."
-               exit 1
-       fi
+       # Set to non-empty value to build dvd1.iso as part of the release.
        WITH_DVD=
        WITH_COMPRESSED_IMAGES=
-       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 [ -n "${NOPORTS}" ] && [ -z "${NODOC}" ]; then
-       echo "*** NOTICE: Setting NODOC=1 since ports tree is required"
-       echo "            and NOPORTS is set."
-       NODOC=yes
-fi
-
-# If NOPORTS and/or NODOC are unset, they must not pass to make as variables.
-# The release makefile verifies definedness of NOPORTS/NODOC variables
-# instead of their values.
-DOCPORTS=
-if [ -n "${NOPORTS}" ]; then
-       DOCPORTS="NOPORTS=yes "
-fi
-if [ -n "${NODOC}" ]; then
-       DOCPORTS="${DOCPORTS}NODOC=yes"
-fi
-
-# The aggregated build-time flags based upon variables defined within
-# this file, unless overridden by release.conf.  In most cases, these
-# will not need to be changed.
-CONF_FILES="__MAKE_CONF=${MAKE_CONF} SRCCONF=${SRC_CONF}"
-if [ -n "${TARGET}" ] && [ -n "${TARGET_ARCH}" ]; then
-       ARCH_FLAGS="TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH}"
-else
-       ARCH_FLAGS=
-fi
-CHROOT_MAKEENV="${CHROOT_MAKEENV} MAKEOBJDIRPREFIX=${CHROOTDIR}/tmp/obj"
-CHROOT_WMAKEFLAGS="${MAKE_FLAGS} ${WORLD_FLAGS} ${CONF_FILES}"
-CHROOT_IMAKEFLAGS="${CONF_FILES}"
-CHROOT_DMAKEFLAGS="${CONF_FILES}"
-RELEASE_WMAKEFLAGS="${MAKE_FLAGS} ${WORLD_FLAGS} ${ARCH_FLAGS} ${CONF_FILES}"
-RELEASE_KMAKEFLAGS="${MAKE_FLAGS} ${KERNEL_FLAGS} KERNCONF=\"${KERNEL}\" 
${ARCH_FLAGS} ${CONF_FILES}"
-RELEASE_RMAKEFLAGS="${ARCH_FLAGS} KERNCONF=\"${KERNEL}\" ${CONF_FILES} \
-       ${DOCPORTS} WITH_DVD=${WITH_DVD} WITH_VMIMAGES=${WITH_VMIMAGES} \
-       WITH_CLOUDWARE=${WITH_CLOUDWARE}"
-
-# Force src checkout if configured
-FORCE_SRC_KEY=
-if [ -n "${SRC_FORCE_CHECKOUT}" ]; then
-       FORCE_SRC_KEY="--force"
-fi
+       # Set to non-empty value to build virtual machine images as part of
+       # the release.
+       WITH_VMIMAGES=
+       WITH_COMPRESSED_VMIMAGES=
+       XZ_THREADS=0
+
+       # Set to non-empty value to build virtual machine images for various
+       # cloud providers as part of the release.
+       WITH_CLOUDWARE=
+
+       return 0
+} # env_setup()
+
+# env_check(): Perform sanity tests on the build environment, such as ensuring
+# files/directories exist, as well as adding backwards-compatibility hacks if
+# necessary.  This is called unconditionally, and overrides the defaults set
+# in env_setup() if '-c <release.conf>' is specified.
+env_check() {
+       chroot_build_release_cmd="chroot_build_release"
+       # Fix for backwards-compatibility with release.conf that does not have
+       # the trailing '/'.
+       case ${SVNROOT} in
+               *svn*)
+                       SVNROOT="${SVNROOT}/"
+                       ;;
+               *)
+                       ;;
+       esac
 
-if [ -z "${CHROOTDIR}" ]; then
-       echo "Please set CHROOTDIR."
-       exit 1
-fi
+       # Prefix the branches with the SVNROOT for the full checkout URL.
+       SRCBRANCH="${SVNROOT}${SRCBRANCH}"
+       DOCBRANCH="${SVNROOT}${DOCBRANCH}"
+       PORTBRANCH="${SVNROOT}${PORTBRANCH}"
+
+       if [ -n "${EMBEDDEDBUILD}" ]; then
+               WITH_DVD=
+               WITH_COMPRESSED_IMAGES=
+               NODOC=yes
+               case ${EMBEDDED_TARGET}:${EMBEDDED_TARGET_ARCH} in
+                       arm:armv6)
+                               
chroot_build_release_cmd="chroot_arm_armv6_build_release"
+                               ;;
+                       *)
+               esac
+       fi
 
-if [ $(id -u) -ne 0 ]; then
-       echo "Needs to be run as root."
-       exit 1
-fi
+       # If PORTS is set and NODOC is unset, force NODOC=yes because the ports
+       # tree is required to build the documentation set.
+       if [ -n "${NOPORTS}" ] && [ -z "${NODOC}" ]; then
+               echo "*** NOTICE: Setting NODOC=1 since ports tree is required"
+               echo "            and NOPORTS is set."
+               NODOC=yes
+       fi
 
-set -e # Everything must succeed
+       # If NOPORTS and/or NODOC are unset, they must not pass to make as
+       # variables.  The release makefile verifies definedness of the
+       # NOPORTS/NODOC variables instead of their values.
+       DOCPORTS=
+       if [ -n "${NOPORTS}" ]; then
+               DOCPORTS="NOPORTS=yes "
+       fi
+       if [ -n "${NODOC}" ]; then
+               DOCPORTS="${DOCPORTS}NODOC=yes"
+       fi
 
-mkdir -p ${CHROOTDIR}/usr
+       # The aggregated build-time flags based upon variables defined within
+       # this file, unless overridden by release.conf.  In most cases, these
+       # will not need to be changed.
+       CONF_FILES="__MAKE_CONF=${MAKE_CONF} SRCCONF=${SRC_CONF}"
+       if [ -n "${TARGET}" ] && [ -n "${TARGET_ARCH}" ]; then
+               ARCH_FLAGS="TARGET=${TARGET} TARGET_ARCH=${TARGET_ARCH}"
+       else
+               ARCH_FLAGS=
+       fi
+       # Force src checkout if configured
+       FORCE_SRC_KEY=
+       if [ -n "${SRC_FORCE_CHECKOUT}" ]; then
+               FORCE_SRC_KEY="--force"
+       fi
 
-if [ -z "${SRC_UPDATE_SKIP}" ]; then
-       ${VCSCMD} ${FORCE_SRC_KEY} ${SRCBRANCH} ${CHROOTDIR}/usr/src
-fi
-if [ -z "${NODOC}" ] && [ -z "${DOC_UPDATE_SKIP}" ]; then
-       ${VCSCMD} ${DOCBRANCH} ${CHROOTDIR}/usr/doc
-fi
-if [ -z "${NOPORTS}" ] && [ -z "${PORTS_UPDATE_SKIP}" ]; then
-       ${VCSCMD} ${PORTBRANCH} ${CHROOTDIR}/usr/ports
-fi
-
-if [ -z "${CHROOTBUILD_SKIP}" ]; then
-       cd ${CHROOTDIR}/usr/src
-       env ${CHROOT_MAKEENV} make ${CHROOT_WMAKEFLAGS} buildworld
-       env ${CHROOT_MAKEENV} make ${CHROOT_IMAKEFLAGS} installworld \
-               DESTDIR=${CHROOTDIR}
-       env ${CHROOT_MAKEENV} make ${CHROOT_DMAKEFLAGS} distribution \
-               DESTDIR=${CHROOTDIR}
-fi
-mount -t devfs devfs ${CHROOTDIR}/dev
-cp /etc/resolv.conf ${CHROOTDIR}/etc/resolv.conf
-trap "umount ${CHROOTDIR}/dev" EXIT # Clean up devfs mount on exit
-
-# If MAKE_CONF and/or SRC_CONF are set and not character devices (/dev/null),
-# copy them to the chroot.
-if [ -e ${MAKE_CONF} ] && [ ! -c ${MAKE_CONF} ]; then
-       mkdir -p ${CHROOTDIR}/$(dirname ${MAKE_CONF})
-       cp ${MAKE_CONF} ${CHROOTDIR}/${MAKE_CONF}
-fi
-if [ -e ${SRC_CONF} ] && [ ! -c ${SRC_CONF} ]; then
-       mkdir -p ${CHROOTDIR}/$(dirname ${SRC_CONF})
-       cp ${SRC_CONF} ${CHROOTDIR}/${SRC_CONF}
-fi
-
-# Embedded builds do not use the 'make release' target.
-if [ -n "${EMBEDDEDBUILD}" ]; then
-       # If a crochet configuration file exists in *this* checkout of
-       # release/, copy it to the /tmp/external directory within the chroot.
-       # This allows building embedded releases without relying on updated
-       # scripts and/or configurations to exist in the branch being built.
-       if [ -e ${RELENGDIR}/tools/${XDEV}/crochet-${KERNEL}.conf ] && \
-               [ -e ${RELENGDIR}/${XDEV}/release.sh ]; then
-                       mkdir -p ${CHROOTDIR}/tmp/external/${XDEV}/
-                       cp ${RELENGDIR}/tools/${XDEV}/crochet-${KERNEL}.conf \
-                               
${CHROOTDIR}/tmp/external/${XDEV}/crochet-${KERNEL}.conf
-                       /bin/sh ${RELENGDIR}/${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 [ -z "${CHROOTDIR}" ]; then
+               echo "Please set CHROOTDIR."
+               exit 1
+       fi
 
-if [ -d ${CHROOTDIR}/usr/ports ]; then
+       if [ $(id -u) -ne 0 ]; then
+               echo "Needs to be run as root."
+               exit 1
+       fi
+
+       CHROOT_MAKEENV="${CHROOT_MAKEENV} \
+               MAKEOBJDIRPREFIX=${CHROOTDIR}/tmp/obj"
+       CHROOT_WMAKEFLAGS="${MAKE_FLAGS} ${WORLD_FLAGS} ${CONF_FILES}"
+       CHROOT_IMAKEFLAGS="${CONF_FILES}"
+       CHROOT_DMAKEFLAGS="${CONF_FILES}"
+       RELEASE_WMAKEFLAGS="${MAKE_FLAGS} ${WORLD_FLAGS} ${ARCH_FLAGS} \
+               ${CONF_FILES}"
+       RELEASE_KMAKEFLAGS="${MAKE_FLAGS} ${KERNEL_FLAGS} \
+               KERNCONF=\"${KERNEL}\" ${ARCH_FLAGS} ${CONF_FILES}"
+       RELEASE_RMAKEFLAGS="${ARCH_FLAGS} \
+               KERNCONF=\"${KERNEL}\" ${CONF_FILES} ${DOCPORTS} \
+               WITH_DVD=${WITH_DVD} WITH_VMIMAGES=${WITH_VMIMAGES} \
+               WITH_CLOUDWARE=${WITH_CLOUDWARE} XZ_THREADS=${XZ_THREADS}"
+
+       return 0
+} # env_check()
+
+# chroot_setup(): Prepare the build chroot environment for the release build.
+chroot_setup() {
+       load_chroot_env
+       mkdir -p ${CHROOTDIR}/usr
+
+       if [ -z "${SRC_UPDATE_SKIP}" ]; then
+               ${VCSCMD} ${FORCE_SRC_KEY} ${SRCBRANCH} ${CHROOTDIR}/usr/src
+       fi
+       if [ -z "${NODOC}" ] && [ -z "${DOC_UPDATE_SKIP}" ]; then
+               ${VCSCMD} ${DOCBRANCH} ${CHROOTDIR}/usr/doc
+       fi
+       if [ -z "${NOPORTS}" ] && [ -z "${PORTS_UPDATE_SKIP}" ]; then
+               ${VCSCMD} ${PORTBRANCH} ${CHROOTDIR}/usr/ports
+       fi
+
+       if [ -z "${CHROOTBUILD_SKIP}" ]; then
+               cd ${CHROOTDIR}/usr/src
+               env ${CHROOT_MAKEENV} make ${CHROOT_WMAKEFLAGS} buildworld
+               env ${CHROOT_MAKEENV} make ${CHROOT_IMAKEFLAGS} installworld \
+                       DESTDIR=${CHROOTDIR}
+               env ${CHROOT_MAKEENV} make ${CHROOT_DMAKEFLAGS} distribution \
+                       DESTDIR=${CHROOTDIR}
+       fi
+
+       return 0
+} # chroot_setup()
+
+# extra_chroot_setup(): Prepare anything additional within the build
+# necessary for the release build.
+extra_chroot_setup() {
+       mkdir -p ${CHROOTDIR}/dev
+       mount -t devfs devfs ${CHROOTDIR}/dev
+       [ -e /etc/resolv.conf ] && cp /etc/resolv.conf \
+               ${CHROOTDIR}/etc/resolv.conf
        # Run ldconfig(8) in the chroot directory so /var/run/ld-elf*.so.hints
        # is created.  This is needed by ports-mgmt/pkg.
-       chroot ${CHROOTDIR} /etc/rc.d/ldconfig forcerestart
+       eval chroot ${CHROOTDIR} /etc/rc.d/ldconfig forcerestart
+
+       # If MAKE_CONF and/or SRC_CONF are set and not character devices
+       # (/dev/null), copy them to the chroot.
+       if [ -e ${MAKE_CONF} ] && [ ! -c ${MAKE_CONF} ]; then
+               mkdir -p ${CHROOTDIR}/$(dirname ${MAKE_CONF})
+               cp ${MAKE_CONF} ${CHROOTDIR}/${MAKE_CONF}
+       fi
+       if [ -e ${SRC_CONF} ] && [ ! -c ${SRC_CONF} ]; then
+               mkdir -p ${CHROOTDIR}/$(dirname ${SRC_CONF})
+               cp ${SRC_CONF} ${CHROOTDIR}/${SRC_CONF}
+       fi
+
+       if [ -d ${CHROOTDIR}/usr/ports ]; then
+               # Trick the ports 'run-autotools-fixup' target to do the right
+               # thing.
+               _OSVERSION=$(chroot ${CHROOTDIR} /usr/bin/uname -U)
+               REVISION=$(chroot ${CHROOTDIR} make -C /usr/src/release -V 
REVISION)
+               BRANCH=$(chroot ${CHROOTDIR} make -C /usr/src/release -V BRANCH)
+               UNAME_r=${REVISION}-${BRANCH}
+               if [ -d ${CHROOTDIR}/usr/doc ] && [ -z "${NODOC}" ]; then
+                       PBUILD_FLAGS="OSVERSION=${_OSVERSION} BATCH=yes"
+                       PBUILD_FLAGS="${PBUILD_FLAGS} UNAME_r=${UNAME_r}"
+                       PBUILD_FLAGS="${PBUILD_FLAGS} OSREL=${REVISION}"
+                       chroot ${CHROOTDIR} make -C /usr/ports/textproc/docproj 
\
+                               ${PBUILD_FLAGS} OPTIONS_UNSET="FOP IGOR" \
+                               install clean distclean
+               fi
+       fi
+
+       if [ ! -z "${EMBEDDEDPORTS}" ]; then
+               for _PORT in ${EMBEDDEDPORTS}; do
+                       eval chroot ${CHROOTDIR} make -C /usr/ports/${_PORT} \
+                               BATCH=1 FORCE_PKG_REGISTER=1 install clean 
distclean
+               done
+       fi
+
+       buildenv_setup
+
+       return 0
+} # extra_chroot_setup()
+
+# chroot_build_target(): Build the userland and kernel for the build target.
+chroot_build_target() {
+       load_target_env
+       if [ ! -z "${EMBEDDEDBUILD}" ]; then
+               RELEASE_WMAKEFLAGS="${RELEASE_WMAKEFLAGS} \
+                       TARGET=${EMBEDDED_TARGET} \
+                       TARGET_ARCH=${EMBEDDED_TARGET_ARCH}"
+               RELEASE_KMAKEFLAGS="${RELEASE_KMAKEFLAGS} \
+                       TARGET=${EMBEDDED_TARGET} \
+                       TARGET_ARCH=${EMBEDDED_TARGET_ARCH}"
+       fi
+       eval chroot ${CHROOTDIR} make -C /usr/src ${RELEASE_WMAKEFLAGS} 
buildworld
+       eval chroot ${CHROOTDIR} make -C /usr/src ${RELEASE_KMAKEFLAGS} 
buildkernel
+
+       return 0
+} # chroot_build_target
+
+# chroot_build_release(): Invoke the 'make release' target.
+chroot_build_release() {
+       load_target_env
+       eval chroot ${CHROOTDIR} make -C /usr/src/release \
+               ${RELEASE_RMAKEFLAGS} release
+       eval chroot ${CHROOTDIR} make -C /usr/src/release \
+               ${RELEASE_RMAKEFLAGS} install DESTDIR=/R \
+               WITH_COMPRESSED_IMAGES=${WITH_COMPRESSED_IMAGES} \
+               WITH_COMPRESSED_VMIMAGES=${WITH_COMPRESSED_VMIMAGES}
+
+       return 0
+} # chroot_build_release()
+
+# chroot_arm_armv6_build_release(): Create arm/armv6 SD card image.
+chroot_arm_armv6_build_release() {
+       load_target_env
+       eval chroot ${CHROOTDIR} make -C /usr/src/release obj
+       if [ -e "${RELENGDIR}/tools/${EMBEDDED_TARGET}.subr" ]; then
+               . "${RELENGDIR}/tools/${EMBEDDED_TARGET}.subr"
+       fi
+       [ ! -z "${RELEASECONF}" ] && . "${RELEASECONF}"
+       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="${CHROOTDIR}/${OBJDIR}/${KERNEL}.img"
+       OSRELEASE="$(eval chroot ${CHROOTDIR} make -C /usr/src/release \
+               TARGET=${EMBEDDED_TARGET} TARGET_ARCH=${EMBEDDED_TARGET_ARCH} \
+               -V OSRELEASE)"
+       chroot ${CHROOTDIR} mkdir -p ${DESTDIR}
+       chroot ${CHROOTDIR} truncate -s ${IMAGE_SIZE} ${IMGBASE##${CHROOTDIR}}
+       export mddev=$(chroot ${CHROOTDIR} \
+               mdconfig -f ${IMGBASE##${CHROOTDIR}} ${MD_ARGS})
+       arm_create_disk
+       arm_install_base
+       arm_install_uboot
+       mdconfig -d -u ${mddev}
+       chroot ${CHROOTDIR} rmdir ${DESTDIR}
+       mv ${IMGBASE} ${CHROOTDIR}/${OBJDIR}/${OSRELEASE}-${KERNEL}.img
+       chroot ${CHROOTDIR} mkdir -p /R
+       chroot ${CHROOTDIR} cp -p ${OBJDIR}/${OSRELEASE}-${KERNEL}.img \
+               /R/${OSRELEASE}-${KERNEL}.img
+       chroot ${CHROOTDIR} xz -T ${XZ_THREADS} /R/${OSRELEASE}-${KERNEL}.img
+       cd ${CHROOTDIR}/R && sha256 ${OSRELEASE}* \
+               > CHECKSUM.SHA256
+       cd ${CHROOTDIR}/R && md5 ${OSRELEASE}* \
+               > CHECKSUM.MD5
+
+       return 0
+} # chroot_arm_armv6_build_release()
+
+# main(): Start here.
+main() {
+       set -e # Everything must succeed
+       env_setup
+       while getopts c: opt; do
+               case ${opt} in
+                       c)
+                               RELEASECONF="${OPTARG}"
+                               ;;
+                       \?)
+                               usage
+                               ;;
+               esac
+       done
+       shift $(($OPTIND - 1))
+       if [ ! -z "${RELEASECONF}" ]; then
+               if [ -e "${RELEASECONF}" ]; then
+                       . ${RELEASECONF}
+               else
+                       echo "Nonexistent configuration file: ${RELEASECONF}"
+                       echo "Using default build environment."
+               fi
+       fi
+       env_check
+       trap "umount ${CHROOTDIR}/dev" EXIT # Clean up devfs mount on exit
+       chroot_setup
+       extra_chroot_setup
+       chroot_build_target
+       ${chroot_build_release_cmd}
+
+       return 0
+} # main()
 
-       ## Trick the ports 'run-autotools-fixup' target to do the right thing.
-       _OSVERSION=$(sysctl -n kern.osreldate)
-       REVISION=$(chroot ${CHROOTDIR} make -C /usr/src/release -V REVISION)
-       BRANCH=$(chroot ${CHROOTDIR} make -C /usr/src/release -V BRANCH)
-       UNAME_r=${REVISION}-${BRANCH}
-       if [ -d ${CHROOTDIR}/usr/doc ] && [ -z "${NODOC}" ]; then
-               PBUILD_FLAGS="OSVERSION=${_OSVERSION} BATCH=yes"
-               PBUILD_FLAGS="${PBUILD_FLAGS} UNAME_r=${UNAME_r}"
-               PBUILD_FLAGS="${PBUILD_FLAGS} OSREL=${REVISION}"
-               chroot ${CHROOTDIR} make -C /usr/ports/textproc/docproj \
-                       ${PBUILD_FLAGS} OPTIONS_UNSET="FOP IGOR" \
-                       install clean distclean
-       fi
-fi
-
-eval chroot ${CHROOTDIR} make -C /usr/src ${RELEASE_WMAKEFLAGS} buildworld
-eval chroot ${CHROOTDIR} make -C /usr/src ${RELEASE_KMAKEFLAGS} buildkernel
-eval chroot ${CHROOTDIR} make -C /usr/src/release ${RELEASE_RMAKEFLAGS} \
-       release
-eval chroot ${CHROOTDIR} make -C /usr/src/release ${RELEASE_RMAKEFLAGS} \
-       install DESTDIR=/R WITH_COMPRESSED_IMAGES=${WITH_COMPRESSED_IMAGES} \
-       WITH_COMPRESSED_VMIMAGES=${WITH_COMPRESSED_VMIMAGES}
+main "${@}"

Copied: stable/10/release/tools/arm.subr (from r282693, 
head/release/tools/arm.subr)
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ stable/10/release/tools/arm.subr    Wed May 20 19:32:57 2015        
(r283161, copy of r282693, head/release/tools/arm.subr)
@@ -0,0 +1,137 @@
+#!/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.
+       chroot ${CHROOTDIR} gpart create -s ${PART_SCHEME} ${mddev}
+       chroot ${CHROOTDIR} gpart add -t '!12' -a 63 -s ${FAT_SIZE} ${mddev}
+       chroot ${CHROOTDIR} gpart set -a active -i 1 ${mddev}
+       chroot ${CHROOTDIR} newfs_msdos -L msdosboot -F ${FAT_TYPE} 
/dev/${mddev}s1
+       chroot ${CHROOTDIR} gpart add -t freebsd ${mddev}
+       chroot ${CHROOTDIR} gpart create -s bsd ${mddev}s2
+       chroot ${CHROOTDIR} gpart add -t freebsd-ufs -a 64k /dev/${mddev}s2
+       chroot ${CHROOTDIR} newfs -U -L rootfs /dev/${mddev}s2a
+       chroot ${CHROOTDIR} tunefs -j enable -N enable /dev/${mddev}s2a
+
+       return 0
+}
+
+arm_create_user() {
+       # Create a default user account 'freebsd' with the password 'freebsd',
+       # and set the default password for the 'root' user to 'root'.
+       chroot ${CHROOTDIR} /usr/sbin/pw groupadd freebsd -g 1001
+       chroot ${CHROOTDIR} /usr/sbin/pw useradd freebsd \
+               -m -M 0755 -w yes -n freebsd -u 1001 -g 1001 -G 0 \
+               -c 'FreeBSD User' -d '/home/freebsd' -s '/bin/csh'
+       chroot ${CHROOTDIR} /usr/sbin/pw usermod root -w yes
+
+       return 0
+}
+
+arm_install_base() {
+       chroot ${CHROOTDIR} mount /dev/${mddev}s2a ${DESTDIR}
+       eval chroot ${CHROOTDIR} make -C ${WORLDDIR} \
+               TARGET=${EMBEDDED_TARGET} \
+               TARGET_ARCH=${EMBEDDED_TARGET_ARCH} \

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to