Subject: Re: Small kernel...
To: =?iso-8859-1?Q?Thorbj=F6rn?= Jemander <thoan@ifm.liu.se>
From: Greg A. Woods <woods@weird.com>
List: netbsd-users
Date: 09/20/2001 01:35:21
[ On Thursday, September 20, 2001 at 06:57:18 (+0200), =?iso-8859-1?Q?Thorbj=F6rn?= Jemander wrote: ]
> Subject: Small kernel...
>
> I'm looking at netbsd for (possibly) using it in an embedded system,
> and just want to know how small you can get the kernel, with some
> effort.
> How modular is it, and how much can you remove?
Here are the ones that I have. Note the last one in particular.
$ cd /var/obj/NetBSD/arch/i386/compile
$ size */netbsd
text data bss dec hex filename
4392345 77468 304044 4773857 48d7e1 GENERIC/netbsd
4505818 77500 304140 4887458 4a93a2 GENERIC_DIAGNOSTIC/netbsd
4506531 79772 291116 4877419 4a6c6b GENERIC_LAPTOP/netbsd
1840275 51244 170572 2062091 1f770b GENERIC_TINY/netbsd
3410913 2141048 202084 5754045 57ccbd INSTALL/netbsd
2204703 2132496 199108 4536307 4537f3 INSTALL_LAPTOP/netbsd
1004181 1376196 102580 2482957 25e30d INSTALL_SMALL/netbsd
940987 1376292 102612 2419891 24ecb3 INSTALL_TINY/netbsd
If you take away the memory disk from INSTALL_TINY you'll end up with
something like this:
text data bss dec hex filename
940987 24612 102612 1068211 104cb3 REAL_TINY/netbsd
> Is it posible to get below 300k? 100k? 30k?!
Nope, I seriously doubt it, at least not with networking still present.
Even if you removed all the networking code it'd still be quite big I
think.... hmmm that shouldn't take too long to compile, if it works....
(only six minutes to build on my PII/300 server with no 'make depend')
Here's the result of an i386 build without any networking or drivers
except for com, fdc, wdc, and the old pccons:
text data bss dec hex filename
520498 18012 62804 601314 92ce2 MINISCULE/netbsd
Getting it any smaller than that would be a real challenge I think, and
that's about twice as big as your first 300k goal! ;-)
Damn, I wonder what's in all that! Heck I even removed ptys! Maybe one
of the other filesystems would be smaller.... Here's the config:
include "arch/i386/conf/std.i386"
makeoptions COPTS="-Os" # Optimise for space. Implies -O2
maxusers 2 # estimated number of users
options BUFPAGES=16 # small machines can't afford cache!
options MAX_KMAPENT=512 # this should be enough for us....
options I386_CPU
options I486_CPU
options MATH_EMULATE
options RTC_OFFSET=0
file-system FFS
options VNODE_OP_NOINLINE # Save space by not inlining vnode op calls
config netbsd root on ? type ?
mainbus0 at root
isa* at mainbus?
npx0 at isa? port 0xf0 irq 13
pc0 at isa? port 0x60 irq 1 # pccons is much smaller than wscons!
com0 at isa? port 0x3f8 irq 4
com1 at isa? port 0x2f8 irq 3
com2 at isa? port 0x3e8 irq 5
wdc0 at isa? port 0x1f0 irq 14 flags 0x00
wdc1 at isa? port 0x170 irq 15 flags 0x00
wd* at wdc? channel ? drive ? flags 0x0000
fdc0 at isa? port 0x3f0 irq 6 drq 2
fd* at fdc? drive ?
--
Greg A. Woods
+1 416 218-0098 VE3TCP <gwoods@acm.org> <woods@robohack.ca>
Planix, Inc. <woods@planix.com>; Secrets of the Weird <woods@weird.com>