summaryrefslogtreecommitdiffstats
path: root/release/picobsd
diff options
context:
space:
mode:
authorluigi <luigi@FreeBSD.org>2009-02-20 00:05:33 +0000
committerluigi <luigi@FreeBSD.org>2009-02-20 00:05:33 +0000
commit4ae61d9df96ae0a03be5e09888e1d1b79c35dd77 (patch)
treec0f47ce064c6757384461e152208637f0980e022 /release/picobsd
parent9686c139b1ecf389a4c251fffa07c93e04161309 (diff)
downloadFreeBSD-src-4ae61d9df96ae0a03be5e09888e1d1b79c35dd77.zip
FreeBSD-src-4ae61d9df96ae0a03be5e09888e1d1b79c35dd77.tar.gz
use /boot/loader by default, because the boot code seems to
have problems with kernels larger than 4MB. Add a flag to avoid the /boot/loader and use the old method. Add support for an additional makefile to perform custom manipulation (this is not documented yet). Add support for building an ISO image (not complete)
Diffstat (limited to 'release/picobsd')
-rwxr-xr-xrelease/picobsd/build/picobsd169
1 files changed, 109 insertions, 60 deletions
diff --git a/release/picobsd/build/picobsd b/release/picobsd/build/picobsd
index 4e1c023..69236aa 100755
--- a/release/picobsd/build/picobsd
+++ b/release/picobsd/build/picobsd
@@ -21,7 +21,6 @@
# Makefile.conf Makefile used to build the kernel
# config shell variables, sourced here.
# mfs.mtree mtree config file
-#
# floppy.tree/ files which go on the floppy
# mfs_tree/ files which go onto the mfs
#
@@ -29,10 +28,13 @@
# PICOBSD kernel config file
# config shell variables, sourced here.
# crunch.conf crunchgen configuration
+# mfs.mtree overrides ${PICO_TREE}/mfs.mtree
# floppy.tree.exclude files from floppy.tree/ which we do not need here.
-# floppy.tree/ local additions to the floppy.tree
+# floppy.tree/ local additions to ${PICO_TREE}/mfs_free
# floppy.tree.${site}/ same as above, site specific.
# mfs_tree/ local additions to the mfs_free
+# buildtree.mk optional makefile to build an extension for floppy tree
+# (generated in buildtree/ )
#
#--- The main entry point is at the end.
@@ -98,6 +100,7 @@ set_defaults() {
EDITOR=${EDITOR:-vi}
fd_size=${fd_size:-1440}
+ o_use_loader="yes" # use /boot/loader
o_all_in_mfs="yes" # put all files in mfs so you can boot and run
# the image via diskless boot.
o_clean="" # do not clean
@@ -127,6 +130,7 @@ set_defaults() {
# mountpoint used to build memory filesystems
c_fs=fs.PICOBSD # filename used for the memory filesystem
c_img=picobsd.bin # filename used for the picobsd image
+ generate_iso="NO" # don't generate the iso image
# select the right memory disk name
case `uname -r` in
@@ -146,6 +150,7 @@ set_defaults() {
trap fail 15
}
+# entry for 4.x and earlier trees
create_includes_and_libraries2() {
local no
log "create_includes_and_libraries2() for ${SRC}"
@@ -207,7 +212,7 @@ create_includes_and_libraries() {
# set_type <type> looks in user or system directories for the floppy type
# specified as first argument, and sets variables according to the config.
-# file. Sets THETYPE, SITE, name, MY_TREE and BUILDDIR
+# file. Also sets MY_TREE and BUILDDIR and SITE
set_type() {
local a i
@@ -255,6 +260,13 @@ set_msgs() { # OK
\t3. Site-info: ${SITE}\n\t4. Full-path: ${MY_TREE}\n"
}
+# build the iso image
+build_iso_image() {
+ log "build_iso_image()"
+ clear
+ set_msgs
+ printf "${MSG}---> Build the iso image not ready yet\n\n"
+}
# Main build procedure.
build_image() {
@@ -307,10 +319,6 @@ build_package() {
echo "##############################################" >>build.status
for z in bridge dial router net isp ; do
set_type ${z}
- if [ "${name}" = "" ] ; then
- echo "*** TYPE=${z} not found" >>build.status
- continue
- fi
echo "---------------------------------------------">>build.status
echo "Building TYPE=${z}, SIZE=${MFS_SIZE}" >>build.status
msg="(ok)" # error message
@@ -484,10 +492,10 @@ populate_floppy_fs() { # OK
dst=${BUILDDIR}/floppy.tree
log "pwd=`pwd` Populating floppy filesystem..."
- # clean relics from old compilations.
- rm -rf ${dst} || true
- mkdir ${dst}
+ rm -rf ${dst} || true # clean relics from old compilations.
+ mkdir ${dst} # create a clean tree
+ # compute exclude list for generic tree
excl=${MY_TREE}/floppy.tree.exclude
if [ -f ${excl} ] ; then
log "Files excluded from generic tree: `echo;cat ${excl}`"
@@ -495,29 +503,26 @@ populate_floppy_fs() { # OK
else
excl=""
fi
- (cd ${PICO_TREE}/floppy.tree ; tar -cf - --exclude CVS --exclude .svn \
- ${excl} . ) | \
+ # copy from the floppy trees into the destination
+ for FLOPPY_TREE in ${PICO_TREE}/floppy.tree ${MY_TREE}/floppy.tree \
+ ${MY_TREE}/floppy.tree.${SITE} ; do
+ if [ -d ${FLOPPY_TREE} ] ; then
+ (cd ${FLOPPY_TREE} ; tar -cf - --exclude CVS \
+ --exclude .svn ${excl} . ) | \
(cd ${dst} ; tar x${o_tarv}f - )
- log "Copied from generic floppy-tree `echo; ls -laR ${dst}`"
-
- srcdir=${MY_TREE}/floppy.tree
- if [ -d ${srcdir} ] ; then
- log "update with type-specific files:"
- (cd ${srcdir} ; tar -cf - --exclude CVS --exclude .svn . ) | \
- (cd ${dst} ; tar x${o_tarv}f - )
- log "Copied from type floppy-tree `echo; ls -laR ${dst}`"
- else
- log "No type-specific floppy-tree"
- fi
- if [ -d ${srcdir}.${SITE} ] ; then
- log "Update with site-specific (${SITE}) files:"
- (cd ${srcdir}.${SITE} ; tar -cf - --exclude CVS --exclude .svn . ) | \
- (cd ${dst} ; tar x${o_tarv}f - )
- log "Copied from site floppy-tree `echo; ls -laR ${dst}`"
- else
- log "No site-specific floppy-tree"
- fi
+ log "Copied from ${FLOPPY_TREE}"
+ fi
+ excl="" # reset the exclude list.
+ done
+ # add local manipulation
+ if [ -f ${MY_TREE}/buildtree.mk ] ; then
+ log "building local floppy tree"
+ ${BINMAKE} -C ${dst} -f ${MY_TREE}/buildtree.mk floppy.tree
+ fi
+
+ # compress the files in etc/, just in case
+ # XXX this should be done in the makefile.
# gzip returns an error if it fails to compress some file
(cd $dst ; gzip -9 etc/*
log "Compressed files in etc/ `echo; ls -l etc`"
@@ -532,13 +537,12 @@ populate_floppy_fs() { # OK
# Finally, if required, make a copy of the floppy.tree onto /fd
populate_mfs_tree() {
- local a dst
+ local a dst MFS_TREE
log "populate_mfs_tree()"
dst=${BUILDDIR}/mfs.tree
- # clean relics from old compilations.
- rm -rf ${dst} || true
- mkdir ${dst}
+ rm -rf ${dst} || true # clean relics from old compilations.
+ mkdir ${dst} # create a fresh tree
log "pwd=`pwd`, Populating MFS tree..."
@@ -555,7 +559,7 @@ populate_mfs_tree() {
ln -s /dev/null ${dst}/var/run/log
ln -s /etc/termcap ${dst}/usr/share/misc/termcap
-
+ ### now build the crunched binaries ###
(
cd ${BUILDDIR}/crunch
log "Making and installing crunch1 from `pwd` src ${SRC}..."
@@ -599,12 +603,18 @@ populate_mfs_tree() {
fi
done
+ if [ -f ${MY_TREE}/buildtree.mk ] ; then
+ log "building local floppy tree"
+ ${BINMAKE} -C ${dst} -f ${MY_TREE}/buildtree.mk mfs.tree
+ fi
+
if [ "${o_all_in_mfs}" = "yes" ]; then
log "Copy generic floppy_tree into MFS..."
- # this may fail in case the floppy is empty
+ # ignore failure in case the floppy is empty
cp -Rp ${BUILDDIR}/floppy.tree/* ${dst}/fd || true
fi
+ # 4.x compatibility - create device nodes
if [ "${o_no_devfs}" != "" ] ; then
# create device entries using MAKEDEV
(cd ${dst}/dev
@@ -623,19 +633,21 @@ populate_mfs_tree() {
log "importing ${import_files} into mfs"
# We do it in a chroot environment on the target so
# symlinks are followed correctly.
- cp `which tar` ${dst}/my_copy_of_tar
+ # Make sure we have a statically linked tar there.
+ mkdir -p ${dst}/rescue
+ cp /rescue/tar ${dst}/rescue
(cd ${l_usrtree}/.. ; tar cf - ${import_files} ) | \
- (chroot ${dst} /my_copy_of_tar xf - )
- rm ${dst}/my_copy_of_tar
+ (chroot ${dst} /rescue/tar xPf - )
+ rm -rf ${dst}/rescue
fi
(cd ${BUILDDIR}
# override the owner
echo "/set uid=0 gid=0" > mtree.out
- mtree -c -p ${dst} -k "" >> mtree.out
+ mtree -ic -p ${dst} -k "" >> mtree.out
log "mtre.out at ${BUILDDIR}/mtree.out"
makefs -t ffs -o bsize=4096 -o fsize=512 \
- -s ${MFS_SIZE}k -f 100 -F mtree.out ${c_fs} ${dst}
+ -s ${MFS_SIZE}k -f 1000 -F mtree.out ${c_fs} ${dst}
ls -l ${c_fs} )
log "done mfs image"
}
@@ -712,14 +724,16 @@ fill_floppy_image() {
fi
log "Labeling floppy image"
- log "patch ${c_boot2} to boot /kernel right away"
b2=${BUILDDIR}/boot2 # modified boot2
cp -f ${c_boot2} ${b2}
chmod 0644 ${b2}
- set `strings -at d ${b2} | grep "/boot/loader"`
- echo -e "/kernel\0\0\0\0\0" | \
- dd of=${b2} obs=$1 oseek=1 conv=notrunc 2>/dev/null
+ if [ ${o_use_loader} = "no" ] ; then
+ log "patch ${c_boot2} to boot /kernel right away"
+ set `strings -at d ${b2} | grep "/boot/loader"`
+ echo -e "/kernel\0\0\0\0\0" | \
+ dd of=${b2} obs=$1 oseek=1 conv=notrunc 2>/dev/null
+ fi
chmod 0444 ${b2}
dst=${BUILDDIR}/image.tree
@@ -739,22 +753,39 @@ fill_floppy_image() {
if [ ${mfs_start} -gt 0 -a ${mfs_size} -ge ${imgsize} ] ; then
mfs_ofs=$((${mfs_start} + 8192))
log "Preload kernel with file ${c_fs} at ${mfs_ofs}"
+ logverbose "`ls -l ${c_fs}` to fit in ${mfs_size}"
dd if=${c_fs} ibs=8192 iseek=1 of=kernel obs=${mfs_ofs} \
- oseek=1 conv=notrunc 2> /dev/null
+ oseek=1 conv=notrunc # 2> /dev/null
else
log "not loading mfs, size ${mfs_size} img ${imgsize}"
fi
log "Compress with kgzip and copy to floppy image"
- kgzip -o kernel.gz kernel
- cp -p kernel.gz ${dst}/kernel || fail $? no_space "copying kernel"
+ if [ ${o_use_loader} = "no" ] ; then
+ kgzip -o kernel.gz kernel
+ cp -p kernel.gz ${dst}/kernel || fail $? no_space "copying kernel"
+ else
+ gzip kernel
+ mkdir -p ${dst}/boot/kernel
+ echo "hint.acpi.0.disabled=\"1\"" > ${dst}/boot/loader.conf
+ echo "console=\"comconsole\"" >> ${dst}/boot/loader.conf
+ cp -p /boot/loader ${dst}/boot/loader || fail $? no_space "copying bootloader"
+ cp -p kernel.gz ${dst}/boot/kernel/kernel.gz || fail $? no_space "copying kernel"
+ fi
- log "Now transfer floppy tree if not already in MFS image"
# now transfer the floppy tree. If it is already in mfs, dont bother.
if [ "${o_all_in_mfs}" != "yes" ] ; then
+ log "Now transfer floppy tree if not already in MFS image"
cp -Rp floppy.tree/* ${dst} || \
fail $? no_space "copying floppy tree"
fi
)
+
+ # add local manipulation to the image
+ if [ -f ${MY_TREE}/buildtree.mk ] ; then
+ ${BINMAKE} -C ${dst} -f ${MY_TREE}/buildtree.mk image.tree
+ fi
+
+ log "image used `du -s ${dst}` of ${blocks}k"
(cd ${BUILDDIR}
makefs -t ffs -o bsize=4096 -o fsize=512 \
-s ${blocks}k -f 50 ${c_img} ${dst}
@@ -764,9 +795,19 @@ fill_floppy_image() {
${l_label} -f `pwd`/${c_img} | sed -e '/ c:/{p;s/c:/a:/;}' | \
${l_label} -R -f `pwd`/${c_img} /dev/stdin
${l_label} -f `pwd`/${c_img}
+
ls -l ${c_img}
- logverbose "after disklabel"
- )
+ ${l_label} -f `pwd`/${c_img}
+ logverbose "after disklabel"
+ )
+
+ echo "BUILDDIR ${BUILDDIR}"
+ if [ "${generate_iso}" = "YES" ]; then
+ echo "generate_iso ${generate_iso}"
+ #build_iso_image()
+ exit 1
+ fi
+
# dump the primary and secondary boot
# XXX primary is 512 bytes
dd if=${c_boot1} of=${BUILDDIR}/${c_img} conv=notrunc 2>/dev/null
@@ -781,7 +822,8 @@ fill_floppy_image() {
rm -rf ${BUILDDIR}/floppy.tree || true # cleanup
# df -ik ${dst} | colrm 70 > .build.reply
rm -rf ${dst}
- rm ${BUILDDIR}/kernel.gz ${BUILDDIR}/${c_fs}
+ rm ${BUILDDIR}/${c_fs}
+ # rm ${BUILDDIR}/kernel.gz
}
# This function creates variables which depend on the source tree in use:
@@ -824,8 +866,7 @@ set_build_parameters() {
# arguments.
set_defaults
-args=""
-while [ x"$1" != x ]; do
+while [ true ]; do
case $1 in
--src) # set the source path instead of /usr/src
SRC=`(cd $2; pwd)`
@@ -840,12 +881,17 @@ while [ x"$1" != x ]; do
shift
;;
+ --no_loader) # omit /boot/loader, just rely on boot2
+ # (it may have problems with kernels > 4MB)
+ o_use_loader="no"
+ ;;
+
--all_in_mfs)
o_all_in_mfs="yes"
;;
--no_all_in_mfs)
- o_all_in_mfs=""
+ o_all_in_mfs="no"
;;
--modules) # also build kernel modules
@@ -865,21 +911,24 @@ while [ x"$1" != x ]; do
o_tarv="v" # tar verbose flag
o_makeopts="-d l" # be verbose
;;
+
+ --iso) # generate iso image
+ generate_iso="YES"
+ ;;
+
*)
- args="$args $1" # accumulate args
+ break
;;
esac
shift
done
set_build_parameters # things that depend on ${SRC}
+set_type $1 $2 # type and site, respectively
# If $1="package", it creates a neat set of floppies
-set -- ${args}
[ "$1" = "package" ] && build_package
-set_type $args # type and site, respectively
-
[ "${o_interactive}" != "NO" ] && main_dialog
if [ "${o_clean}" = "YES" ] ; then
OpenPOWER on IntegriCloud