您的位置:首页 > 其它

driver makefile

2016-06-09 22:42 176 查看
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
KDIR := /home/akaedu/kernel/linux-2.6.35.7
(其他同上)
//*********************************************
hello.c可直接调用goo.c中的函数,只需在hello.c中声明即可。

3、多模块
//*********************************************
obj-m := hello.o goo.o
KDIR := /home/akaedu/kernel/linux-2.6.35.7
(其他同上)

//*********************************************
注:其中,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-
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: