|| ||[ANNOUNCE] various linux kernel devtools : device handling/memory mapping/profiling/etc.|
|| ||Mon, 5 Apr 2004 19:33:22 +0200|
|| ||Andrew Morton <firstname.lastname@example.org>|
During development of a linux kernel network monitoring package (FFPF) I
created a few kernelspace and cross-userspace/kernelspace tools that I hope
others can benefit from too.
I haven't packages everything I wrote, just those elements that reduce
kernelsize and development time when multiple people use it. In its current
state everything is functionally OK, but the code cannot as yet be merged
into the kernel directly as I developed it outside of the main tree. Instead,
I hope you will take a look at it and tell me what could be direct kernel
material, and what should be changed or removed. After that I will supply
individual patches against the latest version.
very briefly, the toolbox contains the following:
- a generic device file interface, which abstracts away kernelversion
differences, devfs/mknod/udev differences and memory addressing differences.
The device API implements most of the standard device file handling code,
including various memory mapping syscall handlers. With this interface driver
developers will only have to override small pieces of code, instead of
building everything from the ground up. I'm using it in 3 different modules,
already. This is the 'jewel' of the package, and grepping the kernel sources
I think many drivers could benefit from it (reduced size/complexity).
Especially for beginner kernel hackers this could reduce the learning curve
(and for those of you who've been going at it for a long time and forgot:
it's quite steep :).
- a generic pci initialization interface. Could perhaps be merged with the
existing PCI subsytem. I needed it for implementing a PCI driver (more below)
- a module API that abstracts away kernel version differences.
CROSS kernel/userspace (ie, works in both) :
- verbosity level-based debugging, with optional timing/clockcycle and
- clockcycle profiling: the profiler outputs aggregated stats, such as the
median to /proc and optionally through the debugging interface above.
- a multi-policy circular buffer. A buffer where the handling code responds to
policy decisions, such as whether writers should be aware of readers and if
so, how they should respond. I use it for network packet queueing to
- some simpler stuff: hashes, stacks (should probably go).
also included in the distribution are demonstrator modules and userspace
programs. The pci module, for example, implements a mmapped interface to any
PCI device's resources. Just supply a vendor id/device id pair on insmod.
Could in itself perhaps be useful for userspace drivers. I've been using it
to initialize a network processor board over the PCI bus.
since most of my software has to be able to run both in kernel- and in
userspace I cannot simply supply a patch at the moment, I'm sorry. Instead,
I've packaged the sourcecode (all GPL'ed, naturally) and uploaded it to our
project's site at sourceforge:
it's about 35kB.
Please have a look and send me your remarks. I would find it a shame if I end
up being the only one using this stuff. I would rather put some extra effort
into changing it to get it accepted.
Willem de Bruijn
+31 6 2695 2446
+31 71 517 7174
current project :
Fairly Fast Packet Filter (FFPF)
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to email@example.com
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/