Daniel Rodrick un jour écrivit:
Hi,
I find a lot of code buried within #ifdefs for the following variables:
MODULE / __MODULE__
KERNEL / __KERNEL__
1) AFAIK, the MODULE / __MODULE__ is defined when my drievr is
selected to be compiled as a module, and the KERNEL / __KERNEL__ is
defined when is is selected to be built in the kernel image. Is this
right?
No. The __KERNEL__ macro is defined because there is programs (like
libraries) than include kernel code and there is many things that you
don't want them to include. So most modules will want the __KERNEL__
macro to be enabled. It is usually done by passing -D__KERNEL__ to gcc.
2) Why two variants ? KERNEL V/s __KERNEL__ and MODULE v/s __MODULE__?
AFAIK, there is only MODULE and __KERNEL__. I don't think that
__MODULE__ or KERNEL exist. I greped the 2.6.17 kernel just to be sure,
and didn't found any instance of them.
3) Do I need to define these symbols in my Makefile myself or the
Kernel Makefiles / Kbuild does it for me?
Use the source, Luke! There is plenty of examples there and on the web.
I would suggest that for now, you only make dynamicaly loadable modules
and compile it from outside the kernel tree. So you will be sure not to
introduce problems in your kernel (and loose time finding out what).
So for starting, you will probably want to add -D__KERNEL__ directly to
gcc and define MODULE inside of your module for simplicity. When you will
know a bit more about kernel programming, you may try to include your code
directly in the kernel tree.
I never used kbuild, so I cannot fairly comment on it. Still, I
strongly recommand you to buy a copy of Linux Device Drivers from O'Reilly
and maybe some others books like Robert Love's Linux Kernel Development.
That will answer many of your questions and then you will be able to get
much more from this mailing list.
Simon Valiquette
--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive: http://mail.nl.linux.org/kernelnewbies/
FAQ: http://kernelnewbies.org/faq/