Date: Thu, 24 Jan 2002 09:33:25 +0100 From: Adrian Steinmann <ast@marabu.ch> To: Eugene Grosbein <eugen@www.kuzbass.ru> Cc: Doug White <dwhite@resnet.uoregon.edu>, small@FreeBSD.ORG Subject: Re: bzip2'd kernel Message-ID: <200201240833.JAA20831@marabu.marabu.ch> In-Reply-To: <3C4F9B6A.B552F051@www.kuzbass.ru> References: <20020123130959.E56623-100000@resnet.uoregon.edu> <3C4F9B6A.B552F051@www.kuzbass.ru>
next in thread | previous in thread | raw e-mail | index | archive | help
Eugene
All the hooks are there, you don't need to "hack" anything! As
someone else already mentioned, you simply need to bzip2 the kernel
and use a loader that is bzip2-enabled.
To build a minimal loader *without* gzip support but bzip2 support
(and also without Forth support) use these compile flags:
cd /usr/src/sys/boot/i386
make -f /usr/src/sys/boot/i386/Makefile \
NOFORTH=YES NOMAN=YES \
LOADER_BZIP2_SUPPORT=YES \
LOADER_NO_GZIP_SUPPORT=YES
you can then further kgzip the loader and strip it:
kgzip loader
mv loader.kgz loader_mini
strip --remove-section=.note --remove-section=.comment loader_mini
You'll end up with a loader about this 90k in size.
When you bzip2 the kernel (and md images) make sure you use the -1
option to allow for the restricted memory environment in which the
loader runs:
bzip2 -1v GENERIC
My GENERIC.bz2 kernel is 1320680 bytes, however my custom kernels
are only about half that size so I have ample space for a bzip2
mfsroot on one floppy.
When you boot, interrupt the normal loader:
Hit [Enter] to boot immediately, or any other key for command prompt.
<*** HIT SPACE HERE ***>
then:
ok unload
ok boot /boot/loader_mini
/boot/loader_mini text=0x1760 data=0xceae+0x10516 \
interuppt agian:
Hit [Enter] to boot immediately, or any other key for command prompt.
Booting [kernel] in 9 seconds...
<*** HIT SPACE HERE ***>
ok load GENERIC
/GENERIC text=0x13c80f data=0x3204c+0x18088 -
ok load -t md_image mfsroot
bzf_read: unexpected EOF
ok set vfs.root.mountfrom=ufs:/dev/md0c
ok boot -v
Note that you say "load GENERIC" and not "load GENERIC.bz2" just
like in the gzip case.
Open questions:
- Why can't one boot bzip2 kernels with forth-enable loaders?
I think this has something to do with a comment I saw soemwhere:
"forth changes the functionality of the boot command"
- I'm not sure why I see the message "bzf_read: unexpected EOF"
but it seems that it can be safely ignored. An unpadded buffer
maybe?
- I also don't understand why I must
"set vfs.root.mountfrom=ufs:/dev/md0c"
otherwise the loaded mfsroot is ignored and the kernel mounts
the harddisks' rootfs.
In the past, I have always been squeezing out these last bytes to
fit as much kernel and mfsroot on one floppy. Since we regularly
blowup our boot floppies due to kernel bloat, I have sent in PRs
suggesting some of these changes, see:
http://www.freebsd.org/cgi/query-pr.cgi?pr=29272
http://www.freebsd.org/cgi/query-pr.cgi?pr=33089
Hope this helps!
Adrian
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-small" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200201240833.JAA20831>
