1b06a8f39SPhilip Homburg#!/usr/bin/env bash 25acaa081SBen Grasset -e 3149ed6cfSKees Jongenburger 4eb1e5bf0SKees Jongenburger# 517eed55fSLionel Sambuc# This script creates a bootable image and should at some point in the future 62d6bbeb0SJean-Baptiste Boric# be replaced by the proper NetBSD infrastructure. 717eed55fSLionel Sambuc# 817eed55fSLionel Sambuc 917eed55fSLionel Sambuc# 10eb1e5bf0SKees Jongenburger# Source settings if present 11eb1e5bf0SKees Jongenburger# 12c4a8cb3dSKees Jongenburger: ${SETTINGS_MINIX=.settings} 13c4a8cb3dSKees Jongenburgerif [ -f "${SETTINGS_MINIX}" ] 14eb1e5bf0SKees Jongenburgerthen 15c4a8cb3dSKees Jongenburger echo "Sourcing settings from ${SETTINGS_MINIX}" 16eb1e5bf0SKees Jongenburger # Display the content (so we can check in the build logs 17eb1e5bf0SKees Jongenburger # what the settings contain. 18c4a8cb3dSKees Jongenburger cat ${SETTINGS_MINIX} | sed "s,^,CONTENT ,g" 19c4a8cb3dSKees Jongenburger . ${SETTINGS_MINIX} 20eb1e5bf0SKees Jongenburgerfi 21eb1e5bf0SKees Jongenburger 225acaa081SBen Gras: ${ARCH=evbearm-el} 23149ed6cfSKees Jongenburger: ${OBJ=../obj.${ARCH}} 242d6bbeb0SJean-Baptiste Boric: ${TOOLCHAIN_TRIPLET=arm-elf32-minix-} 252d6bbeb0SJean-Baptiste Boric: ${BUILDSH=build.sh} 262d6bbeb0SJean-Baptiste Boric 272d6bbeb0SJean-Baptiste Boric: ${SETS="minix-base minix-comp minix-games minix-man minix-tests tests"} 282d6bbeb0SJean-Baptiste Boric: ${IMG=minix_arm_sd.img} 292d6bbeb0SJean-Baptiste Boric 302d6bbeb0SJean-Baptiste Boric# ARM definitions: 314684ddb6SLionel Sambuc: ${BUILDVARS=-V MKGCCCMDS=yes -V MKLLVM=no} 325ae1a533SBen Gras# These BUILDVARS are for building with LLVM: 335ae1a533SBen Gras#: ${BUILDVARS=-V MKLIBCXX=no -V MKKYUA=no -V MKATF=no -V MKLLVMCMDS=no} 342d6bbeb0SJean-Baptiste Boric: ${FAT_SIZE=$(( 10*(2**20) / 512))} # This is in sectors 355e5ea947SKees Jongenburger 3691a2fe4aSKees Jongenburger# Beagleboard-xm 3791a2fe4aSKees Jongenburger: ${U_BOOT_BIN_DIR=build/omap3_beagle/} 385e5ea947SKees Jongenburger: ${CONSOLE=tty02} 395e5ea947SKees Jongenburger 4091a2fe4aSKees Jongenburger# BeagleBone (and black) 4191a2fe4aSKees Jongenburger#: ${U_BOOT_BIN_DIR=build/am335x_evm/} 425e5ea947SKees Jongenburger#: ${CONSOLE=tty00} 435acaa081SBen Gras 4491a2fe4aSKees Jongenburger# 4591a2fe4aSKees Jongenburger# We host u-boot binaries. 4617eed55fSLionel Sambuc# 472d6bbeb0SJean-Baptiste Boric: ${MLO=MLO} 482d6bbeb0SJean-Baptiste Boric: ${UBOOT=u-boot.img} 4991a2fe4aSKees JongenburgerU_BOOT_GIT_VERSION=cb5178f12787c690cb1c888d88733137e5a47b15 5091a2fe4aSKees Jongenburger 512d6bbeb0SJean-Baptiste Boricif [ ! -f ${BUILDSH} ] 522d6bbeb0SJean-Baptiste Boricthen 532d6bbeb0SJean-Baptiste Boric echo "Please invoke me from the root source dir, where ${BUILDSH} is." 542d6bbeb0SJean-Baptiste Boric exit 1 552d6bbeb0SJean-Baptiste Boricfi 5617eed55fSLionel Sambuc 572d6bbeb0SJean-Baptiste Boricif [ -n "$BASE_URL" ] 582d6bbeb0SJean-Baptiste Boricthen 592d6bbeb0SJean-Baptiste Boric #we no longer download u-boot but do a checkout 602d6bbeb0SJean-Baptiste Boric #BASE_URL used to be the base url for u-boot 612d6bbeb0SJean-Baptiste Boric #Downloads 622d6bbeb0SJean-Baptiste Boric echo "Warning:** Setting BASE_URL (u-boot) is no longer possible use U_BOOT_BIN_DIR" 632d6bbeb0SJean-Baptiste Boric echo "Look in ${RELEASETOOLSDIR}/arm_sdimage.sh for suggested values" 642d6bbeb0SJean-Baptiste Boric exit 1 652d6bbeb0SJean-Baptiste Boricfi 6617eed55fSLionel Sambuc 6717eed55fSLionel Sambucexport PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:${PATH} 684ab5b32eSKees Jongenburger 692d6bbeb0SJean-Baptiste Boric# we create a disk image of about 2 gig's 702d6bbeb0SJean-Baptiste Boric# for alignment reasons, prefer sizes which are multiples of 4096 bytes 712d6bbeb0SJean-Baptiste Boric: ${IMG_SIZE=$(( 2*(2**30) ))} 722d6bbeb0SJean-Baptiste Boric: ${ROOT_SIZE=$(( 64*(2**20) ))} 732d6bbeb0SJean-Baptiste Boric: ${HOME_SIZE=$(( 128*(2**20) ))} 742d6bbeb0SJean-Baptiste Boric: ${USR_SIZE=$(( 1792*(2**20) ))} 7517eed55fSLionel Sambuc 762d6bbeb0SJean-Baptiste Boric# set up disk creation environment 772d6bbeb0SJean-Baptiste Boric. releasetools/image.defaults 782d6bbeb0SJean-Baptiste Boric. releasetools/image.functions 7917eed55fSLionel Sambuc 802d6bbeb0SJean-Baptiste Boric# all sizes are written in 512 byte blocks 812d6bbeb0SJean-Baptiste BoricROOTSIZEARG="-b $((${ROOT_SIZE} / 512 / 8))" 822d6bbeb0SJean-Baptiste BoricUSRSIZEARG="-b $((${USR_SIZE} / 512 / 8))" 832d6bbeb0SJean-Baptiste BoricHOMESIZEARG="-b $((${HOME_SIZE} / 512 / 8))" 8417eed55fSLionel Sambuc 852d6bbeb0SJean-Baptiste Boric# where the kernel & boot modules will be 862d6bbeb0SJean-Baptiste BoricMODDIR=${DESTDIR}/boot/minix/.temp 878d311af7SBen Gras 882d6bbeb0SJean-Baptiste Boricecho "Building work directory..." 892d6bbeb0SJean-Baptiste Boricbuild_workdir "$SETS" 908d311af7SBen Gras 912d6bbeb0SJean-Baptiste Boricecho "Adding extra files..." 928a3677deSKees Jongenburger 932d6bbeb0SJean-Baptiste Boric# create a fstab entry in /etc 942d6bbeb0SJean-Baptiste Boriccat >${ROOT_DIR}/etc/fstab <<END_FSTAB 9517eed55fSLionel Sambuc/dev/c0d0p2 /usr mfs rw 0 2 9617eed55fSLionel Sambuc/dev/c0d0p3 /home mfs rw 0 2 97cd36dd77SLionel Sambucnone /sys devman rw,rslabel=devman 0 0 98da21d850SDavid van Moolenbroeknone /dev/pts ptyfs rw,rslabel=ptyfs 0 0 995acaa081SBen GrasEND_FSTAB 1002d6bbeb0SJean-Baptiste Boricadd_file_spec "etc/fstab" extra.fstab 1015acaa081SBen Gras 1022d6bbeb0SJean-Baptiste Boricecho "Bundling packages..." 1032d6bbeb0SJean-Baptiste Boricbundle_packages "$BUNDLE_PACKAGES" 1045acaa081SBen Gras 1052d6bbeb0SJean-Baptiste Boricecho "Creating specification files..." 1062d6bbeb0SJean-Baptiste Boriccreate_input_spec 1072d6bbeb0SJean-Baptiste Boriccreate_protos "usr home" 10817eed55fSLionel Sambuc 1092d6bbeb0SJean-Baptiste Boric# Download the stage 1 bootloader and u-boot 1102d6bbeb0SJean-Baptiste Boric# 1112d6bbeb0SJean-Baptiste Boric${RELEASETOOLSDIR}/fetch_u-boot.sh -o ${RELEASETOOLSDIR}/u-boot -n $U_BOOT_GIT_VERSION 1122d6bbeb0SJean-Baptiste Boric 1132d6bbeb0SJean-Baptiste Boric# Clean image 1142d6bbeb0SJean-Baptiste Boricif [ -f ${IMG} ] # IMG might be a block device 1152d6bbeb0SJean-Baptiste Boricthen 1162d6bbeb0SJean-Baptiste Boric rm -f ${IMG} 1172d6bbeb0SJean-Baptiste Boricfi 1188a3677deSKees Jongenburger 1198a3677deSKees Jongenburger# 12017eed55fSLionel Sambuc# Create the empty image where we later will put the partitions in. 12117eed55fSLionel Sambuc# Make sure it is at least 2GB, otherwise the SD card will not be detected 12217eed55fSLionel Sambuc# correctly in qemu / HW. 1238a3677deSKees Jongenburger# 1242d6bbeb0SJean-Baptiste Boricdd if=/dev/zero of=${IMG} bs=512 count=1 seek=$((($IMG_SIZE / 512) -1)) 1258a3677deSKees Jongenburger 1268a3677deSKees Jongenburger# 127881ff3f6SLionel Sambuc# Generate /root, /usr and /home partition images. 128881ff3f6SLionel Sambuc# 1292d6bbeb0SJean-Baptiste Boricecho "Writing disk image..." 1302d6bbeb0SJean-Baptiste BoricFAT_START=2048 # those are sectors 1312d6bbeb0SJean-Baptiste BoricROOT_START=$(($FAT_START + $FAT_SIZE)) 1322d6bbeb0SJean-Baptiste Boricecho " * ROOT" 1332d6bbeb0SJean-Baptiste Boric_ROOT_SIZE=$(${CROSS_TOOLS}/nbmkfs.mfs -d ${ROOTSIZEARG} -I $((${ROOT_START}*512)) ${IMG} ${WORK_DIR}/proto.root) 1342d6bbeb0SJean-Baptiste Boric_ROOT_SIZE=$(($_ROOT_SIZE / 512)) 1352d6bbeb0SJean-Baptiste BoricUSR_START=$((${ROOT_START} + ${_ROOT_SIZE})) 1362d6bbeb0SJean-Baptiste Boricecho " * USR" 1372d6bbeb0SJean-Baptiste Boric_USR_SIZE=$(${CROSS_TOOLS}/nbmkfs.mfs -d ${USRSIZEARG} -I $((${USR_START}*512)) ${IMG} ${WORK_DIR}/proto.usr) 1382d6bbeb0SJean-Baptiste Boric_USR_SIZE=$(($_USR_SIZE / 512)) 1392d6bbeb0SJean-Baptiste BoricHOME_START=$((${USR_START} + ${_USR_SIZE})) 1402d6bbeb0SJean-Baptiste Boricecho " * HOME" 1412d6bbeb0SJean-Baptiste Boric_HOME_SIZE=$(${CROSS_TOOLS}/nbmkfs.mfs -d ${HOMESIZEARG} -I $((${HOME_START}*512)) ${IMG} ${WORK_DIR}/proto.home) 1422d6bbeb0SJean-Baptiste Boric_HOME_SIZE=$(($_HOME_SIZE / 512)) 143*39d31d9fSJean-Baptiste Boricecho " * BOOT" 144*39d31d9fSJean-Baptiste Boricrm -rf ${ROOT_DIR}/* 145*39d31d9fSJean-Baptiste Boriccp ${RELEASETOOLSDIR}/u-boot/${U_BOOT_BIN_DIR}/MLO ${ROOT_DIR}/ 146*39d31d9fSJean-Baptiste Boriccp ${RELEASETOOLSDIR}/u-boot/${U_BOOT_BIN_DIR}/u-boot.img ${ROOT_DIR}/ 147*39d31d9fSJean-Baptiste Boric 148*39d31d9fSJean-Baptiste Boric# Create a uEnv.txt file 149*39d31d9fSJean-Baptiste Boric# -n default to network boot 150*39d31d9fSJean-Baptiste Boric# -p add a prefix to the network booted files (e.g. xm/" 151*39d31d9fSJean-Baptiste Boric# -c set console e.g. tty02 or tty00 152*39d31d9fSJean-Baptiste Boric# -v set verbosity e.g. 0 to 3 153*39d31d9fSJean-Baptiste Boric#${RELEASETOOLSDIR}/gen_uEnv.txt.sh -c ${CONSOLE} -n -p bb/ > ${WORK_DIR}/uEnv.txt 154*39d31d9fSJean-Baptiste Boric${RELEASETOOLSDIR}/gen_uEnv.txt.sh -c ${CONSOLE} > ${ROOT_DIR}/uEnv.txt 155*39d31d9fSJean-Baptiste Boric 156*39d31d9fSJean-Baptiste Boric# Do some last processing of the kernel and servers and then put them on the FAT 157*39d31d9fSJean-Baptiste Boric# partition. 158*39d31d9fSJean-Baptiste Boric${CROSS_PREFIX}objcopy ${OBJ}/minix/kernel/kernel -O binary ${ROOT_DIR}/kernel.bin 159*39d31d9fSJean-Baptiste Boric 160*39d31d9fSJean-Baptiste Boricfor f in servers/vm/vm servers/rs/rs servers/pm/pm servers/sched/sched \ 161*39d31d9fSJean-Baptiste Boric servers/vfs/vfs servers/ds/ds servers/mib/mib fs/pfs/pfs fs/mfs/mfs \ 162*39d31d9fSJean-Baptiste Boric ../sbin/init/init drivers/tty/tty/tty drivers/storage/memory/memory 163*39d31d9fSJean-Baptiste Boricdo 164*39d31d9fSJean-Baptiste Boric fn=`basename $f`.elf 165*39d31d9fSJean-Baptiste Boric cp ${OBJ}/minix/${f} ${ROOT_DIR}/${fn} 166*39d31d9fSJean-Baptiste Boric ${CROSS_PREFIX}strip -s ${ROOT_DIR}/${fn} 167*39d31d9fSJean-Baptiste Boricdone 168*39d31d9fSJean-Baptiste Boriccat >${WORK_DIR}/boot.mtree <<EOF 169*39d31d9fSJean-Baptiste Boric. type=dir 170*39d31d9fSJean-Baptiste Boric./MLO type=file 171*39d31d9fSJean-Baptiste Boric./u-boot.img type=file 172*39d31d9fSJean-Baptiste Boric./uEnv.txt type=file 173*39d31d9fSJean-Baptiste Boric./kernel.bin type=file 174*39d31d9fSJean-Baptiste Boric./ds.elf type=file 175*39d31d9fSJean-Baptiste Boric./rs.elf type=file 176*39d31d9fSJean-Baptiste Boric./pm.elf type=file 177*39d31d9fSJean-Baptiste Boric./sched.elf type=file 178*39d31d9fSJean-Baptiste Boric./vfs.elf type=file 179*39d31d9fSJean-Baptiste Boric./memory.elf type=file 180*39d31d9fSJean-Baptiste Boric./tty.elf type=file 181*39d31d9fSJean-Baptiste Boric./mib.elf type=file 182*39d31d9fSJean-Baptiste Boric./vm.elf type=file 183*39d31d9fSJean-Baptiste Boric./pfs.elf type=file 184*39d31d9fSJean-Baptiste Boric./mfs.elf type=file 185*39d31d9fSJean-Baptiste Boric./init.elf type=file 186*39d31d9fSJean-Baptiste BoricEOF 187*39d31d9fSJean-Baptiste Boric 188*39d31d9fSJean-Baptiste Boric# 189*39d31d9fSJean-Baptiste Boric# Create the FAT partition, which contains the bootloader files, kernel and modules 190*39d31d9fSJean-Baptiste Boric# 191*39d31d9fSJean-Baptiste Boric${CROSS_TOOLS}/nbmakefs -t msdos -s ${FAT_SIZE}b -o F=16,c=1 \ 192*39d31d9fSJean-Baptiste Boric -F ${WORK_DIR}/boot.mtree ${WORK_DIR}/fat.img ${ROOT_DIR} 19317eed55fSLionel Sambuc 19417eed55fSLionel Sambuc# 19517eed55fSLionel Sambuc# Write the partition table using the natively compiled 19617eed55fSLionel Sambuc# minix partition utility 19717eed55fSLionel Sambuc# 198*39d31d9fSJean-Baptiste Boric${CROSS_TOOLS}/nbpartition -f -m ${IMG} ${FAT_START} \ 199*39d31d9fSJean-Baptiste Boric "c:${FAT_SIZE}*" 81:${_ROOT_SIZE} 81:${_USR_SIZE} 81:${_HOME_SIZE} 2008a3677deSKees Jongenburger 2018a3677deSKees Jongenburger# 2028a3677deSKees Jongenburger# Merge the partitions into a single image. 2038a3677deSKees Jongenburger# 2048a3677deSKees Jongenburgerecho "Merging file systems" 2052d6bbeb0SJean-Baptiste Boricdd if=${WORK_DIR}/fat.img of=${IMG} seek=$FAT_START conv=notrunc 2062d6bbeb0SJean-Baptiste Boric 2072d6bbeb0SJean-Baptiste Boricecho "Disk image at `pwd`/${IMG}" 2082d6bbeb0SJean-Baptiste Boricecho "To boot this image on kvm:" 2092d6bbeb0SJean-Baptiste Boricecho "qemu-system-arm -M beaglexm -serial stdio -drive if=sd,cache=writeback,file=`pwd`/${IMG}" 210