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