您的位置:首页 > 运维架构 > Linux

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

2017-07-15 15:51 513 查看
原文: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的隐式规则生成所需的目标文件。最终链接为模块目标文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux驱动开发