summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2005-08-16 05:49:17 +0000
committerphk <phk@FreeBSD.org>2005-08-16 05:49:17 +0000
commit6f0a19f7ae2112c33839203865b8c22f797468fe (patch)
tree3f4dbe12662ed21898e136efabcd47483632f883 /tools
parentfddce319d2efe9388e32cbf7f65f5416d160a006 (diff)
downloadFreeBSD-src-6f0a19f7ae2112c33839203865b8c22f797468fe.zip
FreeBSD-src-6f0a19f7ae2112c33839203865b8c22f797468fe.tar.gz
Increase flexibility in disk-layout
Diffstat (limited to 'tools')
-rw-r--r--tools/tools/nanobsd/nanobsd.sh77
1 files changed, 52 insertions, 25 deletions
diff --git a/tools/tools/nanobsd/nanobsd.sh b/tools/tools/nanobsd/nanobsd.sh
index 87a5897..f360f92 100644
--- a/tools/tools/nanobsd/nanobsd.sh
+++ b/tools/tools/nanobsd/nanobsd.sh
@@ -44,16 +44,23 @@ NANO_NEWFS="-b 4096 -f 512 -i 8192 -O1 -U"
NANO_DRIVE=ad0
# Target media size in 512 bytes sectors
-NANO_MEDIA=1048576
+NANO_MEDIASIZE=1048576
# Number of code images on media (1 or 2)
NANO_IMAGES=2
# Size of configuration file system in 512 bytes sectors
+# If zero, size will be as large as possible.
+NANO_CODESIZE=0
+
+# Size of configuration file system in 512 bytes sectors
+# Cannot be zero.
NANO_CONFSIZE=2048
# Size of data file system in 512 bytes sectors
-NANO_DATASIZE=1023
+# If zero: no partition configured.
+# If negative: max size possible
+NANO_DATASIZE=0
# Media geometry, only relevant if bios doesn't understand LBA.
NANO_SECTS=32
@@ -67,7 +74,7 @@ NANO_ARCH=i386
#######################################################################
# Functions which can be overridden in configs.
-clean_target ( ) (
+clean_build ( ) (
echo "## Clean and create object directory (${MAKEOBJDIRPREFIX})"
if rm -rf ${MAKEOBJDIRPREFIX} > /dev/null 2>&1 ; then
@@ -219,40 +226,50 @@ create_i386_diskimage ( ) (
echo "### log: ${MAKEOBJDIRPREFIX}/_.di"
(
- echo $NANO_MEDIA $NANO_IMAGES \
- $NANO_CONFSIZE $NANO_DATASIZE \
- $NANO_SECTS $NANO_HEADS |
+ 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 = $5 * $6
+ cs = $3 * $4
# number of full cylinders on media
cyl = int ($1 / cs)
- # output fdisk geometry spec
+ # output fdisk geometry spec, truncate cyls to 1023
if (cyl <= 1023)
- print "g c" cyl " h" $6 " s" $5
+ print "g c" cyl " h" $4 " s" $3
else
- print "g c" 1023 " h" $6 " s" $5
+ print "g c" 1023 " h" $4 " s" $3
- # size of data partition in full cylinders
- dsl = int (($4 + cs - 1) / cs)
+ 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 (($3 + cs - 1) / cs)
+ csl = int (($6 + cs - 1) / cs)
- # size of image partition(s) in full cylinders
- isl = int ((cyl - dsl - csl) / $2)
+ if ($3 == 5) {
+ # 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 " $5, isl * cs - $5
+ 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 " $5 + c, isl * cs - $5
+ print "p 2 165 " $3 + c, isl * cs - $3
c += isl * cs;
}
@@ -261,8 +278,11 @@ create_i386_diskimage ( ) (
c += csl * cs
# Data partition (if any) starts at cylinder boundary.
- if ($4 > 0)
+ if ($7 > 0) {
print "p 4 165 " c, dsl * cs
+ } else if ($7 < 0 && $1 > $c) {
+ print "p 4 165 " c, $1 - $c
+ }
}
' > ${MAKEOBJDIRPREFIX}/_.fdisk
@@ -271,17 +291,19 @@ create_i386_diskimage ( ) (
mkdir -p ${MNT}
dd if=/dev/zero of=${IMG} bs=${NANO_SECTS}b \
- count=`expr ${NANO_MEDIA} / ${NANO_SECTS}`
+ count=`expr ${NANO_MEDIASIZE} / ${NANO_SECTS}`
MD=`mdconfig -a -t vnode -f ${IMG} -x ${NANO_SECTS} -y ${NANO_HEADS}`
trap "df -i ${MNT} ; umount ${MNT} || true ; mdconfig -d -u $MD" 1 2 15 EXIT
fdisk -i -f ${MAKEOBJDIRPREFIX}/_.fdisk ${MD}
+ fdisk ${MD}
# XXX: params
# XXX: pick up cached boot* files, they may not be in image anymore.
boot0cfg -B -b ${NANO_WORLDDIR}/boot/boot0sio -o packet -s 1 -m 3 ${MD}
bsdlabel -w -B ${MD}s1
+ bsdlabel ${MD}s1
# Create first image
newfs ${NANO_NEWFS} /dev/${MD}s1a
@@ -363,6 +385,7 @@ NANO_MAKE_CONF=${MAKEOBJDIRPREFIX}/make.conf
export MAKEOBJDIRPREFIX
export NANO_ARCH
+export NANO_CODESIZE
export NANO_CONFSIZE
export NANO_CUSTOMIZE
export NANO_DATASIZE
@@ -370,7 +393,7 @@ export NANO_DRIVE
export NANO_HEADS
export NANO_IMAGES
export NANO_MAKE_CONF
-export NANO_MEDIA
+export NANO_MEDIASIZE
export NANO_NAME
export NANO_NEWFS
export NANO_OBJ
@@ -382,16 +405,20 @@ export NANO_WORLDDIR
#######################################################################
# Set up object directory
-#clean_target
-#make_conf_build
-#build_world
-#build_kernel
-make_conf_install
+clean_build
+make_conf_build
+build_world
+build_kernel
+
clean_world
+make_conf_install
install_world
install_etc
install_kernel
+
run_customize
setup_diskless
prune_usr
create_${NANO_ARCH}_diskimage
+
+echo "# NanoBSD image completed"
OpenPOWER on IntegriCloud