1、單子產品單檔案
//*********************************************
obj-m := hello.o
KDIR := /home/akaedu/kernel/linux-2.6.35.7
all:
make -C $(KDIR) SUBDIRS=$(PWD) mudules
.PHONY:clean
clean:
-rm -rf *.o *.ko *~ *.mod.*
2、單子產品多檔案
obj-m := myhello.o
myhello-objs := hello.o goo.o
(其他同上)
hello.c可直接調用goo.c中的函數,隻需在hello.c中聲明即可。
3、多子產品
obj-m := hello.o goo.o
注:其中,goo.c需要導出符号表,EXPORT_SYMBOL(goo),
供hello.c調用。
注:在編譯子產品前,linux源碼包(或頭檔案包)必須經過正确編譯,可提供導出符号表。
安裝頭檔案包:
sudo apt-get install linux-headers-2.6.32-21-generic
sudo apt-get install linux-source-2.6.32
===================================================================
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE(“Dual BSD/GPL”);
char *who = “world”;
static int hello_init ( void )
{
printk(KERN_ALERT “Hello, %s!\n”, who);
return 0;
}
static void hello_exit ( void )
{
printk(KERN_ALERT “Goodbye, %s!\n”, who);
}
module_init(hello_init);
module_exit(heool_exit);
//makefile
ifeq ($(KERNELRELEASE), )
obj-m :=hello.o
else
KERNELDIR ?= /home/mike/linux-2.6.20
PWD := $(shell pwd)
default:
$(MAKE) –C $(KERNELDIR) M=$(PWD) modules
clean:
rm –rf *.o *~ core.depend .*.cmd *.ko *.mod.c
endif
//注意核對目标平台和交叉編譯器:
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-