1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-11-28 08:02:54 +00:00

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.

Help from:	many (boot testing, feedback, etc.)
Sponsored by:	The FreeBSD Foundation
This commit is contained in:
Glen Barber 2015-05-09 21:08:12 +00:00
commit 88feae84be
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=282693
20 changed files with 639 additions and 845 deletions

View File

@ -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 secure
#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 3wire" 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

View File

@ -3,36 +3,35 @@
# $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 EMBEDDEDPORTS="sysutils/u-boot-beaglebone"
EMBEDDEDBUILD=1
EMBEDDED_TARGET="arm"
EMBEDDED_TARGET_ARCH="armv6"
EMBEDDEDPORTS="sysutils/u-boot-beaglebone"
KERNEL="BEAGLEBONE"
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
# 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 EMBEDDEDPORTS="lang/python textproc/gsed"
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="BEAGLEBONE"
export CROCHETSRC="https://github.com/freebsd/crochet"
export CROCHETBRANCH="trunk@rHEAD"
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
}

View File

@ -3,35 +3,35 @@
# $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 EMBEDDEDPORTS="lang/python textproc/gsed"
EMBEDDEDBUILD=1
EMBEDDED_TARGET="arm"
EMBEDDED_TARGET_ARCH="armv6"
EMBEDDEDPORTS="sysutils/u-boot-pandaboard"
KERNEL="PANDABOARD"
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"
# 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="PANDABOARD"
export CROCHETSRC="https://github.com/freebsd/crochet"
export CROCHETBRANCH="trunk@rHEAD"
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
}

View File

@ -3,38 +3,41 @@
# $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 EMBEDDEDPORTS="lang/python textproc/gsed"
EMBEDDEDBUILD=1
EMBEDDED_TARGET="arm"
EMBEDDED_TARGET_ARCH="armv6"
EMBEDDEDPORTS="sysutils/u-boot-rpi"
KERNEL="RPI-B"
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
# 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="RPI-B"
export CROCHETSRC="https://github.com/freebsd/crochet"
export CROCHETBRANCH="trunk@rHEAD"
export UBOOTSRC="https://github.com/gonzoua/u-boot-pi"
export UBOOTBRANCH="trunk"
export UBOOTDIR="/tmp/crochet/u-boot-rpi"
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
}

View File

@ -3,36 +3,41 @@
# $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 EMBEDDEDPORTS="sysutils/u-boot-rpi2"
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"
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
}
# 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"
}

View File

@ -1,37 +0,0 @@
#!/bin/sh
#
# $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 EMBEDDEDPORTS="lang/python textproc/gsed"
# 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="WANDBOARD-QUAD"
export CROCHETSRC="https://github.com/freebsd/crochet"
export CROCHETBRANCH="trunk@rHEAD"
}

View File

@ -0,0 +1,41 @@
#!/bin/sh
#
# $FreeBSD$
#
EMBEDDEDBUILD=1
EMBEDDED_TARGET="arm"
EMBEDDED_TARGET_ARCH="armv6"
EMBEDDEDPORTS="sysutils/u-boot-wandboard"
KERNEL="IMX6"
WORLD_FLAGS="${WORLD_FLAGS} UBLDR_LOADADDR=0x11000000"
IMAGE_SIZE="1G"
PART_SCHEME="MBR"
FAT_SIZE="50m -b 16384"
FAT_TYPE="16"
MD_ARGS="-x 63 -y 255"
NODOC=1
arm_install_uboot() {
UBOOT_DIR="/usr/local/share/u-boot/u-boot-wandboard"
UBOOT_FILES="u-boot.imx"
FATMOUNT="${DESTDIR%${KERNEL}}/fat"
UFSMOUNT="${DESTDIR%${KERNEL}}/ufs"
chroot ${CHROOTDIR} dd if=${UBOOT_DIR}/${UBOOT_FILES} \
of=/dev/${mddev} bs=512 seek=2
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 ${UFSMOUNT}/boot/ubldr ${FATMOUNT}/ubldr
chroot ${CHROOTDIR} /bin/sh -c 'echo \
setenv fdt_file wandboard-quad.dtb\; fatload mmc 0:1 11000000 ubldr\; bootelf 11000000\; \
> ${FATMOUNT}/boot.txt'
chroot ${CHROOTDIR} touch ${UFSMOUNT}/firstboot
sync
umount_loop ${CHROOTDIR}/${FATMOUNT}
umount_loop ${CHROOTDIR}/${UFSMOUNT}
chroot ${CHROOTDIR} rmdir ${FATMOUNT}
chroot ${CHROOTDIR} rmdir ${UFSMOUNT}
return 0
}

