summaryrefslogtreecommitdiffstats
path: root/tools/tools/nanobsd/gateworks/common
blob: c23a2bfe81658c6150f73529f2b28df8dc47c054 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
# $FreeBSD$

NANO_CFGDIR=${NANO_CFGDIR:-${NANO_SRC}/${NANO_TOOLS}/gateworks/cfg}
test -d ${NANO_CFGDIR} || NANO_CFGDIR=/var/empty
NANO_PMAKE="make"					# NB: disable -j 3

NANO_ARCH=armeb
TARGET_CPUTYPE=xscale; export TARGET_CPUTYPE		# XXX

NANO_CUSTOMIZE="cust_allow_ssh_root"

clean_usr_local()
{
	LOCAL_DIR=${NANO_WORLDDIR}/usr/local
	pprint 2 "Clean and create world directory (${LOCAL_DIR})"
	if rm -rf ${LOCAL_DIR}/ > /dev/null 2>&1 ; then
		true
	else
		chflags -R noschg ${LOCAL_DIR}/
		rm -rf ${LOCAL_DIR}/
	fi
	for f in bin etc lib libdata libexec sbin share; do
		mkdir -p ${LOCAL_DIR}/$f
	done
}
NANO_CUSTOMIZE="$NANO_CUSTOMIZE clean_usr_local"

cust_install_machine_files()
{
	echo "cd ${NANO_TOOLS}/gateworks/Files"
	cd ${NANO_TOOLS}/gateworks/Files
	find . -print | grep -Ev '/(CVS|\.svn)' | cpio -dumpv ${NANO_WORLDDIR}
}
NANO_CUSTOMIZE="$NANO_CUSTOMIZE cust_install_files cust_install_machine_files"

buildenv()
{
	cd ${NANO_SRC}
	env TARGET_ARCH=${NANO_ARCH} __MAKE_CONF=${NANO_MAKE_CONF_BUILD} \
	    DESTDIR=${NANO_WORLDDIR} make buildenv
}

net80211_tools()
{
	for f in wlanstats wlanwds wlanwatch; do 
		echo "(cd tools/tools/net80211/$f; make $1)"; 
	done | buildenv
}
net80211_clean_tools()
{
	net80211_tools "clean"
}
net80211_build_tools()
{
	net80211_tools ""
}
net80211_install_tools()
{
	net80211_tools "install"
}
NANO_CUSTOMIZE="$NANO_CUSTOMIZE net80211_clean_tools"
NANO_CUSTOMIZE="$NANO_CUSTOMIZE net80211_build_tools"
NANO_CUSTOMIZE="$NANO_CUSTOMIZE net80211_install_tools"

ath_clean_tools()
{
	echo "cd tools/tools/ath; make clean" | buildenv
}
ath_build_tools()
{
	echo "cd tools/tools/ath; make" | buildenv
}
ath_install_tools()
{
	echo "cd tools/tools/ath; make install" | buildenv
}
NANO_CUSTOMIZE="$NANO_CUSTOMIZE ath_clean_tools"
NANO_CUSTOMIZE="$NANO_CUSTOMIZE ath_build_tools"
NANO_CUSTOMIZE="$NANO_CUSTOMIZE ath_install_tools"

npe_clean_tools()
{
	echo "cd tools/tools/npe; make clean" | buildenv
}
npe_build_tools()
{
	echo "cd tools/tools/npe; make" | buildenv
}
npe_install_tools()
{
	echo "cd tools/tools/npe; make install" | buildenv
}
NANO_CUSTOMIZE="$NANO_CUSTOMIZE npe_clean_tools"
NANO_CUSTOMIZE="$NANO_CUSTOMIZE npe_build_tools"
NANO_CUSTOMIZE="$NANO_CUSTOMIZE npe_install_tools"

NANO_MAKEFS="makefs -B big \
	-o bsize=4096,fsize=512,density=8192,optimization=space"
export NANO_MAKEFS

# NB: leave c++ enabled so devd can be built
CONF_BUILD="
WITHOUT_ACCT=true
WITHOUT_ACPI=true
WITHOUT_APM=true
WITHOUT_ATM=true
WITHOUT_AUDIT=true
WITHOUT_BIND_DNSSEC=true
WITHOUT_BIND_ETC=true
WITHOUT_BIND_LIBS_LWRES=true
WITHOUT_BLUETOOTH=true
WITHOUT_BSNMP=true
WITHOUT_CALENDAR=true
WITHOUT_CDDL=true
WITHOUT_CTM=true
WITHOUT_CVS=true
WITHOUT_DICT=true
WITHOUT_EXAMPLES=true
WITHOUT_FLOPPY=true
WITHOUT_FORTRAN=true
WITHOUT_GAMES=true
WITHOUT_GCOV=true
WITHOUT_GPIB=true
WITHOUT_GROFF=true
WITHOUT_HTML=true
WITHOUT_INET6=true
WITHOUT_INFO=true
WITHOUT_IPFILTER=true
WITHOUT_IPX=true
WITHOUT_KERBEROS=true
WITHOUT_LOCALES=true
WITHOUT_LPR=true
WITHOUT_MAN=true
WITHOUT_MAIL=true
WITHOUT_MAILWRAPPER=true
WITHOUT_NETCAT=true
WITHOUT_NIS=true
WITHOUT_NLS=true
WITHOUT_NS_CACHING=true
WITHOUT_OBJC=true
WITHOUT_PMC=true
WITHOUT_PORTSNAP=true
WITHOUT_PROFILE=true
WITHOUT_QUOTAS=true
WITHOUT_RCMDS=true
WITHOUT_RCS=true
WITHOUT_RESCUE=true
WITHOUT_SENDMAIL=true
WITHOUT_SHAREDOCS=true
WITHOUT_SSP=true
WITHOUT_SYSCONS=true
WITHOUT_SYSINSTALL=true
WITHOUT_TCSH=true
WITHOUT_TFTPD=true
WITHOUT_ZFS=true
"
CONF_INSTALL="$CONF_BUILD
WITHOUT_TOOLCHAIN=true
WITHOUT_INSTALLLIB=true
INSTALL_NODEBUG=true
"

