Subject: Newbie questions about drivers
To: None <tech-kern@netbsd.org>
From: Peter Seebach <seebs@plethora.net>
List: tech-kern
Date: 03/18/2006 11:27:06
So, I'm starting on the NAND stuff. And some of this is easy and obvious.
Some of it isn't, and I'm guessing there's some essential element of the
organization here I don't get.
I basically follow the struct cfattach. What I don't understand is why
the struct cfattach objects are declared in such very odd ways. For instance,
consider the 15-line macro that declares, indirectly, "usb_ca":
#define USB_DECLARE_DRIVER(dname) \
[...]
const struct cfattach __CONCAT(dname,_ca) = { \
sizeof(struct __CONCAT(dname,_softc)), \
__CONCAT(dname,_match), \
__CONCAT(dname,_attach), \
__CONCAT(dname,_detach), \
__CONCAT(dname,_activate), \
}
So, what I'm not getting is:
* Since I can't see any reason for any driver's cfattach not to look like
this, why is this in a USB header?
* Am I right in thinking that it's actually config that will generate a table
that includes the reference to usb_ca?
More generally, the procedure by which devices get into cdevsw is not obvious
to me; for instance, where is the information used to decide where rnd_cdevsw
goes? I can't find any reference to rnd in ***/files.*, or in config's
source. But obviously it comes from SOMEWHERE.
-s