View File

@ -1,36 +0,0 @@
#!/bin/sh
#
# $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 export KERNEL_FLAGS="-j $(( $(( $(sysctl -n hw.ncpu) + 1 )) / 2 ))"
export CHROOTDIR="/scratch"
export EMBEDDEDBUILD=1
# 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="ZEDBOARD"
export CROCHETSRC="https://github.com/freebsd/crochet"
export CROCHETBRANCH="trunk@rHEAD"
}

View File

@ -1,151 +0,0 @@
#!/bin/sh
#-
# Copyright (c) 2013, 2014 The FreeBSD Foundation
# All rights reserved.
#
# This software was 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.
#
# $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
before_build() {
WANT_UBOOT=
KNOWNHASH=
UBOOT_VERSION=
case ${KERNEL} in
PANDABOARD)
WANT_UBOOT=1
KNOWNHASH="e08e20a6979bfca6eebb9a2b0e42aa4416af3d796332fd63a3470495a089d496"
UBOOT_VERSION="u-boot-2012.07"
;;
WANDBOARD-QUAD)
WANT_UBOOT=1
KNOWNHASH="b4f83b8db325c21671a997198ec3a373e2e00dde2fcf17be9b9afd7cfd727f56"
UBOOT_VERSION="u-boot-2014.07"
;;
*)
# Fallthrough.
;;
esac
if [ ! -z ${WANT_UBOOT} ]; then
chroot ${CHROOTDIR} fetch -o /tmp/crochet/${UBOOT_VERSION}.tar.bz2 \
http://people.freebsd.org/~gjb/${UBOOT_VERSION}.tar.bz2
UBOOT_HASH="$(sha256 -q ${CHROOTDIR}/tmp/crochet/${UBOOT_VERSION}.tar.bz2)"
if [ "${UBOOT_HASH}" != "${KNOWNHASH}" ]; then
echo "Checksum mismatch! Exiting now."
exit 1
fi
chroot ${CHROOTDIR} tar xf /tmp/crochet/${UBOOT_VERSION}.tar.bz2 \
-C /tmp/crochet/
fi
}
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 [ -n "${UBOOTSRC}" ]; then
continue
else
return 0
fi
chroot ${CHROOTDIR} svn co -q ${UBOOTSRC}/${UBOOTBRANCH} \
/${UBOOTDIR}
}
main() {
# Fix broken ports that use kern.osreldate.
OSVERSION=$(chroot ${CHROOTDIR} /usr/bin/uname -U)
export OSVERSION
REVISION=$(chroot ${CHROOTDIR} make -C /usr/src/release -V REVISION)
BRANCH=$(chroot ${CHROOTDIR} make -C /usr/src/release -V BRANCH)
UNAME_r=${REVISION}-${BRANCH}
export UNAME_r
export XZ_CMD=$(chroot ${CHROOTDIR} make -C /usr/src/release -V XZ_CMD)
# Build the 'xdev' target for crochet.
eval chroot ${CHROOTDIR} make -C /usr/src \
${XDEV_FLAGS} XDEV=${XDEV} XDEV_ARCH=${XDEV_ARCH} \
TARGET=${XDEV} TARGET_ARCH=${XDEV_ARCH} \
${WORLD_FLAGS} xdev
# Install the cross-build symlinks to /usr/bin to make crochet
# happy.
eval chroot ${CHROOTDIR} make -C /usr/src \
${XDEV_FLAGS} XDEV=${XDEV} XDEV_ARCH=${XDEV_ARCH} \
TARGET=${XDEV} TARGET_ARCH=${XDEV_ARCH} \
${WORLD_FLAGS} xdev-links || true
# 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
# Certain u-boot versions hardcode the use of a host gcc, and gcc's
# build relies on having gperf installed.
eval chroot ${CHROOTDIR} make -C /usr/src/gnu/usr.bin/gperf \
WITH_GCC=1 ${WORLD_FLAGS} obj
eval chroot ${CHROOTDIR} make -C /usr/src/gnu/usr.bin/gperf \
WITH_GCC=1 ${WORLD_FLAGS} -j1 depend all
eval chroot ${CHROOTDIR} make -C /usr/src/gnu/usr.bin/gperf \
WITH_GCC=1 ${WORLD_FLAGS} -j1 install
eval chroot ${CHROOTDIR} make -C /usr/src/gnu/usr.bin/cc \
WITH_GCC=1 ${WORLD_FLAGS} -j1 obj depend all install
mkdir -p ${CHROOTDIR}/tmp/crochet/work
before_build
install_crochet
install_uboot
eval chroot ${CHROOTDIR} /bin/sh /tmp/crochet/crochet.sh \
-c /tmp/external/${XDEV}/crochet-${KERNEL}.conf
mkdir -p ${CHROOTDIR}/R/
cp -p ${CHROOTDIR}/usr/obj/*.img ${CHROOTDIR}/R/
${XZ_CMD} ${CHROOTDIR}/R/FreeBSD*.img
cd ${CHROOTDIR}/R/ && sha256 FreeBSD*.img.xz > CHECKSUM.SHA256
cd ${CHROOTDIR}/R/ && md5 FreeBSD*.img.xz > CHECKSUM.MD5
}
main "$@"
exit 0

View File

@ -36,257 +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"
VERSION=2
# Prototypes that can be redefined per-chroot or per-target.
load_chroot_env() { }
load_target_env() { }
buildenv_setup() { }
# 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=
XZ_THREADS=0
# Set to non-empty value to build virtual machine images for various
# cloud providers as part of the release.
WITH_CLOUDWARE=
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}))"
# Fix for backwards-compatibility with release.conf that does not have the
# trailing '/'.
case ${SVNROOT} in
*svn*)
SVNROOT="${SVNROOT}/"
;;
*)
;;
esac
# 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"
# Prefix the branches with the SVNROOT for the full checkout URL.
SRCBRANCH="${SVNROOT}${SRCBRANCH}"
DOCBRANCH="${SVNROOT}${DOCBRANCH}"
PORTBRANCH="${SVNROOT}${PORTBRANCH}"
# 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"
if [ -n "${EMBEDDEDBUILD}" ]; then
# 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=
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
# Set to non-empty value to build virtual machine images as part of
# the release.
WITH_VMIMAGES=
WITH_COMPRESSED_VMIMAGES=
XZ_THREADS=0
# 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
# Set to non-empty value to build virtual machine images for various
# cloud providers as part of the release.
WITH_CLOUDWARE=
# 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
load_chroot_env
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_setup()
# Force src checkout if configured
FORCE_SRC_KEY=
if [ -n "${SRC_FORCE_CHECKOUT}" ]; then
FORCE_SRC_KEY="--force"
fi
# 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 [ $(id -u) -ne 0 ]; then
echo "Needs to be run as root."
exit 1
fi
set -e # Everything must succeed
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
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
buildenv_setup
# 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.
load_target_env
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
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 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
# 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 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
# 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 "${CHROOTDIR}" ]; then
echo "Please set CHROOTDIR."
exit 1
fi
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
## 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
# 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
fi
buildenv_setup
load_target_env
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}
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()
main "${@}"

137
release/tools/arm.subr Normal file
View File

@ -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} \
DESTDIR=${DESTDIR} KERNCONF=${KERNEL} \
installworld installkernel distribution
chroot ${CHROOTDIR} mkdir -p ${DESTDIR}/boot/msdos
arm_create_user
echo '# Custom /etc/fstab for FreeBSD embedded images' \
> ${CHROOTDIR}/${DESTDIR}/etc/fstab
echo "/dev/ufs/rootfs / ufs rw 1 1" \
>> ${CHROOTDIR}/${DESTDIR}/etc/fstab
echo "/dev/msdosfs/MSDOSBOOT /boot/msdos msdosfs rw,noatime 0 0" \
>> ${CHROOTDIR}/${DESTDIR}/etc/fstab
echo "md /tmp mfs rw,noatime,-s30m 0 0" \
>> ${CHROOTDIR}/${DESTDIR}/etc/fstab
echo "md /var/log mfs rw,noatime,-s15m 0 0" \
>> ${CHROOTDIR}/${DESTDIR}/etc/fstab
echo "md /var/tmp mfs rw,noatime,-s12m 0 0" \
>> ${CHROOTDIR}/${DESTDIR}/etc/fstab
local hostname
hostname="$(echo ${KERNEL} | tr '[:upper:]' '[:lower:]')"
echo "hostname=\"${hostname}\"" > ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
echo 'ifconfig_DEFAULT="DHCP"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
echo 'sshd_enable="YES"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
echo 'sendmail_enable="NONE"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
echo 'sendmail_submit_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
echo 'sendmail_outbound_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
echo 'sendmail_msp_queue_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
echo 'growfs_enable="YES"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
sync
umount_loop ${CHROOTDIR}/${DESTDIR}
return 0
}
arm_install_uboot() {
# Override in the arm/KERNEL.conf file.
return 0
}

View File

@ -1,40 +0,0 @@
#
# $FreeBSD$
#
# This is the configuration file for use with crochet to produce
# FreeBSD BeagleBone images.
board_setup BeagleBone
option ImageSize 1gb
option Growfs
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=BEAGLEBONE
TARGET=arm
TARGET_ARCH=armv6
FREEBSD_BUILDWORLD_EXTRA_ARGS="${WORLD_FLAGS}"
FREEBSD_BUILDKERNEL_EXTRA_ARGS="${KERNEL_FLAGS}"
FREEBSD_INSTALLWORLD_EXTRA_ARGS=""
FREEBSD_INSTALLKERNEL_EXTRA_ARGS=""
FREEBSD_WORLD_EXTRA_ARGS=""
FREEBSD_KERNEL_EXTRA_ARGS=""
FREEBSD_EXTRA_ARGS=""
IMG=${WORKDIR}/FreeBSD-${_REVISION}-${_BRANCH}-${TARGET}-${TARGET_ARCH}-${KERNCONF}.img
BEAGLEBONE_UBOOT=/tmp/external/u-boot-beaglebone
beaglebone_check_uboot() {
mkdir -p "${BEAGLEBONE_UBOOT}"
ln -fs /usr/local/share/u-boot/u-boot-beaglebone/MLO \
${BEAGLEBONE_UBOOT}/MLO
ln -fs /usr/local/share/u-boot/u-boot-beaglebone/u-boot.img \
${BEAGLEBONE_UBOOT}/bb-uboot.img
ln -fs ${BOARDDIR}/files/uEnv.txt \
${BEAGLEBONE_UBOOT}/bb-uenv.txt
}

View File

@ -1,29 +0,0 @@
#
# $FreeBSD$
#
# This is the configuration file for use with crochet to produce
# FreeBSD PandaBoard images.
board_setup PandaBoard
option ImageSize 1gb
option Growfs
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=PANDABOARD
TARGET=arm
TARGET_ARCH=armv6
FREEBSD_BUILDWORLD_EXTRA_ARGS="${WORLD_FLAGS}"
FREEBSD_BUILDKERNEL_EXTRA_ARGS="${KERNEL_FLAGS}"
FREEBSD_INSTALLWORLD_EXTRA_ARGS=""
FREEBSD_INSTALLKERNEL_EXTRA_ARGS=""
FREEBSD_WORLD_EXTRA_ARGS=""
FREEBSD_KERNEL_EXTRA_ARGS=""
FREEBSD_EXTRA_ARGS=""
IMG=${WORKDIR}/FreeBSD-${_REVISION}-${_BRANCH}-${TARGET}-${TARGET_ARCH}-${KERNCONF}.img

View File

@ -1,29 +0,0 @@
#
# $FreeBSD$
#
# This is the configuration file for use with crochet to produce
# FreeBSD Raspberry Pi images.
board_setup RaspberryPi
option ImageSize 1gb
option Growfs
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
TARGET=arm
TARGET_ARCH=armv6
FREEBSD_BUILDWORLD_EXTRA_ARGS="${WORLD_FLAGS}"
FREEBSD_BUILDKERNEL_EXTRA_ARGS="${KERNEL_FLAGS}"
FREEBSD_INSTALLWORLD_EXTRA_ARGS=""
FREEBSD_INSTALLKERNEL_EXTRA_ARGS=""
FREEBSD_WORLD_EXTRA_ARGS=""
FREEBSD_KERNEL_EXTRA_ARGS=""
FREEBSD_EXTRA_ARGS=""
IMG=${WORKDIR}/FreeBSD-${_REVISION}-${_BRANCH}-${TARGET}-${TARGET_ARCH}-${KERNCONF}.img

View File

@ -1,29 +0,0 @@
#
# $FreeBSD$
#
# This is the configuration file for use with crochet to produce
# FreeBSD Raspberry Pi 2 images.
board_setup RaspberryPi2
option ImageSize 1gb
option Growfs
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=RPI2
TARGET=arm
TARGET_ARCH=armv6
FREEBSD_BUILDWORLD_EXTRA_ARGS="${WORLD_FLAGS}"
FREEBSD_BUILDKERNEL_EXTRA_ARGS="${KERNEL_FLAGS}"
FREEBSD_INSTALLWORLD_EXTRA_ARGS=""
FREEBSD_INSTALLKERNEL_EXTRA_ARGS=""
FREEBSD_WORLD_EXTRA_ARGS=""
FREEBSD_KERNEL_EXTRA_ARGS=""
FREEBSD_EXTRA_ARGS=""
IMG=${WORKDIR}/FreeBSD-${_REVISION}-${_BRANCH}-${TARGET}-${TARGET_ARCH}-${KERNCONF}.img

View File

@ -1,29 +0,0 @@
#
# $FreeBSD$
#
# This is the configuration file for use with crochet to produce
# FreeBSD WandboardQuad images.
board_setup Wandboard
option ImageSize 1gb
option Growfs
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=WANDBOARD-QUAD
TARGET=arm
TARGET_ARCH=armv6
FREEBSD_BUILDWORLD_EXTRA_ARGS="${WORLD_FLAGS}"
FREEBSD_BUILDKERNEL_EXTRA_ARGS="${KERNEL_FLAGS}"
FREEBSD_INSTALLWORLD_EXTRA_ARGS=""
FREEBSD_INSTALLKERNEL_EXTRA_ARGS=""
FREEBSD_WORLD_EXTRA_ARGS=""
FREEBSD_KERNEL_EXTRA_ARGS=""
FREEBSD_EXTRA_ARGS=""
IMG=${WORKDIR}/FreeBSD-${_REVISION}-${_BRANCH}-${TARGET}-${TARGET_ARCH}-${KERNCONF}.img

View File

@ -1,29 +0,0 @@
#
# $FreeBSD$
#
# This is the configuration file for use with crochet to produce
# FreeBSD ZedBoard images.
board_setup ZedBoard
option ImageSize 1gb
option Growfs
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=ZEDBOARD
TARGET=arm
TARGET_ARCH=armv6
FREEBSD_BUILDWORLD_EXTRA_ARGS="${WORLD_FLAGS}"
FREEBSD_BUILDKERNEL_EXTRA_ARGS="${KERNEL_FLAGS}"
FREEBSD_INSTALLWORLD_EXTRA_ARGS=""
FREEBSD_INSTALLKERNEL_EXTRA_ARGS=""
FREEBSD_WORLD_EXTRA_ARGS=""
FREEBSD_KERNEL_EXTRA_ARGS=""
FREEBSD_EXTRA_ARGS=""
IMG=${WORKDIR}/FreeBSD-${_REVISION}-${_BRANCH}-${TARGET}-${TARGET_ARCH}-${KERNCONF}.img

View File

@ -1,28 +0,0 @@
# Kernel configuration for Wandboard-Dual
#
# For more information on this file, please read the config(5) manual page,
# and/or the handbook section on Kernel Configuration Files:
#
# http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
#
# The handbook is also available locally in /usr/share/doc/handbook
# if you've installed the doc distribution, otherwise always see the
# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
# latest information.
#
# An exhaustive list of options and more detailed explanations of the
# device lines is also present in the ../../conf/NOTES and NOTES files.
# If you are in doubt as to the purpose or necessity of a line, check first
# in NOTES.
#
# $FreeBSD$
#NO_UNIVERSE
include "IMX6"
ident WANDBOARD-DUAL
# Flattened Device Tree
options FDT_DTB_STATIC
makeoptions FDT_DTS_FILE=wandboard-dual.dts

View File

@ -1,28 +0,0 @@
# Kernel configuration for Wandboard-Quad
#
# For more information on this file, please read the config(5) manual page,
# and/or the handbook section on Kernel Configuration Files:
#
# http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
#
# The handbook is also available locally in /usr/share/doc/handbook
# if you've installed the doc distribution, otherwise always see the
# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
# latest information.
#
# An exhaustive list of options and more detailed explanations of the
# device lines is also present in the ../../conf/NOTES and NOTES files.
# If you are in doubt as to the purpose or necessity of a line, check first
# in NOTES.
#
# $FreeBSD$
#NO_UNIVERSE
include "IMX6"
ident WANDBOARD-QUAD
# Flattened Device Tree
options FDT_DTB_STATIC
makeoptions FDT_DTS_FILE=wandboard-quad.dts

View File

@ -1,28 +0,0 @@
# Kernel configuration for Wandboard-Solo
#
# For more information on this file, please read the config(5) manual page,
# and/or the handbook section on Kernel Configuration Files:
#
# http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
#
# The handbook is also available locally in /usr/share/doc/handbook
# if you've installed the doc distribution, otherwise always see the
# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
# latest information.
#
# An exhaustive list of options and more detailed explanations of the
# device lines is also present in the ../../conf/NOTES and NOTES files.
# If you are in doubt as to the purpose or necessity of a line, check first
# in NOTES.
#
# $FreeBSD$
include "IMX6"
ident WANDBOARD-SOLO
nooptions SMP
# Flattened Device Tree
options FDT_DTB_STATIC
makeoptions FDT_DTS_FILE=wandboard-solo.dts