In the makefile I had used the "-D" options
thanks a lot
2010-08-03
hacklu
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majo...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
You don't need to care about KBUILD_MODNAME, it is defined
internally by kbuild and passed to your module via "-DKBUILD_MODNAME=XXX"
automatically.
So, it looks like you didn't write your makefile correctly.
I had add "echo $(EXTRA_CFLAGS)" before this line;but returns NULL;
so I suspicion the $(EXTRA_CFLAGS) hasn't been work.
I aslo try to add "export EXTRA_CFLAGS" in a.makefile,but it doesn't work either.
the problem has puzzled me for some days.
help me please~~
2010-08-03
hacklu
发件人: Américo Wang
发送时间: 2010-08-03 16:32:08
收件人: hacklu
抄送: linux-kernel
主题: Re: how about KBUILD_MODNAME
On Tue, Aug 03, 2010 at 03:11:59PM +0800, hacklu wrote:
>
>I don't understand the macro KBUILD_MODNAME .
>when I compile a driver program. It returns me "linux/pci.h:655: error: 'KBUILD_MODNAME' undeclared (first use in this function) "
>
>In the makefile I had used the "-D" options
>
You don't need to care about KBUILD_MODNAME, it is defined
internally by kbuild and passed to your module via "-DKBUILD_MODNAME=XXX"
automatically.
So, it looks like you didn't write your makefile correctly.
N嫥叉靣笡y氊b瞂千v豝�藓{.n�壏{睉赙zXФ 洝塄}财爖�j:+v墾�珣赙zZ+€�zf"穐殘啳嗃i�z�畐ア�櫒璀��撷 f旟^j谦y呩@A玜囤 � 0鹅h�鍜i
The KBUILD_MODNAME fails to be set when there are two drivers built from the same
directory. There are many directories in the source tree with more then one driver
but they don't use the pr_debug macro.
Cheers
Boaz
Rrr it was a long time since I fought this. Maybe it's not the problem with two
drivers in same dir, maybe it's when two drivers share the same foo.c file.
It looks like the driver uses the old 2.4 way to define a Makefile.
This will not work with 2.6.
What you need to do is to define a Makefile (*) like you would
if the driver was included in the kernel and then build
it using the following command:
make -C path/to/kernel/ M=`pwd`
The kernel shall be built before you do this as the method uses
information from the buitl kernel.
(*) The Makefile may not refer to new CONFIG_ symbols.
So it likely looks like this:
obj-m := foo.o bar.o
Do not be suprised that the Makefile becomes much much simpler - this is expected.
Sam
You don't need to write this line by yourself, you just
need to provide a correct: obj-$(XXXXX) += your_module.o,
kbuild will automatically compile it with proper flags.
(If not, try CFLAGS_MODULE.)
If you insist to do this, I think you can just append
-D"KBUILD_MODNAME=your_module" to that line by hand.
Hope this helps.
No, it is not, you can find many drivers under drivers/net/. ;)
And it doesn't make sense to hold two drivers in one .c file.
I meant when two drivers share the same .c file. But instead of
using a third common module they just share it by duplicating
the code. example:
<Kbuild>
drv1-y := drv-one.o common.o
obj-$(CONFIG_DRV1) += drv1.o
drv2-y := drv-two.o common.o
obj-$(CONFIG_DRV2) += drv2.o
</Kbuild>
When compiling common.o the KBUILD_MODNAME fails to be set
Cheers
Boaz
Correct - but I do not think this is relavent in this case.
The code snippet shown clearly indicates that the drivers
uses a 2.4 style Makefile. This will not work with 2.6.
Sam