原文:http://blog.csdn.net/mj5742356/article/details/31751079
多个文件的模块的编译,下面是一个简单多文件编译的示例,能够较清楚的告诉大家如何进行多文件模块编译
//a.c
#include <linux/init.h>
#include <linux/module.h>
#include "b.h"
MODULE_LICENSE("GPL");
static __init int a(void)
{
led_on();
return 0;
}
static __exit void b(void)
{
led_off();
}
module_init(a);
module_exit(b);
//b.c
#include <linux/module.h>
#include "b.h"
void led_on(void)
{
printk("%s %d LED ON\n", __func__, __LINE__);
}
void led_off(void)
{
printk("%s %d LED OFF\n", __func__, __LINE__);
}
//b.h
#ifndef _B_H_
#define _B_H_
void led_on(void);
void led_off(void);
#endif // _B_H_
#Makefile
TARGET := test
obj-m = $(TARGET).o
$(TARGET)-objs = a.o b.o
#KERN = /share/arm/linux-3.2
KERN = /lib/modules/`uname -r`/build/
all:
make -C $(KERN) M=`pwd` modules
clean:
make -C $(KERN) M=`pwd` modules clean
rm -rf modules.order
多文件编译的关键在于makefile文件,下面简要介绍一下。
obj-m 是告诉makefile最终的编译目标是什么。比如obj-m = test.o 那么最终编译的模块镜像就是test.ko;
$(TARGET)-objs 是告诉makefile 最终的编译目标需要依赖哪些目标文件,再利用makefile的隐式规则生成所需的目标文件。最终链接为模块目标文件。