TODO.modules revision 1.1
11.1Spgoyette/* $NetBSD: TODO.modules,v 1.1 2016/08/04 10:45:52 pgoyette Exp $ */
21.1Spgoyette
31.1SpgoyetteSome notes on the limitations of our current (as of 7.99.35) module
41.1Spgoyettesubsystem.  This list was triggered by an Email exchange between
51.1Spgoyettechristos and pgoyette.
61.1Spgoyette
71.1Spgoyette1. Builtin drivers can't depend on modularized drivers (the modularized
81.1Spgoyette   drivers are attempted to load as builtins).
91.1Spgoyette
101.1Spgoyette	The assumption is that dependencies are loaded before those
111.1Spgoyette	modules which depend on them.  At load time, a module's
121.1Spgoyette	undefined global symbols are resolved;  if any symbols can't
131.1Spgoyette	be resolved, the load fails.  Similarly, if a module is
141.1Spgoyette	included in (built-into) the kernel, all of its symbols must
151.1Spgoyette	be resolvable by the linker, otherwise the link fails.
161.1Spgoyette
171.1Spgoyette	There are ways around this (such as, having the parent
181.1Spgoyette	module's initialization command recursively call the module
191.1Spgoyette	load code), but they're gross hacks.
201.1Spgoyette
211.1Spgoyette2. Currently, config(1) has no way to "no define" drivers
221.1Spgoyette
231.1Spgoyette3. It is not always obvious by their names which drivers/options
241.1Spgoyette   correspond to which modules.
251.1Spgoyette
261.1Spgoyette4. Right now critical drivers that would need to be pre-loaded (ffs,
271.1Spgoyette   exec_elf64) are still built-in so that we don't need to alter the boot
281.1Spgoyette   blocks to boot.
291.1Spgoyette
301.1Spgoyette	This was a conscious decision by core@ some years ago.  It is
311.1Spgoyette	not a requirement that ffs or exec_* be built-in.  The only
321.1Spgoyette	requirement is that the root file-system's module must be
331.1Spgoyette	available when the module subsystem is initialized, in order
341.1Spgoyette	to load other modules.  This can be accomplished by having the
351.1Spgoyette	boot loader "push" the module at boot time.  (It used to do
361.1Spgoyette	this in all cases; currently the "push" only occurs if the
371.1Spgoyette	booted filesystem is not ffs.)
381.1Spgoyette
391.1Spgoyette5. Not all parent bus drivers are capable of rescan, so some drivers
401.1Spgoyette   just have to be built-in.
411.1Spgoyette
421.1Spgoyette6. Many (most?) drivers are not yet modularized
431.1Spgoyette
441.1Spgoyette7. There's currently no provisions for autoconfig to figure out which
451.1Spgoyette   modules are needed, and thus to load the required modules.
461.1Spgoyette
471.1Spgoyette	In the "normal" built-in world, autoconfigure can only ask
481.1Spgoyette	existing drivers if they're willing to manage (ie, attach) a
491.1Spgoyette	device.  Removing the built-in drivers tends to limit the
501.1Spgoyette	availability of possible managers.  There's currently no
511.1Spgoyette	mechanism for identifying and loading drivers based on what
521.1Spgoyette	devices might be found.
531.1Spgoyette
54