Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F147400779
D31102.id91955.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
7 KB
Referenced Files
None
Subscribers
None
D31102.id91955.diff
View Options
Index: tools/tools/nanobsd/defaults.sh
===================================================================
--- tools/tools/nanobsd/defaults.sh
+++ tools/tools/nanobsd/defaults.sh
@@ -161,6 +161,8 @@
NANO_SLICE_ALTROOT=s2
NANO_SLICE_CFG=s3
NANO_SLICE_DATA=s4
+NANO_PARTITION_ROOT=a
+NANO_PARTITION_ALTROOT=a
NANO_ROOT=s1a
NANO_ALTROOT=s2a
@@ -853,7 +855,7 @@
echo "Usage: $0 [-bfhiKknqvwX] [-c config_file]"
echo " -b suppress builds (both kernel and world)"
echo " -c specify config file"
- echo " -f suppress code slice extraction"
+ echo " -f suppress code slice extraction (implies -i)"
echo " -h print this help summary page"
echo " -i suppress disk image build"
echo " -K suppress installkernel"
Index: tools/tools/nanobsd/legacy.sh
===================================================================
--- tools/tools/nanobsd/legacy.sh
+++ tools/tools/nanobsd/legacy.sh
@@ -35,30 +35,18 @@
# Functions and variable definitions used by the legacy nanobsd
# image building system.
-create_diskimage ( ) (
- pprint 2 "build diskimage"
- pprint 3 "log: ${NANO_LOG}/_.di"
-
- (
+calculate_partitioning ( ) (
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)
@@ -69,44 +57,100 @@
# size of config partition in full cylinders
csl = int (($6 + cs - 1) / cs)
+ # size of image partition(s) in full cylinders
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
+ print $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
+ print $3 + c, isl * cs - $3
c += isl * cs;
}
# Config partition starts at cylinder boundary.
- print "p 3 165 " c, csl * cs
+ print c, csl * cs
c += csl * cs
# Data partition (if any) starts at cylinder boundary.
if ($7 > 0) {
- print "p 4 165 " c, dsl * cs
+ print c, dsl * cs
} else if ($7 < 0 && $1 > c) {
- print "p 4 165 " c, $1 - c
+ print 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"
}
- ' > ${NANO_LOG}/_.fdisk
+ ' > ${NANO_LOG}/_.partitioning
+)
+
+create_code_slice ( ) (
+ pprint 2 "build code slice"
+ pprint 3 "log: ${NANO_OBJ}/_.cs"
+
+ (
+ IMG=${NANO_DISKIMGDIR}/_.disk.image
+ MNT=${NANO_OBJ}/_.mnt
+ mkdir -p ${MNT}
+ CODE_SIZE=`head -n 1 ${NANO_OBJ}/_.partitioning | awk '{ print $2 }'`
+
+ if [ "${NANO_MD_BACKING}" = "swap" ] ; then
+ MD=`mdconfig -a -t swap -s ${CODE_SIZE} -x ${NANO_SECTS} \
+ -y ${NANO_HEADS}`
+ else
+ echo "Creating md backing file..."
+ rm -f ${IMG}
+ dd if=/dev/zero of=${IMG} seek=${CODE_SIZE} count=0
+ MD=`mdconfig -a -t vnode -f ${IMG} -x ${NANO_SECTS} \
+ -y ${NANO_HEADS}`
+ fi
+
+ trap "echo 'Running exit trap code' ; df -i ${MNT} ; umount ${MNT} || true ; mdconfig -d -u $MD" 1 2 15 EXIT
+
+ bsdlabel -w ${MD}
+ if [ -f ${NANO_WORLDDIR}/boot/boot ]; then
+ echo "Making bootable partition"
+ gpart bootcode -b ${NANO_WORLDDIR}/boot/boot ${MD}
+ else
+ echo "Partition will not be bootable"
+ fi
+ bsdlabel ${MD}
+
+ # Create first image
+ populate_slice /dev/${MD}${NANO_PARTITION_ROOT} ${NANO_WORLDDIR} ${MNT} "${NANO_ROOT}"
+ mount /dev/${MD}a ${MNT}
+ echo "Generating mtree..."
+ ( cd ${MNT} && mtree -c ) > ${NANO_OBJ}/_.mtree
+ ( cd ${MNT} && du -k ) > ${NANO_OBJ}/_.du
+ nano_umount ${MNT}
+
+ if [ "${NANO_MD_BACKING}" = "swap" ] ; then
+ echo "Writing out _.disk.image..."
+ dd conv=sparse if=/dev/${MD} of=${NANO_DISKIMGDIR}/_.disk.image bs=64k
+ fi
+ mdconfig -d -u $MD
+
+ trap - 1 2 15 EXIT
+
+ ) > ${NANO_OBJ}/_.cs 2>&1
+)
+
+
+create_diskimage ( ) (
+ pprint 2 "build diskimage"
+ pprint 3 "log: ${NANO_OBJ}/_.di"
+
+ (
IMG=${NANO_DISKIMGDIR}/${NANO_IMGNAME}
MNT=${NANO_OBJ}/_.mnt
@@ -123,29 +167,34 @@
-y ${NANO_HEADS}`
fi
+ awk '
+ BEGIN {
+ # Create MBR partition table
+ print "gpart create -s mbr $1"
+ }
+ {
+ # Make partition
+ print "gpart add -t freebsd -b ", $1, " -s ", $2, " $1"
+ }
+ END {
+ # Force slice 1 to be marked active. This is necessary
+ # for booting the image from a USB device to work.
+ print "gpart set -a active -i 1 $1"
+ }
+ ' ${NANO_OBJ}/_.partitioning > ${NANO_OBJ}/_.gpart
+
trap "echo 'Running exit trap code' ; df -i ${MNT} ; nano_umount ${MNT} || true ; mdconfig -d -u $MD" 1 2 15 EXIT
- fdisk -i -f ${NANO_LOG}/_.fdisk ${MD}
- fdisk ${MD}
+ sh ${NANO_OBJ}/_.gpart ${MD}
+ gpart show ${MD}
# XXX: params
# XXX: pick up cached boot* files, they may not be in image anymore.
if [ -f ${NANO_WORLDDIR}/${NANO_BOOTLOADER} ]; then
- boot0cfg -B -b ${NANO_WORLDDIR}/${NANO_BOOTLOADER} ${NANO_BOOT0CFG} ${MD}
- fi
- if [ -f ${NANO_WORLDDIR}/boot/boot ]; then
- bsdlabel -w -B -b ${NANO_WORLDDIR}/boot/boot ${MD}${NANO_SLICE_ROOT}
- else
- bsdlabel -w ${MD}${NANO_SLICE_ROOT}
+ gpart bootcode -b ${NANO_WORLDDIR}/${NANO_BOOTLOADER} ${NANO_BOOTFLAGS} ${MD}
fi
- bsdlabel ${MD}${NANO_SLICE_ROOT}
- # Create first image
- populate_slice /dev/${MD}${NANO_ROOT} ${NANO_WORLDDIR} ${MNT} "${NANO_ROOT}"
- mount /dev/${MD}${NANO_ROOT} ${MNT}
- echo "Generating mtree..."
- ( cd "${MNT}" && mtree -c ) > ${NANO_LOG}/_.mtree
- ( cd "${MNT}" && du -k ) > ${NANO_LOG}/_.du
- nano_umount "${MNT}"
+ echo "Writing code image..."
+ dd conv=sparse if=${NANO_DISKIMGDIR}/_.disk.image of=/dev/${MD}${NANO_SLICE_ROOT} bs=64k
if [ $NANO_IMAGES -gt 1 -a $NANO_INIT_IMG2 -gt 0 ] ; then
# Duplicate to second image (if present)
@@ -190,11 +239,6 @@
dd conv=sparse if=/dev/${MD} of=${IMG} bs=64k
fi
- if ${do_copyout_partition} ; then
- echo "Writing out ${NANO_IMG1NAME}..."
- dd conv=sparse if=/dev/${MD}${NANO_SLICE_ROOT} \
- of=${NANO_DISKIMGDIR}/${NANO_IMG1NAME} bs=64k
- fi
mdconfig -d -u $MD
trap - 1 2 15 EXIT
Index: tools/tools/nanobsd/nanobsd.sh
===================================================================
--- tools/tools/nanobsd/nanobsd.sh
+++ tools/tools/nanobsd/nanobsd.sh
@@ -40,9 +40,9 @@
do_kernel=true
do_installkernel=true
do_world=true
+do_code=true
do_installworld=true
do_image=true
-do_copyout_partition=true
do_native_xtools=false
do_prep_image=true
@@ -94,7 +94,8 @@
shift
;;
-f)
- do_copyout_partition=false
+ do_code=false
+ do_image=false
shift
;;
-h)
@@ -215,10 +216,16 @@
else
pprint 2 "Skipping image prep (as instructed)"
fi
-if $do_image ; then
- create_diskimage
+if $do_code ; then
+ calculate_partitioning
+ create_code_slice
+ if $do_image ; then
+ create_diskimage
+ else
+ pprint 2 "Skipping image build (as instructed)"
+ fi
else
- pprint 2 "Skipping image build (as instructed)"
+ pprint 2 "Skipping code and image build (as instructed)"
fi
last_orders
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Mar 11, 4:31 PM (16 h, 21 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29514961
Default Alt Text
D31102.id91955.diff (7 KB)
Attached To
Mode
D31102: nanobsd: Use gpart and create code image before full disk image
Attached
Detach File
Event Timeline
Log In to Comment