build external module splited into several files

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi all,

I'm currently reading LDD the 3rd edition. Chapter 2 says that if we
need for example to build module "foo.c" which is split in two other
files "sub1.c" and "sub2.c", we just have to define the following
Kbuild variable in the makefile:

foo-objs := sub1.o sub2.o

I suppose that 

foo-y := sub1.o sub2.o

has the same semantic ? That's not very clear to me.

Anyway, the thing is that if I didn't use "sub1.c" and "sub2.c" (I
comment "foo-objs" line in the makefile and I define variables sub1 and
sub2 in "hello.c"), I've got the info messages in dmesg as well.
However, if I use "sub1.c" and "sub2.c" (the whole code at the end of
this mail), I get nothing, but the module still loaded anyway (insmod
returns no error and rmmod neither).

I think I'm missing something, but I didn't figure it out... I run
Linux 4.5 that I build from master sources. I'm not very settle into
the whole configuration options, so I use "make olddefconfig" on Fedora
4.4.6-300 config file.

Thanks,

Colin

---

Makefile:

obj-m := hello.o
hello-y := sub1.o sub2.o

KDIR=/lib/modules/$(shell uname -r)/build

all:
        $(MAKE) -C $(KDIR) M=$(PWD) modules

clean:
        $(MAKE) -C $(KDIR) M=$(PWD) clean

---

hello.c:

#include <linux/module.h>
#include <linux/printk.h>

extern int sub1;
extern int sub2;

static int __init hello_init(void)
{
        pr_info("Hello, world! %d\n", sub1);
        return 0;
}

static void __exit hello_exit(void)
{
        pr_info("Bye. %d\n", sub2);
}

module_init(hello_init);
module_exit(hello_exit);

MODULE_LICENSE("GPL");

---

sub1.c:

int sub1 = 55;

---

sub2.c:

int sub2 = 345;

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies




[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux