14ad8b75dSGlen Barber#!/bin/sh 24ad8b75dSGlen Barber#- 3751c20d8SGlen Barber# Copyright (c) 2015-2017 The FreeBSD Foundation 44ad8b75dSGlen Barber# All rights reserved. 54ad8b75dSGlen Barber# 64ad8b75dSGlen Barber# Portions of this software were developed by Glen Barber 74ad8b75dSGlen Barber# under sponsorship from the FreeBSD Foundation. 84ad8b75dSGlen Barber# 94ad8b75dSGlen Barber# Redistribution and use in source and binary forms, with or without 104ad8b75dSGlen Barber# modification, are permitted provided that the following conditions 114ad8b75dSGlen Barber# are met: 124ad8b75dSGlen Barber# 1. Redistributions of source code must retain the above copyright 134ad8b75dSGlen Barber# notice, this list of conditions and the following disclaimer. 144ad8b75dSGlen Barber# 2. Redistributions in binary form must reproduce the above copyright 154ad8b75dSGlen Barber# notice, this list of conditions and the following disclaimer in the 164ad8b75dSGlen Barber# documentation and/or other materials provided with the distribution. 174ad8b75dSGlen Barber# 184ad8b75dSGlen Barber# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 194ad8b75dSGlen Barber# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 204ad8b75dSGlen Barber# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 214ad8b75dSGlen Barber# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 224ad8b75dSGlen Barber# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 234ad8b75dSGlen Barber# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 244ad8b75dSGlen Barber# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 254ad8b75dSGlen Barber# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 264ad8b75dSGlen Barber# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 274ad8b75dSGlen Barber# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 284ad8b75dSGlen Barber# SUCH DAMAGE. 294ad8b75dSGlen Barber# 30751c20d8SGlen Barber# Common subroutines used to build arm SD card images. 314ad8b75dSGlen Barber# 324ad8b75dSGlen Barber# $FreeBSD$ 334ad8b75dSGlen Barber# 344ad8b75dSGlen Barber 354ad8b75dSGlen Barbercleanup() { 364ad8b75dSGlen Barber if [ -c "${DESTDIR}/dev/null" ]; then 374ad8b75dSGlen Barber umount_loop ${DESTDIR}/dev 2>/dev/null 384ad8b75dSGlen Barber fi 394ad8b75dSGlen Barber umount_loop ${DESTDIR} 404ad8b75dSGlen Barber if [ ! -z "${mddev}" ]; then 414ad8b75dSGlen Barber mdconfig -d -u ${mddev} 424ad8b75dSGlen Barber fi 434ad8b75dSGlen Barber 444ad8b75dSGlen Barber return 0 454ad8b75dSGlen Barber} 464ad8b75dSGlen Barber 474ad8b75dSGlen Barberumount_loop() { 484ad8b75dSGlen Barber DIR=$1 494ad8b75dSGlen Barber i=0 504ad8b75dSGlen Barber sync 514ad8b75dSGlen Barber while ! umount ${DIR}; do 524ad8b75dSGlen Barber i=$(( $i + 1 )) 534ad8b75dSGlen Barber if [ $i -ge 10 ]; then 544ad8b75dSGlen Barber # This should never happen. But, it has happened. 554ad8b75dSGlen Barber echo "Cannot umount(8) ${DIR}" 564ad8b75dSGlen Barber echo "Something has gone horribly wrong." 574ad8b75dSGlen Barber return 1 584ad8b75dSGlen Barber fi 594ad8b75dSGlen Barber sleep 1 604ad8b75dSGlen Barber done 614ad8b75dSGlen Barber 624ad8b75dSGlen Barber return 0 634ad8b75dSGlen Barber} 644ad8b75dSGlen Barber 654ad8b75dSGlen Barberarm_create_disk() { 664ad8b75dSGlen Barber # Create the target raw file and temporary work directory. 6704b7fd00SGlen Barber chroot ${CHROOTDIR} gpart create -s ${PART_SCHEME} ${mddev} 68751c20d8SGlen Barber chroot ${CHROOTDIR} gpart add -t '!12' -a 512k -s ${FAT_SIZE} ${mddev} 6904b7fd00SGlen Barber chroot ${CHROOTDIR} gpart set -a active -i 1 ${mddev} 7004b7fd00SGlen Barber chroot ${CHROOTDIR} newfs_msdos -L msdosboot -F ${FAT_TYPE} /dev/${mddev}s1 7104b7fd00SGlen Barber chroot ${CHROOTDIR} gpart add -t freebsd ${mddev} 7204b7fd00SGlen Barber chroot ${CHROOTDIR} gpart create -s bsd ${mddev}s2 7304b7fd00SGlen Barber chroot ${CHROOTDIR} gpart add -t freebsd-ufs -a 64k /dev/${mddev}s2 7404b7fd00SGlen Barber chroot ${CHROOTDIR} newfs -U -L rootfs /dev/${mddev}s2a 754ad8b75dSGlen Barber 764ad8b75dSGlen Barber return 0 774ad8b75dSGlen Barber} 784ad8b75dSGlen Barber 7988feae84SGlen Barberarm_create_user() { 8088feae84SGlen Barber # Create a default user account 'freebsd' with the password 'freebsd', 8188feae84SGlen Barber # and set the default password for the 'root' user to 'root'. 82b07d911fSGlen Barber chroot ${CHROOTDIR} /usr/sbin/pw -R ${DESTDIR} \ 83f3ca4d91SGlen Barber groupadd freebsd -g 1001 84717a45fcSGlen Barber chroot ${CHROOTDIR} mkdir -p ${DESTDIR}/home/freebsd 85b07d911fSGlen Barber chroot ${CHROOTDIR} /usr/sbin/pw -R ${DESTDIR} \ 86f3ca4d91SGlen Barber useradd freebsd \ 8788feae84SGlen Barber -m -M 0755 -w yes -n freebsd -u 1001 -g 1001 -G 0 \ 88b07d911fSGlen Barber -c 'FreeBSD User' -d '/home/freebsd' -s '/bin/csh' 89b07d911fSGlen Barber chroot ${CHROOTDIR} /usr/sbin/pw -R ${DESTDIR} \ 90f3ca4d91SGlen Barber usermod root -w yes 9188feae84SGlen Barber 9288feae84SGlen Barber return 0 9388feae84SGlen Barber} 9488feae84SGlen Barber 954fe984fdSEdward Tomasz Napieralaarm_setup_usb_otg() { 964fe984fdSEdward Tomasz Napierala # Set up virtual serial port over USB OTG / device mode. 974fe984fdSEdward Tomasz Napierala echo >> ${CHROOTDIR}/${DESTDIR}/etc/devd.conf 984fe984fdSEdward Tomasz Napierala echo '# Required for USB OTG virtual serial port.' \ 994fe984fdSEdward Tomasz Napierala >> ${CHROOTDIR}/${DESTDIR}/etc/devd.conf 1004fe984fdSEdward Tomasz Napierala echo 'notify 100 {' \ 1014fe984fdSEdward Tomasz Napierala >> ${CHROOTDIR}/${DESTDIR}/etc/devd.conf 1024fe984fdSEdward Tomasz Napierala echo ' match "system" "DEVFS";' \ 1034fe984fdSEdward Tomasz Napierala >> ${CHROOTDIR}/${DESTDIR}/etc/devd.conf 1044fe984fdSEdward Tomasz Napierala echo ' match "subsystem" "CDEV";' \ 1054fe984fdSEdward Tomasz Napierala >> ${CHROOTDIR}/${DESTDIR}/etc/devd.conf 1064fe984fdSEdward Tomasz Napierala echo ' match "type" "CREATE";' \ 1074fe984fdSEdward Tomasz Napierala >> ${CHROOTDIR}/${DESTDIR}/etc/devd.conf 1084fe984fdSEdward Tomasz Napierala echo ' match "cdev" "ttyU[0-9]+";' \ 1094fe984fdSEdward Tomasz Napierala >> ${CHROOTDIR}/${DESTDIR}/etc/devd.conf 1104fe984fdSEdward Tomasz Napierala echo ' action "/sbin/init q";' \ 1114fe984fdSEdward Tomasz Napierala >> ${CHROOTDIR}/${DESTDIR}/etc/devd.conf 1124fe984fdSEdward Tomasz Napierala echo '};' \ 1134fe984fdSEdward Tomasz Napierala >> ${CHROOTDIR}/${DESTDIR}/etc/devd.conf 1144fe984fdSEdward Tomasz Napierala 1154fe984fdSEdward Tomasz Napierala echo '# USB OTG virtual serial port' \ 1164fe984fdSEdward Tomasz Napierala >> ${CHROOTDIR}/${DESTDIR}/etc/ttys 1174fe984fdSEdward Tomasz Napierala echo 'ttyU0 "/usr/libexec/getty 3wire" vt100 onifconsole secure' \ 1184fe984fdSEdward Tomasz Napierala >> ${CHROOTDIR}/${DESTDIR}/etc/ttys 1194fe984fdSEdward Tomasz Napierala echo 'ttyU1 "/usr/libexec/getty 3wire" vt100 onifconsole secure' \ 1204fe984fdSEdward Tomasz Napierala >> ${CHROOTDIR}/${DESTDIR}/etc/ttys 1214fe984fdSEdward Tomasz Napierala 1224fe984fdSEdward Tomasz Napierala echo '# Configure USB OTG; see usb_template(4).' \ 1234fe984fdSEdward Tomasz Napierala >> ${CHROOTDIR}/${DESTDIR}/boot/loader.conf 1244fe984fdSEdward Tomasz Napierala echo 'hw.usb.template=3' \ 1254fe984fdSEdward Tomasz Napierala >> ${CHROOTDIR}/${DESTDIR}/boot/loader.conf 1264fe984fdSEdward Tomasz Napierala echo 'umodem_load="YES"' \ 1274fe984fdSEdward Tomasz Napierala >> ${CHROOTDIR}/${DESTDIR}/boot/loader.conf 1284fe984fdSEdward Tomasz Napierala} 1294fe984fdSEdward Tomasz Napierala 130*a8d0ee75SEmmanuel Vadotarm64_setup_multicons() { 131*a8d0ee75SEmmanuel Vadot if [ "${EMBEDDED_TARGET_ARCH}" != "aarch64" ]; then 132*a8d0ee75SEmmanuel Vadot return 133*a8d0ee75SEmmanuel Vadot fi 134*a8d0ee75SEmmanuel Vadot 135*a8d0ee75SEmmanuel Vadot echo '# Multiple console (serial+efi gop) enabled.' \ 136*a8d0ee75SEmmanuel Vadot >> ${CHROOTDIR}/${DESTDIR}/boot/loader.conf 137*a8d0ee75SEmmanuel Vadot echo 'boot_multicons="YES"' \ 138*a8d0ee75SEmmanuel Vadot >> ${CHROOTDIR}/${DESTDIR}/boot/loader.conf 139*a8d0ee75SEmmanuel Vadot echo 'boot_serial="YES"' \ 140*a8d0ee75SEmmanuel Vadot >> ${CHROOTDIR}/${DESTDIR}/boot/loader.conf 141*a8d0ee75SEmmanuel Vadot} 142*a8d0ee75SEmmanuel Vadot 1434ad8b75dSGlen Barberarm_install_base() { 14404b7fd00SGlen Barber chroot ${CHROOTDIR} mount /dev/${mddev}s2a ${DESTDIR} 14504b7fd00SGlen Barber eval chroot ${CHROOTDIR} make -C ${WORLDDIR} \ 14604b7fd00SGlen Barber TARGET=${EMBEDDED_TARGET} \ 1474ad8b75dSGlen Barber TARGET_ARCH=${EMBEDDED_TARGET_ARCH} \ 1484ad8b75dSGlen Barber DESTDIR=${DESTDIR} KERNCONF=${KERNEL} \ 1494ad8b75dSGlen Barber installworld installkernel distribution 150fef41f60SGlen Barber chroot ${CHROOTDIR} mkdir -p ${DESTDIR}/boot/msdos 1514ad8b75dSGlen Barber 152f3ca4d91SGlen Barber arm_create_user 1534fe984fdSEdward Tomasz Napierala arm_setup_usb_otg 154*a8d0ee75SEmmanuel Vadot arm64_setup_multicons 15588feae84SGlen Barber 1564ad8b75dSGlen Barber echo '# Custom /etc/fstab for FreeBSD embedded images' \ 15704b7fd00SGlen Barber > ${CHROOTDIR}/${DESTDIR}/etc/fstab 1584ad8b75dSGlen Barber echo "/dev/ufs/rootfs / ufs rw 1 1" \ 15904b7fd00SGlen Barber >> ${CHROOTDIR}/${DESTDIR}/etc/fstab 160869ef347SGlen Barber echo "/dev/msdosfs/MSDOSBOOT /boot/msdos msdosfs rw,noatime 0 0" \ 161869ef347SGlen Barber >> ${CHROOTDIR}/${DESTDIR}/etc/fstab 162c7161c4aSEmmanuel Vadot echo "tmpfs /tmp tmpfs rw,mode=1777,size=50m 0 0" \ 16304b7fd00SGlen Barber >> ${CHROOTDIR}/${DESTDIR}/etc/fstab 1644ad8b75dSGlen Barber 1654ad8b75dSGlen Barber local hostname 1664ad8b75dSGlen Barber hostname="$(echo ${KERNEL} | tr '[:upper:]' '[:lower:]')" 16704b7fd00SGlen Barber echo "hostname=\"${hostname}\"" > ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 16804b7fd00SGlen Barber echo 'ifconfig_DEFAULT="DHCP"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 16904b7fd00SGlen Barber echo 'sshd_enable="YES"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 17004b7fd00SGlen Barber echo 'sendmail_enable="NONE"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 17104b7fd00SGlen Barber echo 'sendmail_submit_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 17204b7fd00SGlen Barber echo 'sendmail_outbound_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 17304b7fd00SGlen Barber echo 'sendmail_msp_queue_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 17460bc17f4SGlen Barber echo 'growfs_enable="YES"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 1754ad8b75dSGlen Barber 1764ad8b75dSGlen Barber sync 17704b7fd00SGlen Barber umount_loop ${CHROOTDIR}/${DESTDIR} 1784ad8b75dSGlen Barber 1794ad8b75dSGlen Barber return 0 1804ad8b75dSGlen Barber} 1814ad8b75dSGlen Barber 18243e289dfSEmmanuel Vadotarm_install_boot() { 18343e289dfSEmmanuel Vadot FATMOUNT="${DESTDIR%${KERNEL}}/fat" 18443e289dfSEmmanuel Vadot UFSMOUNT="${DESTDIR%${KERNEL}}/ufs" 18543e289dfSEmmanuel Vadot chroot ${CHROOTDIR} mkdir -p "${FATMOUNT}" "${UFSMOUNT}" 18643e289dfSEmmanuel Vadot chroot ${CHROOTDIR} mount_msdosfs /dev/${mddev}s1 ${FATMOUNT} 18743e289dfSEmmanuel Vadot chroot ${CHROOTDIR} mount /dev/${mddev}s2a ${UFSMOUNT} 18843e289dfSEmmanuel Vadot 18943e289dfSEmmanuel Vadot if [ "${EMBEDDED_TARGET}" == "arm" ]; then 19043e289dfSEmmanuel Vadot chroot ${CHROOTDIR} cp -p ${UFSMOUNT}/boot/ubldr.bin \ 19143e289dfSEmmanuel Vadot ${FATMOUNT}/ubldr.bin 19243e289dfSEmmanuel Vadot fi 19343e289dfSEmmanuel Vadot 19443e289dfSEmmanuel Vadot BOOTFILES="$(chroot ${CHROOTDIR} \ 19543e289dfSEmmanuel Vadot env TARGET=${EMBEDDED_TARGET} TARGET_ARCH=${EMBEDDED_TARGET_ARCH} \ 19643e289dfSEmmanuel Vadot WITH_UNIFIED_OBJDIR=yes \ 19743e289dfSEmmanuel Vadot make -C ${WORLDDIR}/stand -V .OBJDIR)" 19843e289dfSEmmanuel Vadot BOOTFILES="$(chroot ${CHROOTDIR} realpath ${BOOTFILES})" 19943e289dfSEmmanuel Vadot 20043e289dfSEmmanuel Vadot chroot ${CHROOTDIR} mkdir -p ${FATMOUNT}/EFI/BOOT 20143e289dfSEmmanuel Vadot chroot ${CHROOTDIR} cp -p ${BOOTFILES}/efi/loader/loader.efi \ 20243e289dfSEmmanuel Vadot ${FATMOUNT}/EFI/BOOT/$(efi_boot_name ${EMBEDDED_TARGET}) 20343e289dfSEmmanuel Vadot 20443e289dfSEmmanuel Vadot chroot ${CHROOTDIR} touch ${UFSMOUNT}/firstboot 20543e289dfSEmmanuel Vadot sync 20643e289dfSEmmanuel Vadot umount_loop ${CHROOTDIR}/${FATMOUNT} 20743e289dfSEmmanuel Vadot umount_loop ${CHROOTDIR}/${UFSMOUNT} 20843e289dfSEmmanuel Vadot chroot ${CHROOTDIR} rmdir ${FATMOUNT} 20943e289dfSEmmanuel Vadot chroot ${CHROOTDIR} rmdir ${UFSMOUNT} 21043e289dfSEmmanuel Vadot} 21143e289dfSEmmanuel Vadot 2124ad8b75dSGlen Barberarm_install_uboot() { 2134ad8b75dSGlen Barber # Override in the arm/KERNEL.conf file. 2144ad8b75dSGlen Barber 2154ad8b75dSGlen Barber return 0 2164ad8b75dSGlen Barber} 217