linux驱动开发-3.驱动编译


创建一个最简单的驱动代码文件demo.c:

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

int __init demo_init(void)
{
    printk("%s, %s, %d \r\n", __FILE__, __FUNC__, __LINE__);
    
    return 0;
}

void __exit demo_exit(void)
{
    printk("%s, %s, %d \r\n", __FILE__, __FUNC__, __LINE__);
}

module_init(demo_init);
module_exit(demo_exit);
MODULE_LICENSE("GPL");
- MODULE_LICENSE("GPL") 如果不声明开源协议,编译会报内核污染的警告,因此必须声明,才能使用内核全部功能

创建Makefile (ps:M需要大写):

KERNEL_DIR := /lib/modules/$(shell uname -r)/build
MODULE_DIR := $(shell pwd)

obj-m:=demo.o

all:
	make -C $(KERNEL_DIR) M=$(MODULE_DIR) modules

clean:
	make -C $(KERNEL_DIR) M=$(MODULE_DIR) clean 
- obj-m:编译目标为驱动模块module
- shell uname -r:可取出当前系统kernel的文件夹名
- KERNEL_DIR :用于编译模块的内核路径,这里必须是经过编译的内核,如果是用于嵌入式硬件的驱动,这里应该为嵌入式硬件搭载系统版本的经过编译的内核路径
- MODULE_DIR:当前驱动文件所在路径
ps:本demo可直接用于linux主机测试

make生成目标文件dmeo.ko

原文链接:,转发请注明来源!