Kernel module compilation problem


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Kernel module compilation problem
# 1  
Old 01-28-2009
Error Kernel module compilation problem

I have one big module 2.6.18 kernel mod.c
I want to divide this to several files.
The problem is to write right Makefile

Code:
lib1.h
lib1.c

mod.c

mod.c works fine normally but when I divide into several files
and try to compile with this makefile

Code:
obj-m := mod.o
mod-objs := lib1.o

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

default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

I get this
Code:
zet modulANDlibs # make
make -C /lib/modules/2.6.18-gentoo-r2/build SUBDIRS=/root/modulANDlibs modules
make[1]: Entering directory `/usr/src/linux-2.6.18-gentoo-r2'
CC [M] /root/modulANDlibs/lib1.o
LD [M] /root/modulANDlibs/mod.o
Building modules, stage 2.
MODPOST
CC /root/modulANDlibs/mod.mod.o
LD [M] /root/modulANDlibs/mod.ko
make[1]: Leaving directory `/usr/src/linux-2.6.18-gentoo-r2'
zet modulANDlibs #

so this is ok but when I load this module there are no any operation
this mean mod.ko is loaded but dont work - before dividing it print to KERN_INFO "Hello world" ( dmesg )

There is one more thing. When I compile mod.c without lib* mod.ko have about 5.5Kb
but if I compile with mod-objs variable doesnt matter what is in mod.c and in lib1.c
compilation is ok loading is ok and size mod.ko is about 1.6 Kb constatntly

The questin is WHY ? Smilie

Last edited by marcintom; 01-28-2009 at 05:31 PM..
# 2  
Old 01-29-2009
The thing is, every .c file normally is compiled separately into a separate object file. Unlike normal programs, there is no linker to combine the object files. If you want the kernel to load all these files, you have to make *each* of them a kernel module.

What you can instead do is something like this: split your code into two separate files, mod.c and lib.c, and then inside mod.c you have:
Code:
#include "lib.c"

You can put it at the top or at the end. Keep in mind, globals or static data defined in one .c file will be seen in the other.
# 3  
Old 02-12-2009
You are wrong Smilie
I found the solution using kbuild system in 2.6 kernel

Code:
obj-m := name.o
name-objs := lib1.o mod.o

# 4  
Old 03-24-2009
Kernel module compilation problem

Dear Marcintom,

Just saw your post on compiling the kernel modules spanning multiple files. I am not able to do it .
I have one file mod.c (the main kernel module) and one list.c (which is the library)
Could you please help me with the following questions ..
1) Is a header file needed (list.h) to be included in the mod.c ?
2) do we need to write the list.c in the kernel mode (using #define __kernel___) and using kmalloc etc ?
3) How would you write the make file ?

Right now If i try writing list.c in the kernel mode and use the makefile that u have give it give a lot of compile errors and if i write it in the user mode it give un known symobol while loading the module somehow it is not able to link it..it would be great if you could please help.

Natraj
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Linux

Unload kernel module at boot time (Debian Wheezy 7.2, 3.2.0-4-686-pae kernel)

Hi everyone, I am trying to prevent the ehci_hcd kernel module to load at boot time. Here's what I've tried so far: 1) Add the following line to /etc/modprobe.d/blacklist.conf (as suggested here): 2) Blacklisted the module by adding the following string to 3) Tried to blacklist the module... (0 Replies)
Discussion started by: gacanepa
0 Replies

2. UNIX for Dummies Questions & Answers

Kernel Compilation Issue

I have installed ubuntu 11.04 on my system. After this when I used to give uname -r it showed me kernel version as 2.6.38. Now I had downloaded kernel 2.6.34.12 from kernel.org and installed it using the following steps: make make modules make modules_install make install This created... (2 Replies)
Discussion started by: rupeshkp728
2 Replies

3. Linux

Linux kernel compilation

I have complied the kernel with a default settings... now if I load this kernel , it'll load perfectly but the INTERNET is not workink... I think in the default settings The network modules are not included.. Can anybody help me out with the selection of the network module when i give "make... (1 Reply)
Discussion started by: naresh046
1 Replies

4. Red Hat

Kernel compilation for s3c2440

Hi All, I am trying to compile Kernel 2.6.31 with arm-linux-gcc3.2.2 for s3c2440a, but I am not able to perform the task. I am using Redhat 9 firstly i am using the following commands $make s3c2410_defconfig // there is no error in execution of this command next i run $make ... (0 Replies)
Discussion started by: niranjanvg
0 Replies

5. UNIX and Linux Applications

Apache module compilation error

I'm trying to compile an apache module (a tutorial module, Apache 2 Module Tutorial - GNU Build Tools and the Development Environment) and I get errors like this: apr.h:273: error: expected ´=´, ´,´,´;´,´asm´ or ´__attribute__´ before ´apr_off_t´ those errors occur like 30 times in different... (4 Replies)
Discussion started by: hjalle
4 Replies

6. Linux

problem with kernel module loading

Hi masters, I am new to linux and unix forum and this is my first forum. So please excuse if I am not giving sufficient information. I will give them on request. I have created a bandwidth manager module. I am using a 2.6.9 kernel and in Red Hat 3.4.3 distribution. But when i run make... (1 Reply)
Discussion started by: iamjayanth
1 Replies

7. Linux

How to convert Linux Kernel built-in module into a loadable module

Hi all, I am working on USB data monitoring on Fedora Core 9. Kernel 2.6.25 has a built-in module (the one that isn't loadable, but compiles and links statically with the kernel during compilation) to snoop USB data. It is in <kernel_source_code>/drivers/usb/mon/. I need to know if I can... (0 Replies)
Discussion started by: anitemp
0 Replies

8. Red Hat

Problem with kernel-module-ntfs

Hi All Im trying to access the my windows XP NTFS from Redhat linux 4.0 Enterprise edition I have downloaded the respective rpm And im able to install it successfully Then i have given the following command , but got an error Here are my partitions And when i give the below... (1 Reply)
Discussion started by: balumankala
1 Replies

9. SuSE

max number of slabs per kernel module (kernel 2.6.17, suse)

Hi All, Is there a max number of slabs that can be used per kernel module? I'm having a tough time finding out that kind of information, but the array 'node_zonelists' (mmzone.h) has a size of 5. I just want to avoid buffer overruns and other bad stuff. Cheers, Brendan (4 Replies)
Discussion started by: Brendan Kennedy
4 Replies

10. UNIX for Dummies Questions & Answers

Kernel compilation

I have re-compiled kernel source code available in /usr/src/linux.2.4.20 with "make" command. The compilation is succesful. Now the problem is create the image for this. The documentation in the same folder says that now you have compile "make image". There is no option for image in Makefile. ... (3 Replies)
Discussion started by: mankrish
3 Replies
Login or Register to Ask a Question