#! /bin/sh # # $Id: mkliveimage-zaurus.sh,v 1.1 2012/01/18 13:04:05 tsutsui Exp tsutsui $ # # Copyright (c) 2009, 2010, 2011, 2012 Izumi Tsutsui. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. REVISION=20120118 #HOSTNAME=wzero3 HOSTNAME= TIMEZONE=Japan #MACHINE=hpcarm #MACHINE=hpcmips MACHINE=zaurus #if [ -z ${MACHINE} ]; then # if [ \( -z "$1" \) -o \( ! -z "$2" \) ]; then # echo "usage: $0 MACHINE" # echo "supported MACHINE:" \ # "hpcarm hpcmips zaurus" # exit 1 # fi # MACHINE=$1 #fi # # target dependent info # if [ "${MACHINE}" = "zaurus" ]; then MACHINE_ARCH=arm MACHINE_GNU_PLATFORM=arm--netbsdelf # for fdisk(8) TARGET_ENDIAN=le KERN_SET="kern-GENERIC kern-C700" EXTRA_SETS= # nothing USE_MBR=yes BOOTDISK=ld0 # for SD OMIT_SWAPIMG=yes #RTC_LOCALTIME=no # Linux also uses UTC #PRIMARY_BOOT= # nothing #SECONDARY_BOOT= # nothing #SECONDARY_BOOT_ARG= # nothing fi if [ -z ${MACHINE_ARCH} ]; then echo "Unsupported MACHINE (${MACHINE})" exit 1 fi # # tooldir settings # #NETBSDSRCDIR=/usr/src TOOLDIR=/usr/tools/${MACHINE_ARCH} if [ -z ${NETBSDSRCDIR} ]; then NETBSDSRCDIR=/usr/src fi if [ -z ${TOOLDIR} ]; then _HOST_OSNAME=`uname -s` _HOST_OSREL=`uname -r` _HOST_ARCH=`uname -p 2> /dev/null || uname -m` TOOLDIRNAME=tooldir.${_HOST_OSNAME}-${_HOST_OSREL}-${_HOST_ARCH} TOOLDIR=${NETBSDSRCDIR}/obj.${MACHINE}/${TOOLDIRNAME} if [ ! -d ${TOOLDIR} ]; then TOOLDIR=${NETBSDSRCDIR}/${TOOLDIRNAME} fi fi if [ ! -d ${TOOLDIR} ]; then echo 'set TOOLDIR first'; exit 1 fi if [ ! -x ${TOOLDIR}/bin/nbdisklabel-${MACHINE} ]; then echo 'build tools first'; exit 1 fi # # info about ftp to get binary sets # #FTPHOST=ftp.NetBSD.org FTPHOST=ftp.jp.NetBSD.org #FTPHOST=ftp7.jp.NetBSD.org #FTPHOST=nyftp.NetBSD.org #RELEASE=5.1 #RELEASEDIR=pub/NetBSD/NetBSD-${RELEASE} RELEASEDIR=pub/NetBSD-daily/HEAD/201112290510Z # # misc build settings # CAT=cat CP=cp DD=dd DISKLABEL=${TOOLDIR}/bin/nbdisklabel-${MACHINE} FDISK=${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-fdisk FTP=ftp #FTP=lukemftp FTP_OPTIONS=-V MKDIR=mkdir RM=rm SH=sh SED=sed SUNLABEL=${TOOLDIR}/bin/nbsunlabel TAR=tar TARGETROOTDIR=targetroot.${MACHINE} DOWNLOADDIR=download.${MACHINE} WORKDIR=work.${MACHINE} IMAGE=${WORKDIR}/liveimage-${REVISION}.img # # target image size settings # FATMB=32 # to store bootloader and kernels IMAGEMB=948 # for "1GB" SD (mine has only 994,050,048 B) SWAPMB=64 # 64MB FATSECTORS=`expr ${FATMB} \* 1024 \* 1024 / 512` IMAGESECTORS=`expr ${IMAGEMB} \* 1024 \* 1024 / 512` SWAPSECTORS=`expr ${SWAPMB} \* 1024 \* 1024 / 512` LABELSECTORS=0 if [ "${USE_MBR}" = "yes" ]; then # LABELSECTORS=63 # historical # LABELSECTORS=32 # aligned LABELSECTORS=2048 # align 1MiB for modern flash fi FATOFFSET=`expr ${LABELSECTORS}` BSDPARTSECTORS=`expr ${IMAGESECTORS} - ${FATSECTORS} - ${LABELSECTORS}` FSSECTORS=`expr ${BSDPARTSECTORS} - ${SWAPSECTORS}` FSSIZE=`expr ${FSSECTORS} \* 512` FSOFFSET=`expr ${LABELSECTORS} + ${FATSECTORS}` SWAPOFFSET=`expr ${LABELSECTORS} + ${FATSECTORS} + ${FSSECTORS}` HEADS=64 SECTORS=32 # sunlabel(8) parameters CYLINDERS=`expr ${IMAGESECTORS} / \( ${HEADS} \* ${SECTORS} \)` FSCYLINDERS=`expr ${FSSECTORS} / \( ${HEADS} \* ${SECTORS} \)` SWAPCYLINDERS=`expr ${SWAPSECTORS} / \( ${HEADS} \* ${SECTORS} \)` # mformat parameters FATCYLINDERS=`expr ${FATSECTORS} / \( ${HEADS} \* ${SECTORS} \)` # fdisk(8) parameters MBRSECTORS=63 MBRHEADS=255 MBRCYLINDERS=`expr ${IMAGESECTORS} / \( ${MBRHEADS} \* ${MBRSECTORS} \)` MBRFAT=6 # 16-bit FAT, more than 32M MBRNETBSD=169 MBRLNXSWAP=130 # makefs(8) parameters BLOCKSIZE=16384 FRAGSIZE=2048 DENSITY=8192 # # get binary sets # URL_SETS=ftp://${FTPHOST}/${RELEASEDIR}/${MACHINE}/binary/sets SETS="${KERN_SET} base etc comp games man misc tests text xbase xcomp xetc xfont xserver ${EXTRA_SETS}" #SETS="${KERN_SET} base etc comp ${EXTRA_SETS}" ${MKDIR} -p ${DOWNLOADDIR} for set in ${SETS}; do if [ ! -f ${DOWNLOADDIR}/${set}.tgz ]; then echo Fetching ${set}.tgz... ${FTP} ${FTP_OPTIONS} \ -o ${DOWNLOADDIR}/${set}.tgz ${URL_SETS}/${set}.tgz fi done # # create targetroot # echo Removing ${TARGETROOTDIR}... ${RM} -rf ${TARGETROOTDIR} ${MKDIR} -p ${TARGETROOTDIR} for set in ${SETS}; do echo Extracting ${set}... ${TAR} -C ${TARGETROOTDIR} -zxf ${DOWNLOADDIR}/${set}.tgz done # XXX /var/spool/ftp/hidden is unreadable chmod u+r ${TARGETROOTDIR}/var/spool/ftp/hidden # copy secondary boot for bootstrap # XXX probabry more machine dependent if [ ! -z ${SECONDARY_BOOT} ]; then echo Copying secondary boot... ${CP} ${TARGETROOTDIR}/usr/mdec/${SECONDARY_BOOT} ${TARGETROOTDIR} fi # # create target fs # echo Removing ${WORKDIR}... ${RM} -rf ${WORKDIR} ${MKDIR} -p ${WORKDIR} echo Preparing /etc/fstab... ${CAT} > ${WORKDIR}/fstab < ${WORKDIR}/rc.conf ${CP} ${WORKDIR}/rc.conf ${TARGETROOTDIR}/etc echo Setting localtime... ln -sf /usr/share/zoneinfo/${TIMEZONE} ${TARGETROOTDIR}/etc/localtime echo Copying liveimage specific files... #${CP} etc/${MACHINE}/ttys ${TARGETROOTDIR}/etc/ttys echo Preparing spec file for makefs... ${CAT} ${TARGETROOTDIR}/etc/mtree/* | \ ${SED} -e 's/ size=[0-9]*//' > ${WORKDIR}/spec ${SH} ${TARGETROOTDIR}/dev/MAKEDEV -s all | \ ${SED} -e '/^\. type=dir/d' -e 's,^\.,./dev,' >> ${WORKDIR}/spec # spec for optional files/dirs ${CAT} >> ${WORKDIR}/spec < ${IMAGE} if [ ${FATSECTORS} != 0 ]; then ${CAT} ${WORKDIR}/fatfs >> ${IMAGE} fi ${CAT} ${WORKDIR}/rootfs >> ${IMAGE} if [ "${OMIT_SWAPIMG}x" != "yesx" ]; then ${CAT} ${WORKDIR}/swap >> ${IMAGE} fi else echo Copying target disk image... ${CP} ${WORKDIR}/rootfs ${IMAGE} if [ "${OMIT_SWAPIMG}x" != "yesx" ]; then ${CAT} ${WORKDIR}/swap >> ${IMAGE} fi fi if [ ! -z ${USE_SUNLABEL} ]; then echo Creating sun disklabel... printf 'V ncyl %d\nV nhead %d\nV nsect %d\na %d %d/0/0\nb %d %d/0/0\nW\n' \ ${CYLINDERS} ${HEADS} ${SECTORS} \ ${FSOFFSET} ${FSCYLINDERS} ${FSCYLINDERS} ${SWAPCYLINDERS} | \ ${SUNLABEL} -nq ${IMAGE} fi echo Creating disklabel... ${CAT} > ${WORKDIR}/labelproto <