# NB: override to force / on s1 instead of s1a
setup_nanobsd_etc()
{
	pprint 2 "configure nanobsd /etc"

	(
	cd ${NANO_WORLDDIR}

	# create diskless marker file
	touch etc/diskless

	# Make root filesystem R/O by default
	echo "root_rw_mount=NO" >> etc/defaults/rc.conf

	# save config file for scripts
	echo "NANO_DRIVE=${NANO_DRIVE}" > etc/nanobsd.conf

	echo "/dev/${NANO_DRIVE}s1 / ufs ro 1 1" > etc/fstab
	echo "/dev/${NANO_DRIVE}s3 /cfg ufs rw,noauto 2 2" >> etc/fstab
	mkdir -p cfg
	)
}

create_arm_diskimage()
{
	pprint 2 "build diskimage"
	pprint 3 "log: ${MAKEOBJDIRPREFIX}/_.di"

	(
	echo "NANO_MEDIASIZE:	$NANO_MEDIASIZE"
	echo "NANO_IMAGES:	$NANO_IMAGES"
	echo "NANO_SECTS:	$NANO_SECTS"
	echo "NANO_HEADS:	$NANO_HEADS"
	echo "NANO_CODESIZE:	$NANO_CODESIZE"
	echo "NANO_CONFSIZE:	$NANO_CONFSIZE"
	echo "NANO_DATASIZE:	$NANO_DATASIZE"

	echo $NANO_MEDIASIZE $NANO_IMAGES \
		$NANO_SECTS $NANO_HEADS \
		$NANO_CODESIZE $NANO_CONFSIZE $NANO_DATASIZE |
	awk '
	{
		printf "# %s\n", $0

		# size of cylinder in sectors
		cs = $3 * $4

		# number of full cylinders on media
		cyl = int ($1 / cs)

		# output fdisk geometry spec, truncate cyls to 1023
		if (cyl <= 1023)
			print "g c" cyl " h" $4 " s" $3
		else
			print "g c" 1023 " h" $4 " s" $3

		if ($7 > 0) { 
			# size of data partition in full cylinders
			dsl = int (($7 + cs - 1) / cs)
		} else {
			dsl = 0;
		}

		# size of config partition in full cylinders
		csl = int (($6 + cs - 1) / cs)

		if ($5 == 0) {
			# size of image partition(s) in full cylinders
			isl = int ((cyl - dsl - csl) / $2)
		} else {
			isl = int (($5 + cs - 1) / cs)
		}

		# First image partition start at second track
		print "p 1 165 " $3, isl * cs - $3
		c = isl * cs;

		# Second image partition (if any) also starts offset one 
		# track to keep them identical.
		if ($2 > 1) {
			print "p 2 165 " $3 + c, isl * cs - $3
			c += isl * cs;
		}

		# Config partition starts at cylinder boundary.
		print "p 3 165 " c, csl * cs
		c += csl * cs

		# Data partition (if any) starts at cylinder boundary.
		if ($7 > 0) {
			print "p 4 165 " c, dsl * cs
		} else if ($7 < 0 && $1 > c) {
			print "p 4 165 " c, $1 - c
		} else if ($1 < c) {
			print "Disk space overcommitted by", \
			    c - $1, "sectors" > "/dev/stderr"
			exit 2
		}

		# Force slice 1 to be marked active. This is necessary
		# for booting the image from a USB device to work.
		print "a 1"
	}
	' > ${MAKEOBJDIRPREFIX}/_.fdisk

	IMG=${NANO_DISKIMGDIR}/${NANO_IMGNAME}
	BS=${NANO_SECTS}b

	if [ "${NANO_MD_BACKING}" = "swap" ] ; then
		MD=`mdconfig -a -t swap -s ${NANO_MEDIASIZE} -x ${NANO_SECTS} \
			-y ${NANO_HEADS}`
	else
		echo ""; echo "Creating md backing file ${IMG} ..."
		_c=`expr ${NANO_MEDIASIZE} / ${NANO_SECTS}`
		pprint 2 "dd if=/dev/zero of=${IMG} bs=${BS} count=${_c}"
		dd if=/dev/zero of=${IMG} bs=${BS} count=${_c}
		pprint 2 "mdconfig -a -t vnode -f ${IMG} -x ${NANO_SECTS} -y ${NANO_HEADS}"
		MD=`mdconfig -a -t vnode -f ${IMG} -x ${NANO_SECTS} \
			-y ${NANO_HEADS}`
	fi

	trap "mdconfig -d -u $MD" 1 2 15 EXIT

	echo ""; echo "Write partition table ..."
	FDISK=${MAKEOBJDIRPREFIX}/_.fdisk
	pprint 2 "fdisk -i -f ${FDISK} ${MD}"
	fdisk -i -f ${FDISK} ${MD}
	pprint 2 "fdisk ${MD}"
	fdisk ${MD}

	# Create first image
	IMG1=${NANO_DISKIMGDIR}/_.disk.image1
	echo ""; echo "Create first image ${IMG1} ..."
	SIZE=`awk '/^p 1/ { print $5 "b" }' ${FDISK}`
	pprint 2 "${NANO_MAKEFS} -s ${SIZE} ${IMG1} ${NANO_WORLDDIR}"
	${NANO_MAKEFS} -s ${SIZE} ${IMG1} ${NANO_WORLDDIR}
	pprint 2 "dd if=${IMG1} of=/dev/${MD}s1 bs=${BS}"
	dd if=${IMG1} of=/dev/${MD}s1 bs=${BS}

	if [ $NANO_IMAGES -gt 1 -a $NANO_INIT_IMG2 -gt 0 ] ; then
		IMG2=${NANO_DISKIMGDIR}/_.disk.image2
		echo ""; echo "Create second image ${IMG2}..."
		for f in ${NANO_WORLDDIR}/etc/fstab ${NANO_WORLDDIR}/conf/base/etc/fstab
		do
			sed -i "" "s/${NANO_DRIVE}s1/${NANO_DRIVE}s2/g" $f
		done

		SIZE=`awk '/^p 2/ { print $5 "b" }' ${FDISK}`
		pprint 2 "${NANO_MAKEFS} -s ${SIZE} ${IMG2} ${NANO_WORLDDIR}"
		${NANO_MAKEFS} -s ${SIZE} ${IMG2} ${NANO_WORLDDIR}
		pprint 2 "dd if=${IMG2} of=/dev/${MD}s2 bs=${BS}"
		dd if=${IMG2} of=/dev/${MD}s2 bs=${BS}
	fi

	# Create Config slice
	CFG=${NANO_DISKIMGDIR}/_.disk.cfg
	echo ""; echo "Creating config partition ${CFG}..."
	SIZE=`awk '/^p 3/ { print $5 "b" }' ${FDISK}`
	# XXX: fill from where ?
	pprint 2 "${NANO_MAKEFS} -s ${SIZE} ${CFG} ${NANO_CFGDIR}"
	${NANO_MAKEFS} -s ${SIZE} ${CFG} ${NANO_CFGDIR}
	pprint 2 "dd if=${CFG} of=/dev/${MD}s3 bs=${BS}"
	dd if=${CFG} of=/dev/${MD}s3 bs=${BS}
	pprint 2 "rm ${CFG}"
	rm ${CFG}; CFG=			# NB: disable printing below

	# Create Data slice, if any.
	if [ $NANO_DATASIZE -gt 0 ] ; then
		DATA=${NANO_DISKIMGDIR}/_.disk.data
		echo ""; echo "Creating data partition ${DATA}..."
		SIZE=`awk '/^p 4/ { print $5 "b" }' ${FDISK}`
		# XXX: fill from where ?
		pprint 2 "${NANO_MAKEFS} -s ${SIZE} ${DATA} /var/empty"
		${NANO_MAKEFS} -s ${SIZE} ${DATA} /var/empty
		pprint 2 "dd if=${DATA} of=/dev/${MD}s4 bs=${BS}"
		dd if=${DATA} of=/dev/${MD}s4 bs=${BS}
		pprint 2 "rm ${DATA}"
		rm ${DATA}; DATA=	# NB: disable printing below
	fi

	if [ "${NANO_MD_BACKING}" = "swap" ] ; then
		echo "Writing out _.disk.full..."
		dd if=/dev/${MD} of=${IMG} bs=${BS}
	fi

	echo ""
	echo "Completed images in:"
	echo ""
	echo "Full disk:         ${IMG}"
	echo "Primary partition: ${IMG1}"
	test "${IMG2}" && echo "2ndary partition:  ${IMG2}"
	test "${CFG}" &&  echo "/cfg partition:    ${CFG}"
	test "${DATA}" && echo "/data partition:   ${DATA}"
	echo ""
	echo "Use dd if=<file> of=/dev/<somewhere> bs=${BS} to transfer an"
	echo "image to bootable media /dev/<somewhere>."
	) > ${MAKEOBJDIRPREFIX}/_.di 2>&1
}
OpenPOWER on IntegriCloud