summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgjb <gjb@FreeBSD.org>2015-05-06 19:58:12 +0000
committergjb <gjb@FreeBSD.org>2015-05-06 19:58:12 +0000
commitdb697baa509958351bb560d893c32bcf39f76b67 (patch)
tree8e599e27a31653a80feea79822f6e77ce1c456be
parent51eaadc0d0997a3cd4d150c1e4df0a0ce9358d80 (diff)
downloadFreeBSD-src-db697baa509958351bb560d893c32bcf39f76b67.zip
FreeBSD-src-db697baa509958351bb560d893c32bcf39f76b67.tar.gz
Add tools/arm.subr to contain common subroutines used for
building arm images. This is similar to tools/vmimage.subr used for building virtual machine disk images. By default, only arm_create_disk() and arm_install_base() contain real functionality here, and arm_install_uboot() must be overridden in the arm/KERNEL.conf file. In release.sh, make create_arm_armv6_build_release() do something now. In arm/BEAGLEBONE.conf, set IMAGE_SIZE, PART_SCHEME, FAT_SIZE, FAT_TYPE, and MD_ARGS, as well as make arm_install_uboot() functional. Parts of this were taken from disecting a previous BEAGLEBONE image, and other parts obtained from Crochet sources. Sponsored by: The FreeBSD Foundation
-rw-r--r--release/arm/BEAGLEBONE.conf21
-rwxr-xr-xrelease/release.sh11
-rw-r--r--release/tools/arm.subr121
3 files changed, 153 insertions, 0 deletions
diff --git a/release/arm/BEAGLEBONE.conf b/release/arm/BEAGLEBONE.conf
index 19b88cb..70dadc0 100644
--- a/release/arm/BEAGLEBONE.conf
+++ b/release/arm/BEAGLEBONE.conf
@@ -8,3 +8,24 @@ EMBEDDED_TARGET="arm"
EMBEDDED_TARGET_ARCH="armv6"
EMBEDDEDPORTS="sysutils/u-boot-beaglebone"
KERNEL="BEAGLEBONE"
+IMAGE_SIZE="1G"
+PART_SCHEME="MBR"
+FAT_SIZE="2m"
+FAT_TYPE="12"
+MD_ARGS="-x 63 -y 255"
+
+arm_install_uboot() {
+ UBOOT_DIR="/usr/local/share/u-boot/u-boot-beaglebone"
+ FDT_DIR="${WORLDIR}/sys/boot/fdt/dts/arm"
+ mount_msdosfs /dev/${mddev}s1 ${DESTDIR}
+ cp -p ${UBOOT_DIR}/MLO ${DESTDIR}/MLO
+ cp -p ${UBOOT_DIR}/u-boot.img ${DESTDIR}/bb-uboot.img
+ cp -p ${FDT_DIR}/beaglebone.dts ${DESTDIR}/bbone.dts
+ cp -p ${FDT_DIR}/beaglebone.dts ${DESTDIR}/bbone.dtb
+ cp -p ${FDT_DIR}/beaglebone-black.dts ${DESTDIR}/bboneblk.dts
+ cp -p ${FDT_DIR}/beaglebone-black.dts ${DESTDIR}/bboneblk.dtb
+ touch ${DESTDIR}/bb-uEnv.txt
+ umount_loop ${DESTDIR}
+
+ return 0
+}
diff --git a/release/release.sh b/release/release.sh
index b51ebec..367eae4 100755
--- a/release/release.sh
+++ b/release/release.sh
@@ -327,6 +327,17 @@ chroot_arm_armv6_build_release() {
if [ -e "${RELENGDIR}/tools/${TARGET}.subr" ]; then
. "${RELENGDIR}/tools/${TARGET}.subr"
fi
+ . "${RELENGDIR}/arm/${KERNEL}.conf"
+ WORLDDIR="$(eval chroot ${CHROOTDIR} make -C /usr/src/release -V WORLDDIR)"
+ OBJDIR="$(eval chroot ${CHROOTDIR} make -C /usr/src/release -V .OBJDIR)"
+ DESTDIR="${OBJDIR}/${KERNEL}"
+ IMGBASE="${OBJDIR}/${KERNEL}.img"
+ mkdir -p ${DESTDIR}
+ truncate -s ${IMAGE_SIZE} ${IMGBASE}
+ mddev=$(mdconfig -f ${IMGBASE} ${MD_ARGS})
+ arm_create_disk
+ arm_install_base
+ arm_install_uboot
return 0
} # chroot_arm_armv6_build_release()
diff --git a/release/tools/arm.subr b/release/tools/arm.subr
new file mode 100644
index 0000000..66b02da
--- /dev/null
+++ b/release/tools/arm.subr
@@ -0,0 +1,121 @@
+#!/bin/sh
+#-
+# Copyright (c) 2015 The FreeBSD Foundation
+# All rights reserved.
+#
+# Portions of this software were developed by Glen Barber
+# under sponsorship from the FreeBSD Foundation.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# Common subroutines used to build arm/armv6 images.
+#
+# $FreeBSD$
+#
+
+cleanup() {
+ if [ -c "${DESTDIR}/dev/null" ]; then
+ umount_loop ${DESTDIR}/dev 2>/dev/null
+ fi
+ umount_loop ${DESTDIR}
+ if [ ! -z "${mddev}" ]; then
+ mdconfig -d -u ${mddev}
+ fi
+
+ return 0
+}
+
+umount_loop() {
+ DIR=$1
+ i=0
+ sync
+ while ! umount ${DIR}; do
+ i=$(( $i + 1 ))
+ if [ $i -ge 10 ]; then
+ # This should never happen. But, it has happened.
+ echo "Cannot umount(8) ${DIR}"
+ echo "Something has gone horribly wrong."
+ return 1
+ fi
+ sleep 1
+ done
+
+ return 0
+}
+
+arm_create_disk() {
+ # Create the target raw file and temporary work directory.
+ gpart create -s ${PART_SCHEME} ${IMGBASE}
+ gpart add -t '\!12' -a 63 -s ${FAT_SIZE} ${mddev}
+ gpart set -a active -i 1 ${mddev}
+ newfs_msdos -L msdosboot -F ${FAT_TYPE} /dev/${mddev}s1
+ gpart add -t freebsd ${mddev}
+ gpart create -s bsd ${mddev}s2
+ gpart add -t freebsd-ufs -a 64k /dev/${mddev}s2
+ newfs -U -L rootfs /dev/${mddev}s2a
+ tunefs -j enable -N enable /dev/${mddev}s2a
+
+ return 0
+}
+
+arm_install_base() {
+ mount /dev/${mddev}s2a ${DESTDIR}
+ cd ${WORLDDIR} && \
+ eval make TARGET=${EMBEDDED_TARGET} \
+ TARGET_ARCH=${EMBEDDED_TARGET_ARCH} \
+ DESTDIR=${DESTDIR} KERNCONF=${KERNEL} \
+ installworld installkernel distribution
+
+ echo '# Custom /etc/fstab for FreeBSD embedded images' \
+ > ${DESTDIR}/etc/fstab
+ echo "/dev/msdosfs/MSDOSBOOT /boot/msdos msdosfs rw,noatime 0 0" \
+ >> ${DESTDIR}/etc/fstab
+ echo "/dev/ufs/rootfs / ufs rw 1 1" \
+ >> ${DESTDIR}/etc/fstab
+ echo "md /tmp mfs rw,noatime,-s30m 0 0" \
+ >> ${DESTDIR}/etc/fstab
+ echo "md /var/log mfs rw,noatime,-s15m 0 0" \
+ >> ${DESTDIR}/etc/fstab
+ echo "md /var/tmp mfs rw,noatime,-s12m 0 0" \
+ >> ${DESTDIR}/etc/fstab
+
+ local hostname
+ hostname="$(echo ${KERNEL} | tr '[:upper:]' '[:lower:]')"
+ echo "hostname=\"${hostname}\"" > ${DESTDIR}/etc/rc.conf
+ echo 'ifconfig_DEFAULT="DHCP"' >> ${DESTDIR}/etc/rc.conf
+ echo 'sshd_enable="YES"' >> ${DESTDIR}/etc/rc.conf
+ echo 'sendmail_enable="NONE"' >> ${DESTDIR}/etc/rc.conf
+ echo 'sendmail_submit_enable="NO"' >> ${DESTDIR}/etc/rc.conf
+ echo 'sendmail_outbound_enable="NO"' >> ${DESTDIR}/etc/rc.conf
+ echo 'sendmail_msp_queue_enable="NO"' >> ${DESTDIR}/etc/rc.conf
+
+ sync
+ umount_loop ${DESTDIR}
+
+ return 0
+}
+
+arm_install_uboot() {
+ # Override in the arm/KERNEL.conf file.
+
+ return 0
+}
OpenPOWER on IntegriCloud