|
2.4内核的系统
1
我有 1.c 1.h
2.c 2.h
3.c 3.h
6个文件。
2
1.c -主文件 init_module 函数在 该文件中
3
1.c 包含 2.h 3.h
4 每个.c 我都写了
#ifndef __KERNEL__
#define __KERNEL__
#endif
#ifndef MODULE
#define MODULE
#endif
#include <linux/version.h>
#include <linux/config.h>
#if CONFIG_MODVERSIONS==1
#define MODVERSIONS
#include <linux/modversions.h>
#endif
#include <linux/module.h>
#include <linux/kernel.h>
下面是Makefile
CHOST="i686-pc-linux-gnu"
CC = gcc
CFLAGS=-Wall -march=pentium4 -O3 -D__KERNEL__ -DMODULE
LIBS=-L/usr/lib -lc
# Change include directory for your kernel
MODULE_CFLAGS=-I/usr/src/linux-2.4.22/include
MODULE_CFLAGS+=$(CFLAGS)
EXECUTE_CFLAGS=-ggdb
EXECUTE_CFLAGS+=$(CFLAGS)
TARGET = 1.ko
%.o: %.c
$(CC) -c $< -o $@ $(MODULE_CFLAGS)
%.o:%.cpp
$(CC) -c $< -o $@ $(MODULE_CFLAGS)
SOURCES = $(wildcard *.c *.cpp)
OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCES)))
$(TARGET) : $(OBJS)
$(CC) $(OBJS) -o $(TARGET)
clean:
rm -rf *.o
rm -rf $(TARGET)
//---------------------------------------------------------------
[root@QoS spconstat]# make
gcc -c 2.c -o 2.o -I/usr/src/linux-2.4.22/include -Wall -march=pentium4 -O3 -D__KERNEL__ -DMODULE
gcc -c 1.c -o 1.o -I/usr/src/linux-2.4.22/include -Wall -march=pentium4 -O3 -D__KERNEL__ -DMODULE
gcc -c 3.c -o 3.o -I/usr/src/linux-2.4.22/include -Wall -march=pentium4 -O3 -D__KERNEL__ -DMODULE
gcc 2.o 1.o 3.o -o 1.ko
/usr/lib/gcc-lib/i386-redhat-linux/3.2.2/../../../crt1.o(.text+0x18): In function `_start':
../sysdeps/i386/elf/start.S:77: undefined reference to `main'
2.o(.text+0xea): In function `Myinet_ntoa':
: undefined reference to `sprintf_Rsmp_1d26aa98'
2.o(.text+0x115): In function `GetIPAddtoHash':
: undefined reference to `sprintf_Rsmp_1d26aa98'
1.o(.text+0x11): In function `SP_netlink_thread':
: undefined reference to `printk_Rsmp_1b7d4074'
这都个文件组成的MODULE 该怎么编译 |
|