1186979Ssam# $FreeBSD$ 2186979Ssam 3191246SsamNANO_CFGDIR=${NANO_CFGDIR:-${NANO_SRC}/${NANO_TOOLS}/gateworks/cfg} 4186979Ssamtest -d ${NANO_CFGDIR} || NANO_CFGDIR=/var/empty 5186979SsamNANO_PMAKE="make" # NB: disable -j 3 6186979Ssam 7226242SthompsaNANO_ARCH=armeb 8186979SsamTARGET_CPUTYPE=xscale; export TARGET_CPUTYPE # XXX 9186979Ssam 10186979SsamNANO_CUSTOMIZE="cust_allow_ssh_root" 11186979Ssam 12186979Ssamclean_usr_local() 13186979Ssam{ 14186979Ssam LOCAL_DIR=${NANO_WORLDDIR}/usr/local 15186979Ssam pprint 2 "Clean and create world directory (${LOCAL_DIR})" 16186979Ssam if rm -rf ${LOCAL_DIR}/ > /dev/null 2>&1 ; then 17186979Ssam true 18186979Ssam else 19186979Ssam chflags -R noschg ${LOCAL_DIR}/ 20186979Ssam rm -rf ${LOCAL_DIR}/ 21186979Ssam fi 22186979Ssam for f in bin etc lib libdata libexec sbin share; do 23186979Ssam mkdir -p ${LOCAL_DIR}/$f 24186979Ssam done 25186979Ssam} 26186979SsamNANO_CUSTOMIZE="$NANO_CUSTOMIZE clean_usr_local" 27186979Ssam 28186979Ssamcust_install_machine_files() 29186979Ssam{ 30186979Ssam echo "cd ${NANO_TOOLS}/gateworks/Files" 31186979Ssam cd ${NANO_TOOLS}/gateworks/Files 32186979Ssam find . -print | grep -Ev '/(CVS|\.svn)' | cpio -dumpv ${NANO_WORLDDIR} 33186979Ssam} 34186979SsamNANO_CUSTOMIZE="$NANO_CUSTOMIZE cust_install_files cust_install_machine_files" 35186979Ssam 36186979Ssambuildenv() 37186979Ssam{ 38186979Ssam cd ${NANO_SRC} 39205994Simp env TARGET_ARCH=${NANO_ARCH} __MAKE_CONF=${NANO_MAKE_CONF_BUILD} \ 40186979Ssam DESTDIR=${NANO_WORLDDIR} make buildenv 41186979Ssam} 42186979Ssam 43186979Ssamnet80211_tools() 44186979Ssam{ 45186979Ssam for f in wlanstats wlanwds wlanwatch; do 46186979Ssam echo "(cd tools/tools/net80211/$f; make $1)"; 47186979Ssam done | buildenv 48186979Ssam} 49186979Ssamnet80211_clean_tools() 50186979Ssam{ 51186979Ssam net80211_tools "clean" 52186979Ssam} 53186979Ssamnet80211_build_tools() 54186979Ssam{ 55186979Ssam net80211_tools "" 56186979Ssam} 57186979Ssamnet80211_install_tools() 58186979Ssam{ 59186979Ssam net80211_tools "install" 60186979Ssam} 61186979SsamNANO_CUSTOMIZE="$NANO_CUSTOMIZE net80211_clean_tools" 62186979SsamNANO_CUSTOMIZE="$NANO_CUSTOMIZE net80211_build_tools" 63186979SsamNANO_CUSTOMIZE="$NANO_CUSTOMIZE net80211_install_tools" 64186979Ssam 65186979Ssamath_clean_tools() 66186979Ssam{ 67186979Ssam echo "cd tools/tools/ath; make clean" | buildenv 68186979Ssam} 69186979Ssamath_build_tools() 70186979Ssam{ 71186979Ssam echo "cd tools/tools/ath; make" | buildenv 72186979Ssam} 73186979Ssamath_install_tools() 74186979Ssam{ 75186979Ssam echo "cd tools/tools/ath; make install" | buildenv 76186979Ssam} 77186979SsamNANO_CUSTOMIZE="$NANO_CUSTOMIZE ath_clean_tools" 78186979SsamNANO_CUSTOMIZE="$NANO_CUSTOMIZE ath_build_tools" 79186979SsamNANO_CUSTOMIZE="$NANO_CUSTOMIZE ath_install_tools" 80186979Ssam 81192662Ssamnpe_clean_tools() 82192662Ssam{ 83192662Ssam echo "cd tools/tools/npe; make clean" | buildenv 84192662Ssam} 85192662Ssamnpe_build_tools() 86192662Ssam{ 87192662Ssam echo "cd tools/tools/npe; make" | buildenv 88192662Ssam} 89192662Ssamnpe_install_tools() 90192662Ssam{ 91192662Ssam echo "cd tools/tools/npe; make install" | buildenv 92192662Ssam} 93192662SsamNANO_CUSTOMIZE="$NANO_CUSTOMIZE npe_clean_tools" 94192662SsamNANO_CUSTOMIZE="$NANO_CUSTOMIZE npe_build_tools" 95192662SsamNANO_CUSTOMIZE="$NANO_CUSTOMIZE npe_install_tools" 96192662Ssam 97186979SsamNANO_MAKEFS="makefs -B big \ 98186979Ssam -o bsize=4096,fsize=512,density=8192,optimization=space" 99186979Ssamexport NANO_MAKEFS 100186979Ssam 101186979Ssam# NB: leave c++ enabled so devd can be built 102186979SsamCONF_BUILD=" 103216930SimpWITHOUT_ACCT=true 104186979SsamWITHOUT_ACPI=true 105216930SimpWITHOUT_APM=true 106186979SsamWITHOUT_ATM=true 107186979SsamWITHOUT_AUDIT=true 108186979SsamWITHOUT_BIND_DNSSEC=true 109186979SsamWITHOUT_BIND_ETC=true 110186979SsamWITHOUT_BIND_LIBS_LWRES=true 111186979SsamWITHOUT_BLUETOOTH=true 112216930SimpWITHOUT_BSNMP=true 113186979SsamWITHOUT_CALENDAR=true 114186979SsamWITHOUT_CDDL=true 115216930SimpWITHOUT_CTM=true 116186979SsamWITHOUT_DICT=true 117186979SsamWITHOUT_EXAMPLES=true 118216930SimpWITHOUT_FLOPPY=true 119186979SsamWITHOUT_FORTRAN=true 120186979SsamWITHOUT_GAMES=true 121186979SsamWITHOUT_GCOV=true 122186979SsamWITHOUT_GPIB=true 123216930SimpWITHOUT_GROFF=true 124186979SsamWITHOUT_HTML=true 125186979SsamWITHOUT_INET6=true 126186979SsamWITHOUT_INFO=true 127186979SsamWITHOUT_IPFILTER=true 128186979SsamWITHOUT_KERBEROS=true 129186979SsamWITHOUT_LOCALES=true 130186979SsamWITHOUT_LPR=true 131186979SsamWITHOUT_MAN=true 132216930SimpWITHOUT_MAIL=true 133216930SimpWITHOUT_MAILWRAPPER=true 134186979SsamWITHOUT_NETCAT=true 135186979SsamWITHOUT_NIS=true 136186979SsamWITHOUT_NLS=true 137186979SsamWITHOUT_NS_CACHING=true 138186979SsamWITHOUT_OBJC=true 139216930SimpWITHOUT_PMC=true 140216930SimpWITHOUT_PORTSNAP=true 141186979SsamWITHOUT_PROFILE=true 142216930SimpWITHOUT_QUOTAS=true 143186979SsamWITHOUT_RCMDS=true 144186979SsamWITHOUT_RCS=true 145186979SsamWITHOUT_RESCUE=true 146186979SsamWITHOUT_SENDMAIL=true 147186979SsamWITHOUT_SHAREDOCS=true 148186979SsamWITHOUT_SSP=true 149186979SsamWITHOUT_SYSCONS=true 150216930SimpWITHOUT_SYSINSTALL=true 151186979SsamWITHOUT_TCSH=true 152216930SimpWITHOUT_TFTPD=true 153216930SimpWITHOUT_ZFS=true 154186979Ssam" 155186979SsamCONF_INSTALL="$CONF_BUILD 156186979SsamWITHOUT_TOOLCHAIN=true 157186979SsamWITHOUT_INSTALLLIB=true 158205994SimpINSTALL_NODEBUG=true 159186979Ssam" 160186979Ssam 161186979Ssam# NB: override to force / on s1 instead of s1a 162186979Ssamsetup_nanobsd_etc() 163186979Ssam{ 164186979Ssam pprint 2 "configure nanobsd /etc" 165186979Ssam 166186979Ssam ( 167186979Ssam cd ${NANO_WORLDDIR} 168186979Ssam 169186979Ssam # create diskless marker file 170186979Ssam touch etc/diskless 171186979Ssam 172186979Ssam # Make root filesystem R/O by default 173186979Ssam echo "root_rw_mount=NO" >> etc/defaults/rc.conf 174186979Ssam 175186979Ssam # save config file for scripts 176186979Ssam echo "NANO_DRIVE=${NANO_DRIVE}" > etc/nanobsd.conf 177186979Ssam 178186979Ssam echo "/dev/${NANO_DRIVE}s1 / ufs ro 1 1" > etc/fstab 179186979Ssam echo "/dev/${NANO_DRIVE}s3 /cfg ufs rw,noauto 2 2" >> etc/fstab 180186979Ssam mkdir -p cfg 181186979Ssam ) 182186979Ssam} 183186979Ssam 184186979Ssamcreate_arm_diskimage() 185186979Ssam{ 186186979Ssam pprint 2 "build diskimage" 187186979Ssam pprint 3 "log: ${MAKEOBJDIRPREFIX}/_.di" 188186979Ssam 189186979Ssam ( 190186979Ssam echo "NANO_MEDIASIZE: $NANO_MEDIASIZE" 191186979Ssam echo "NANO_IMAGES: $NANO_IMAGES" 192186979Ssam echo "NANO_SECTS: $NANO_SECTS" 193186979Ssam echo "NANO_HEADS: $NANO_HEADS" 194186979Ssam echo "NANO_CODESIZE: $NANO_CODESIZE" 195186979Ssam echo "NANO_CONFSIZE: $NANO_CONFSIZE" 196186979Ssam echo "NANO_DATASIZE: $NANO_DATASIZE" 197186979Ssam 198186979Ssam echo $NANO_MEDIASIZE $NANO_IMAGES \ 199186979Ssam $NANO_SECTS $NANO_HEADS \ 200186979Ssam $NANO_CODESIZE $NANO_CONFSIZE $NANO_DATASIZE | 201186979Ssam awk ' 202186979Ssam { 203186979Ssam printf "# %s\n", $0 204186979Ssam 205186979Ssam # size of cylinder in sectors 206186979Ssam cs = $3 * $4 207186979Ssam 208186979Ssam # number of full cylinders on media 209186979Ssam cyl = int ($1 / cs) 210186979Ssam 211186979Ssam # output fdisk geometry spec, truncate cyls to 1023 212186979Ssam if (cyl <= 1023) 213186979Ssam print "g c" cyl " h" $4 " s" $3 214186979Ssam else 215186979Ssam print "g c" 1023 " h" $4 " s" $3 216186979Ssam 217186979Ssam if ($7 > 0) { 218186979Ssam # size of data partition in full cylinders 219186979Ssam dsl = int (($7 + cs - 1) / cs) 220186979Ssam } else { 221186979Ssam dsl = 0; 222186979Ssam } 223186979Ssam 224186979Ssam # size of config partition in full cylinders 225186979Ssam csl = int (($6 + cs - 1) / cs) 226186979Ssam 227186979Ssam if ($5 == 0) { 228186979Ssam # size of image partition(s) in full cylinders 229186979Ssam isl = int ((cyl - dsl - csl) / $2) 230186979Ssam } else { 231186979Ssam isl = int (($5 + cs - 1) / cs) 232186979Ssam } 233186979Ssam 234186979Ssam # First image partition start at second track 235186979Ssam print "p 1 165 " $3, isl * cs - $3 236186979Ssam c = isl * cs; 237186979Ssam 238186979Ssam # Second image partition (if any) also starts offset one 239186979Ssam # track to keep them identical. 240186979Ssam if ($2 > 1) { 241186979Ssam print "p 2 165 " $3 + c, isl * cs - $3 242186979Ssam c += isl * cs; 243186979Ssam } 244186979Ssam 245186979Ssam # Config partition starts at cylinder boundary. 246186979Ssam print "p 3 165 " c, csl * cs 247186979Ssam c += csl * cs 248186979Ssam 249186979Ssam # Data partition (if any) starts at cylinder boundary. 250186979Ssam if ($7 > 0) { 251186979Ssam print "p 4 165 " c, dsl * cs 252186979Ssam } else if ($7 < 0 && $1 > c) { 253186979Ssam print "p 4 165 " c, $1 - c 254186979Ssam } else if ($1 < c) { 255186979Ssam print "Disk space overcommitted by", \ 256186979Ssam c - $1, "sectors" > "/dev/stderr" 257186979Ssam exit 2 258186979Ssam } 259186979Ssam 260186979Ssam # Force slice 1 to be marked active. This is necessary 261186979Ssam # for booting the image from a USB device to work. 262186979Ssam print "a 1" 263186979Ssam } 264186979Ssam ' > ${MAKEOBJDIRPREFIX}/_.fdisk 265186979Ssam 266186979Ssam IMG=${NANO_DISKIMGDIR}/${NANO_IMGNAME} 267186979Ssam BS=${NANO_SECTS}b 268186979Ssam 269186979Ssam if [ "${NANO_MD_BACKING}" = "swap" ] ; then 270186979Ssam MD=`mdconfig -a -t swap -s ${NANO_MEDIASIZE} -x ${NANO_SECTS} \ 271186979Ssam -y ${NANO_HEADS}` 272186979Ssam else 273186979Ssam echo ""; echo "Creating md backing file ${IMG} ..." 274186979Ssam _c=`expr ${NANO_MEDIASIZE} / ${NANO_SECTS}` 275186979Ssam pprint 2 "dd if=/dev/zero of=${IMG} bs=${BS} count=${_c}" 276186979Ssam dd if=/dev/zero of=${IMG} bs=${BS} count=${_c} 277186979Ssam pprint 2 "mdconfig -a -t vnode -f ${IMG} -x ${NANO_SECTS} -y ${NANO_HEADS}" 278186979Ssam MD=`mdconfig -a -t vnode -f ${IMG} -x ${NANO_SECTS} \ 279186979Ssam -y ${NANO_HEADS}` 280186979Ssam fi 281186979Ssam 282186979Ssam trap "mdconfig -d -u $MD" 1 2 15 EXIT 283186979Ssam 284186979Ssam echo ""; echo "Write partition table ..." 285186979Ssam FDISK=${MAKEOBJDIRPREFIX}/_.fdisk 286186979Ssam pprint 2 "fdisk -i -f ${FDISK} ${MD}" 287186979Ssam fdisk -i -f ${FDISK} ${MD} 288186979Ssam pprint 2 "fdisk ${MD}" 289186979Ssam fdisk ${MD} 290186979Ssam 291186979Ssam # Create first image 292186979Ssam IMG1=${NANO_DISKIMGDIR}/_.disk.image1 293186979Ssam echo ""; echo "Create first image ${IMG1} ..." 294186979Ssam SIZE=`awk '/^p 1/ { print $5 "b" }' ${FDISK}` 295186979Ssam pprint 2 "${NANO_MAKEFS} -s ${SIZE} ${IMG1} ${NANO_WORLDDIR}" 296186979Ssam ${NANO_MAKEFS} -s ${SIZE} ${IMG1} ${NANO_WORLDDIR} 297186979Ssam pprint 2 "dd if=${IMG1} of=/dev/${MD}s1 bs=${BS}" 298186979Ssam dd if=${IMG1} of=/dev/${MD}s1 bs=${BS} 299186979Ssam 300186979Ssam if [ $NANO_IMAGES -gt 1 -a $NANO_INIT_IMG2 -gt 0 ] ; then 301186979Ssam IMG2=${NANO_DISKIMGDIR}/_.disk.image2 302186979Ssam echo ""; echo "Create second image ${IMG2}..." 303186979Ssam for f in ${NANO_WORLDDIR}/etc/fstab ${NANO_WORLDDIR}/conf/base/etc/fstab 304186979Ssam do 305186979Ssam sed -i "" "s/${NANO_DRIVE}s1/${NANO_DRIVE}s2/g" $f 306186979Ssam done 307186979Ssam 308186979Ssam SIZE=`awk '/^p 2/ { print $5 "b" }' ${FDISK}` 309186979Ssam pprint 2 "${NANO_MAKEFS} -s ${SIZE} ${IMG2} ${NANO_WORLDDIR}" 310186979Ssam ${NANO_MAKEFS} -s ${SIZE} ${IMG2} ${NANO_WORLDDIR} 311186979Ssam pprint 2 "dd if=${IMG2} of=/dev/${MD}s2 bs=${BS}" 312186979Ssam dd if=${IMG2} of=/dev/${MD}s2 bs=${BS} 313186979Ssam fi 314186979Ssam 315186979Ssam # Create Config slice 316186979Ssam CFG=${NANO_DISKIMGDIR}/_.disk.cfg 317186979Ssam echo ""; echo "Creating config partition ${CFG}..." 318186979Ssam SIZE=`awk '/^p 3/ { print $5 "b" }' ${FDISK}` 319186979Ssam # XXX: fill from where ? 320186979Ssam pprint 2 "${NANO_MAKEFS} -s ${SIZE} ${CFG} ${NANO_CFGDIR}" 321186979Ssam ${NANO_MAKEFS} -s ${SIZE} ${CFG} ${NANO_CFGDIR} 322186979Ssam pprint 2 "dd if=${CFG} of=/dev/${MD}s3 bs=${BS}" 323186979Ssam dd if=${CFG} of=/dev/${MD}s3 bs=${BS} 324186979Ssam pprint 2 "rm ${CFG}" 325186979Ssam rm ${CFG}; CFG= # NB: disable printing below 326186979Ssam 327186979Ssam # Create Data slice, if any. 328186979Ssam if [ $NANO_DATASIZE -gt 0 ] ; then 329186979Ssam DATA=${NANO_DISKIMGDIR}/_.disk.data 330186979Ssam echo ""; echo "Creating data partition ${DATA}..." 331186979Ssam SIZE=`awk '/^p 4/ { print $5 "b" }' ${FDISK}` 332186979Ssam # XXX: fill from where ? 333186979Ssam pprint 2 "${NANO_MAKEFS} -s ${SIZE} ${DATA} /var/empty" 334186979Ssam ${NANO_MAKEFS} -s ${SIZE} ${DATA} /var/empty 335186979Ssam pprint 2 "dd if=${DATA} of=/dev/${MD}s4 bs=${BS}" 336186979Ssam dd if=${DATA} of=/dev/${MD}s4 bs=${BS} 337186979Ssam pprint 2 "rm ${DATA}" 338186979Ssam rm ${DATA}; DATA= # NB: disable printing below 339186979Ssam fi 340186979Ssam 341186979Ssam if [ "${NANO_MD_BACKING}" = "swap" ] ; then 342186979Ssam echo "Writing out _.disk.full..." 343186979Ssam dd if=/dev/${MD} of=${IMG} bs=${BS} 344186979Ssam fi 345186979Ssam 346186979Ssam echo "" 347186979Ssam echo "Completed images in:" 348186979Ssam echo "" 349186979Ssam echo "Full disk: ${IMG}" 350186979Ssam echo "Primary partition: ${IMG1}" 351186979Ssam test "${IMG2}" && echo "2ndary partition: ${IMG2}" 352186979Ssam test "${CFG}" && echo "/cfg partition: ${CFG}" 353186979Ssam test "${DATA}" && echo "/data partition: ${DATA}" 354186979Ssam echo "" 355186979Ssam echo "Use dd if=<file> of=/dev/<somewhere> bs=${BS} to transfer an" 356186979Ssam echo "image to bootable media /dev/<somewhere>." 357186979Ssam ) > ${MAKEOBJDIRPREFIX}/_.di 2>&1 358186979Ssam} 359