> drivers/char/sx.c does:
> #ifdef MODULE
> #define sx_init init_module
> #endif
>
> So if CONFIG_SX = m, tty_io tries to get sx_init as an extern, but sx_init
> is actually a C macro, therefore we get an undefined reference.
I think you screwed up your dependencies: sx_init would also get
-=called=- if this were the normal situation. Somehow, you first set
CONFIG_SX = y, then switched to config_SX=M, and one way or another
tty_io.c didn't get recompiled.
Near the end of tty_io.c we have:
#ifdef CONFIG_RISCOM8
riscom8_init();
#endif
#ifdef CONFIG_SPECIALIX
specialix_init();
#endif
#ifdef CONFIG_SX
sx_init();
#endif
which is supposed to "evaporate" (i.e. evaluate to "nothing") if we
don't have the RISCOM8, specialix IO8+ or SX support compiled into the
kernel. If a driver is a module, as far as the rest of the kernel is
concerned, it isn't there....
Linus shall I make you a patch that moves all these to "__initcall"?
The problem is that it involves lots of drivers maintained by others.
Roger.
-- ** R.E.Wolff@BitWizard.nl ** http://www.BitWizard.nl/ ** +31-15-2137555 ** *-- BitWizard writes Linux device drivers for any device you may have! --* ------ Microsoft SELLS you Windows, Linux GIVES you the whole house ------
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/