linux驱动开发-模块多文件编译

多个文件的模块的编译,下面是一个简单多文件编译的示例,能够较清楚的告诉大家如何进行多文件模块编译

//a.c
#include 
#include 

#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 

#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的隐式规则生成所需的目标文件。最终链接为模块目标文件


你可能感兴趣的:(linux,驱动开发)