Compile multiple modules with a single makefile

Henrique Rodrigues henriquesilvar at gmail.com
Fri Apr 26 17:37:41 EDT 2013


I figured it out.

The problem I was having is that the statement "module1: override obj-m :=
module1.o" in my make target is not setting obj-m globally. Then, when the
kernel build system comes into action (when the "make -C" command is
invoked), the obj-m variable isn't set.

This is probably more a make related question, but since it is in kernel
build context, I thought I could get some advice from kernel folks.

Thanks,
-Henrique


On Fri, Apr 26, 2013 at 2:18 PM, Henrique Rodrigues <
henriquesilvar at gmail.com> wrote:

> Hi Valdis,
>
> On Fri, Apr 26, 2013 at 12:48 PM, <Valdis.Kletnieks at vt.edu> wrote:
>
>> On Fri, 26 Apr 2013 11:11:09 -0700, Henrique Rodrigues said:
>>
>> > I have the one .c source file that I want to create multiple kernel
>> modules
>> > out of it by setting macros using the makefile.
>>
>> Generally considered ugly by the mainstream kernel.
>>
>
> I agree. I'm actually trying to split the code that was given to me into
> three modules with minimal effort (without having to rewrite new code).
> The behavior of the code is defined by lots of #if macros in it, and I
> wanted to take advantage of that by rewriting only the makefile.
>
> The problem is that if I set the obj-m variable within a make target
> (instead of defining it globally), the kernel build system doesn't compile
> anything.
>
>
>>
>> > The idea is that if -DMODULE1 is set, I'll build module1.ko and if
>> > -DMODULE2 is set, I'll build module 2.
>>
>> The way this would usually be done is splitting your module into 3
>> parts - one common, one for device 1 and one for device 2.
>>
>> Then something like this (cut-n-paste from
>> drivers/net/wireless/hostap/Makefile:
>>
>> hostap-y := hostap_80211_rx.o hostap_80211_tx.o hostap_ap.o hostap_info.o
>> \
>>             hostap_ioctl.o hostap_main.o hostap_proc.o
>> obj-$(CONFIG_HOSTAP) += hostap.o
>>
>> obj-$(CONFIG_HOSTAP_CS) += hostap_cs.o
>> obj-$(CONFIG_HOSTAP_PLX) += hostap_plx.o
>> obj-$(CONFIG_HOSTAP_PCI) += hostap_pci.o
>>
>> Which will build 3 different modules (_cs, _plx, _pci) using the common C
>> files
>> and 1 device-specific C file for each one.
>>
>
> I checked the hostap code and it looks like each file (_cs, _plx, _pci)
> defines a different module. I believe that is not exactly what I wanted,
> but I understand that it works.
>
> Thanks,
> --
> Henrique Rodrigues
> http://www.dcc.ufmg.br/~hsr
>



-- 
Henrique Rodrigues
http://www.dcc.ufmg.br/~hsr
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20130426/b931ffd9/attachment.html 


More information about the Kernelnewbies mailing list