【Linux驱动开发】将多个C源文件编译进一个KO模块

Maindev 是主文件,External 是外部调用文件,将 Maindev.c ,External.c,External.h 编译成 alex.ko 模块。

在 Maindev 里实现入口和出口。

 

程序编写:

 Maindev.c

#include <linux/init.h>
#include <linux/module.h>
#include "External.h"


static int __init dev_init(void)
{
        printk("Enter: %s\n", __func__);
        dev_func();
        return 0;
}

static void __exit dev_exit(void)
{
        printk("Enter: %s\n", __func__);
        dev_func();
}

module_init(dev_init);
module_exit(dev_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("pjw");

External.c

#include "External.h"

int dev_func(void)
{
        printk(">>External discall: %s\n", __func__);
        return 0;
}

External.h

#ifndef __EXTERNAL_H__
#define __EXTERNAL_H__
                 
#include <linux/init.h>
#include <linux/module.h>                   
                 
extern int dev_func(void);

#endif 

Makefile

KERNELDIR := /home/pjw/linux/kernel/iot_kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga
CURRENT_PATH := $(shell pwd)
obj-m := alex.o
alex-objs:=Maindev.o External.o

build: kernel_modules

kernel_modules:
	$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:
	$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean

 

测试:

1、将 alex.ko 文件拷贝到 rootfs/lib/modules 目录
2、主板终端进入到目录 lib/modules/4.1.15 中,输入如下命令加载 dtsled.ko 驱动模块:

/lib/modules/4.1.15 # depmod              //第一次加载驱动的时候需要运行此命令
/lib/modules/4.1.15 # modprobe alex.ko    //加载驱动
/lib/modules/4.1.15 # rmmod alex.ko       //卸载驱动

 

驱动示例文件下载:https://download.csdn.net/download/p1279030826/12717729

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值