xref: /freebsd/release/tools/arm.subr (revision b339ef955c65fd672f7e3dd39f22c8f946d09f3e)
1#!/bin/sh
2#-
3# Copyright (c) 2015 The FreeBSD Foundation
4# All rights reserved.
5#
6# Portions of this software were developed by Glen Barber
7# under sponsorship from the FreeBSD Foundation.
8#
9# Redistribution and use in source and binary forms, with or without
10# modification, are permitted provided that the following conditions
11# are met:
12# 1. Redistributions of source code must retain the above copyright
13#    notice, this list of conditions and the following disclaimer.
14# 2. Redistributions in binary form must reproduce the above copyright
15#    notice, this list of conditions and the following disclaimer in the
16#    documentation and/or other materials provided with the distribution.
17#
18# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28# SUCH DAMAGE.
29#
30# Common subroutines used to build arm/armv6 images.
31#
32# $FreeBSD$
33#
34
35cleanup() {
36	if [ -c "${DESTDIR}/dev/null" ]; then
37		umount_loop ${DESTDIR}/dev 2>/dev/null
38	fi
39	umount_loop ${DESTDIR}
40	if [ ! -z "${mddev}" ]; then
41		mdconfig -d -u ${mddev}
42	fi
43
44	return 0
45}
46
47umount_loop() {
48	DIR=$1
49	i=0
50	sync
51	while ! umount ${DIR}; do
52		i=$(( $i + 1 ))
53		if [ $i -ge 10 ]; then
54			# This should never happen.  But, it has happened.
55			echo "Cannot umount(8) ${DIR}"
56			echo "Something has gone horribly wrong."
57			return 1
58		fi
59		sleep 1
60	done
61
62	return 0
63}
64
65arm_create_disk() {
66	# XXX: This is potentially dangerous, but works around an issue
67	#      properly labeling md(4) devices when the label already
68	#      exists.
69	#      EVERYTHINGISFINE should *never* be set for non-RE use.
70	#      Trust me.  I'm an engineer.
71	if [ ! -z "${EVERYTHINGISFINE}" ]; then
72		for _label in ufs/rootfs msdosfs/MSDOSBOOT; do
73			if [ -e "/dev/${_label}" ]; then
74				rm /dev/${_label}
75			fi
76		done
77	fi
78	# Create the target raw file and temporary work directory.
79	chroot ${CHROOTDIR} gpart create -s ${PART_SCHEME} ${mddev}
80	chroot ${CHROOTDIR} gpart add -t '!12' -a 63 -s ${FAT_SIZE} ${mddev}
81	chroot ${CHROOTDIR} gpart set -a active -i 1 ${mddev}
82	chroot ${CHROOTDIR} newfs_msdos -L msdosboot -F ${FAT_TYPE} /dev/${mddev}s1
83	chroot ${CHROOTDIR} gpart add -t freebsd ${mddev}
84	chroot ${CHROOTDIR} gpart create -s bsd ${mddev}s2
85	chroot ${CHROOTDIR} gpart add -t freebsd-ufs -a 64k /dev/${mddev}s2
86	chroot ${CHROOTDIR} newfs -U -L rootfs /dev/${mddev}s2a
87	chroot ${CHROOTDIR} tunefs -N enable /dev/${mddev}s2a
88
89	return 0
90}
91
92arm_create_user() {
93	# Create a default user account 'freebsd' with the password 'freebsd',
94	# and set the default password for the 'root' user to 'root'.
95	chroot ${CHROOTDIR} /usr/sbin/pw -R ${DESTDIR} \
96		groupadd freebsd -g 1001
97	chroot ${CHROOTDIR} mkdir -p ${DESTDIR}/home/freebsd
98	chroot ${CHROOTDIR} /usr/sbin/pw -R ${DESTDIR} \
99		useradd freebsd \
100		-m -M 0755 -w yes -n freebsd -u 1001 -g 1001 -G 0 \
101		-c 'FreeBSD User' -d '/home/freebsd' -s '/bin/csh'
102	chroot ${CHROOTDIR} /usr/sbin/pw -R ${DESTDIR} \
103		usermod root -w yes
104
105	return 0
106}
107
108arm_install_base() {
109	chroot ${CHROOTDIR} mount /dev/${mddev}s2a ${DESTDIR}
110	eval chroot ${CHROOTDIR} make -C ${WORLDDIR} \
111		TARGET=${EMBEDDED_TARGET} \
112		TARGET_ARCH=${EMBEDDED_TARGET_ARCH} \
113		DESTDIR=${DESTDIR} KERNCONF=${KERNEL} \
114		installworld installkernel distribution
115	chroot ${CHROOTDIR} mkdir -p ${DESTDIR}/boot/msdos
116
117	arm_create_user
118
119	echo '# Custom /etc/fstab for FreeBSD embedded images' \
120		> ${CHROOTDIR}/${DESTDIR}/etc/fstab
121	echo "/dev/ufs/rootfs   /       ufs     rw      1       1" \
122		>> ${CHROOTDIR}/${DESTDIR}/etc/fstab
123	echo "/dev/msdosfs/MSDOSBOOT /boot/msdos msdosfs rw,noatime 0 0" \
124		>> ${CHROOTDIR}/${DESTDIR}/etc/fstab
125	echo "md /tmp mfs rw,noatime,-s30m 0 0" \
126		>> ${CHROOTDIR}/${DESTDIR}/etc/fstab
127	echo "md /var/log mfs rw,noatime,-s15m 0 0" \
128		>> ${CHROOTDIR}/${DESTDIR}/etc/fstab
129	echo "md /var/tmp mfs rw,noatime,-s12m 0 0" \
130		>> ${CHROOTDIR}/${DESTDIR}/etc/fstab
131
132	local hostname
133	hostname="$(echo ${KERNEL} | tr '[:upper:]' '[:lower:]')"
134	echo "hostname=\"${hostname}\"" > ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
135	echo 'ifconfig_DEFAULT="DHCP"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
136	echo 'sshd_enable="YES"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
137	echo 'sendmail_enable="NONE"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
138	echo 'sendmail_submit_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
139	echo 'sendmail_outbound_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
140	echo 'sendmail_msp_queue_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
141	echo 'growfs_enable="YES"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf
142
143	sync
144	umount_loop ${CHROOTDIR}/${DESTDIR}
145
146	return 0
147}
148
149arm_install_uboot() {
150	# Override in the arm/KERNEL.conf file.
151
152	return 0
153}
154