An updated kerneld-patch (for 1.3.37)

Bjorn Ekwall (bj0rn@blox.se)
Mon, 6 Nov 1995 08:40:26 +0100 (MET)


Hi all!

There seem to have been some problems getting mail over "the pond" lately,
apart from any problems at linux-kernel. In the hope that all previous
messages are deleted from the vger in-queue, here is what I believe to be
a rather solid kernel patch for kerneld.

As before; the aim of "kerneld" is to make the kernel look, from the "outside",
as if it had all functionality already compiled in, including all file systems,
as long as that functionality is available as a loadable module.
It is intended to transparently extend a "minimalistic" kernel with whatever
functionality the sysadm decides.

I'm still adhering to my original "hack", i.e. extending the IPC mechanism,
since that won't require that the "ordinary" networking parts of the kernel
is configured into the kernel. (Dreaming of the _ultimate_ net module...)

A side benefit of using the IPC messages is that it is possible to handle
the IPC as a "bus", where many processes, and the kernel, can exchange
information back and forth over the same channel. The "recipient" of
each message is controlled only by the message type.

The extra utility "kdstat" in modules-1.2.8 (as well as the "template" kdsend)
shows how to use this "virtual bus" (TM :-)).

The patch contains patches to the following files:

Basic kernel part of "kerneld":
linux/arch/i386/config.in
linux/arch/i386/defconfig
linux/arch/i386/kernel/sys_i386.c (snooper protection)
linux/include/linux/module.h (module "autoclean" support)
linux/include/linux/kerneld.h (constants and inline calls)
linux/init/main.c (kerneld implies IPC)
linux/ipc/Makefile (kerneld implies IPC)
linux/ipc/util.c (kerneld implies IPC)
linux/ipc/msg.c (the real kerneld support)
linux/kernel/module.c (module "autoclean" support)
linux/kernel/ksyms.c (export kerneld_send)

Usage of "kerneld" functionality:
linux/fs/exec.c (for loading e.g. iBCS)
linux/fs/super.c (for loading fs drivers)
linux/fs/devices.c (for loading char- and block devices)
linux/net/core/dev.c (for loading net-drivers)
linux/net/ipv4/route.c (for e.g. automagic dialling)

I have received a patch for loading tty line disciplines (thanks Eduardo!),
but I haven't been able to try it out yet...

I would _very_ much appreciate feedback on this patch, so that I and Jacques
can decide how the next release of modules-1.3.* ought to look like.

Cheers,

Bjorn <bj0rn@blox.se>

begin 644 kerneldpatch-1.3.37.gz
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
>C"5N@)NSHIDUVT978)9-XT<RPY/_`C;DK;`F<```
`
end