Subject: Re: Question about modules
To: Julio M. Merino Vidal <firstname.lastname@example.org>
From: Quentin Garnier <email@example.com>
Date: 08/28/2005 17:26:01
Content-Type: text/plain; charset=us-ascii
On Sun, Aug 28, 2005 at 05:17:10PM +0200, Julio M. Merino Vidal wrote:
> On 8/28/05, Hans Petter Selasky <firstname.lastname@example.org> wrote:
> > Hi,
> > On FreeBSD they use the "__section__" attribute to do linking magic. Bu=
> > NetBSD I am completely lost :-)
> > 1) What is the logic behind linking modules?
> > # pwd
> > /usr/src/sys/lkm/vfs/adosfs
> > # ls
> > CVS Makefile lkminit_vfs.c
> > ^^^ is there some
> > magic hidden in this filename?
> > From where is the following function called:
> > adosfs_lkmentry
> I guess this is because the structure defined by the MOD_VFS
> macro, whose name is _module. See sys/lkm.h.
> After the structure is defined with a known name, the kernel
> can access it, get the vfs operations structure and call the
> vfs_init function from there.
Not really. That part is done through DISPATCH().
> > Is this function also called when the module is
> > in the kernel ?
> If "this function" means vfs_init, then yes, it is called during
> system startup as a result of the VFS_ATTACH macro.
"This function" is adofs_lkmentry.
The entry point address is passed to the kernel by modload(8) as
part of the LKM API.
> > 2) Where is PSEUDO_SET defined?
> Dunno; is that something FreeBSD specific? The comment in
> net/net_osdep.h that includes PSEUDO_SET in it may be of
That's very likely to be FreeBSD stuff. Definitely not NetBSD stuff
Remember that the NetBSD kernel doesn't include a linker, so modload(8)
spawns ld(1) which does the actual linking and then modload(8) copies
the resulting binary to the kernel.
Quentin Garnier - email@example.com - cube@NetBSD.org
"When I find the controls, I'll go where I like, I'll know where I want
to be, but maybe for now I'll stay right here on a silent sea."
KT Tunstall, Silent Sea, Eye to the Telescope, 2004.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.6 (NetBSD)
-----END PGP SIGNATURE-----