嵌入式爱好者

多个驱动文件编译成一个模块

2022-9-5 18:17| 发布者: snn| 查看: 200| 评论: 0

类目: i.MX8MP系列产品  >  Linux     文档编号: 748

多个驱动编译成一个模块:

一个模块只能拥有一个初始化和析构接口,即一对module_initmodule_exit,如果存在多个接口会导致编译失败。

1.屏蔽hello1.chello2.c模块初始化和析构函数

module_init(hello1_init);  //将函数指定为驱动的入口函数

module_exit(hello1_exit);  //将函数指定为驱动的出口函数

2.导出函数

EXPORT_SYMBOL(hello1_init);   

EXPORT_SYMBOL可以将一个函数以符号的方式导出给其他模块使用,跟添加hello.h全局声明类似。

例程源码:

hello1.c

#include <linux/init.h>

#include <linux/module.h>

int hello1_init(void){

printk(KERN_ALERT "Hello1 World enter\n");

return 0;

}

EXPORT_SYMBOL(hello1_init);

void hello1_exit(void){

printk(KERN_ALERT "Hello1 World exit\n");

}

EXPORT_SYMBOL(hello1_exit);

/*module_init(hello1_init);

module_exit(hello1_exit);*/

MODULE_DESCRIPTION("A Sample Hello World Module");

MODULE_ALIAS("A Sample module");


hello2.c

#include <linux/init.h>

#include <linux/module.h>

int hello2_init(void){

printk(KERN_ALERT "Hello2 World enter\n");

return 0;

}

void hello2_exit(void){

printk(KERN_ALERT "Hello2 World exit\n");

}

MODULE_DESCRIPTION("A Sample Hello World Module");

MODULE_ALIAS("A Sample module");


hello3.c

#include <linux/init.h>

#include <linux/module.h>

#include "hello1.h"

#include "hello2.h"

static int hello3_init(void){

hello1_init();

hello2_init();

printk(KERN_ALERT "Hello3 World enter\n");

return 0;

}

static void hello3_exit(void){

hello1_exit();

hello2_exit();

printk(KERN_ALERT "Hello3 World exit\n");

}

module_init(hello3_init);

module_exit(hello3_exit);

MODULE_DESCRIPTION("A Sample Hello World Module");

MODULE_ALIAS("A Sample module");


修改Makefile

KERNELDIR := /home/forlinx/work/OK8MP-linux-sdk/OK8MP-linux-kernel

CURRENT_PATH := $(shell pwd)

obj-m        += hello.o  

hello-objs   +=  hello1.o hello2.o hello3.o

build: kernel_modules 

kernel_modules:

$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules

clean:

$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean


makeifle作用:将所有目标文件(hello1.o hello2.o hello3.o)链接为一个执行文件



已解决

未解决

只是看看

最新评论

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-3-28 18:59

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

返回顶部