I'm trying to upgrade my daemon code so that instead of it being an executable, it will be a kernel module, but I have difficulty even with using a simple example.
Here's the code I tried:
#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void){
printk("Hello world 1.\n");
return 0;
}
void cleanup_module(void){
printk(KERN_ALERT "Goodbye world 1.\n");
}
And because I understand that I can't just compile the code directly, I took a stab at copying and slightly modifying the makefile as follows:
WARN := -W -Wall -Wstrict-prototypes -Wmissing-prototypes
INCLUDE := -isystem /lib/modules/`uname -r`/build/include
CFLAGS := -O2 -DMODULE -D__KERNEL__ ${WARN} ${INCLUDE}
CC := gcc
OBJS := ${patsubst %.c, %.o, ${wildcard *.c}}
all: ${OBJS}
Then on the command line I executed "make" with the expectation of the program to be installed:
This is my output:
gcc -O2 -DMODULE -D__KERNEL__ -W -Wall -Wstrict-prototypes -Wmissing-prototypes -isystem /lib/modules/`uname -r`/build/include -c -o d.o d.c
In file included from /lib/modules/2.6.21.5-smp/build/include/asm/thread_info.h:16,
from /lib/modules/2.6.21.5-smp/build/include/linux/thread_info.h:21,
from /lib/modules/2.6.21.5-smp/build/include/linux/preempt.h:9,
from /lib/modules/2.6.21.5-smp/build/include/linux/spinlock.h:49,
from /lib/modules/2.6.21.5-smp/build/include/linux/module.h:9,
from d.c:1:
/lib/modules/2.6.21.5-smp/build/include/asm/processor.h:82: error: 'CONFIG_X86_L1_CACHE_SHIFT' undeclared here (not in a function)
/lib/modules/2.6.21.5-smp/build/include/asm/processor.h:82: error: requested alignment is not a constant
In file included from /lib/modules/2.6.21.5-smp/build/include/linux/sched.h:51,
from /lib/modules/2.6.21.5-smp/build/include/linux/utsname.h:35,
from /lib/modules/2.6.21.5-smp/build/include/asm/elf.h:12,
from /lib/modules/2.6.21.5-smp/build/include/linux/elf.h:7,
from /lib/modules/2.6.21.5-smp/build/include/linux/module.h:15,
from d.c:1:
/lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:33:3: error: #error You lose.
/lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
/lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
/lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
/lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
/lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
/lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
/lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
/lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
/lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
/lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
/lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
/lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
/lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
/lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
/lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
/lib/modules/2.6.21.5-smp/build/include/linux/jiffies.h:225:31: error: division by zero in #if
In file included from /lib/modules/2.6.21.5-smp/build/include/linux/module.h:21,
from d.c:1:
/lib/modules/2.6.21.5-smp/build/include/asm/module.h:62:2: error: #error unknown processor family
make: *** [d.o] Error 1
Why should I be getting all those errors when I'm only dealing with two functions that are well documented? Is my makefile off? Please advise?
nevermind. I found myself an answer from:
https://www.kernel.org/doc/Documentation/kbuild/modules.txt
It states:
To build against the running kernel use:
$ make -C /lib/modules/`uname -r`/build M=$PWD
Then to install the module(s) just built, add the target
"modules_install" to the command:
$ make -C /lib/modules/`uname -r`/build M=$PWD modules_install
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.