天天看點

driver makefile

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-      

繼續閱讀