驱动代码使用Makefile的宏

驱动代码使用Makefile的宏


文章目录

  • 驱动代码使用Makefile的宏
  • 驱动代码
  • Makefile


驱动代码

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




static int hello_init(void){
#ifndef DEBUG

    printk("no def DEBUG\n");
#else
    printk(" def DEBUG\n");
#endif
    return 0;

}


static void hello_exit(void){

    printk("hello exit!!!\n");
    

}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("Paranoid");
MODULE_VERSION("V1.0");
MODULE_LICENSE("GPL");

Makefile

#make 编译项目
#make file 在存放.ko文件目录中创建对应项目的目录
#make install 将*.ko及其应用测试文件移动到根文件中
KBUILD_CFLAGS_MODULE  += -DDEBUG

KERN_DIR = /home/alientek/linux/IMX6ULL/linux/temp/linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek

ROOTFS_DIR = /home/alientek/linux/nfs/rootfs/experiment

#项目名字
PROJECT_NAME = export_symbol

#各驱动名字,ko
DRIVER_NAME1 = a


all:
    make -C $(KERN_DIR) M=`pwd` modules
    
clear:

    
    rm -rf modules.order $(DRIVER_NAME1).mod.c *.o Module.symvers .*.cmd .tmp_versions 

clean:
    make -C $(KERN_DIR) M=`pwd` modules clean
    rm -rf modules.order

file:
    mkdir $(ROOTFS_DIR)/$(PROJECT_NAME)
install:
    cp *.ko $(ROOTFS_DIR)/$(PROJECT_NAME)

# 参考内核源码drivers/char/ipmi/Makefile
# 要想把a.c, b.c编译成ab.ko, 可以这样指定:
 obj-m += $(DRIVER_NAME1).o

KBUILD_CFLAGS_KERNEL编译进内核使用宏
KBUILD_CFLAGS_MODULE编译成模块使用宏
再Makefile中定义DEBUG宏(注意格式+)

 KBUILD_CFLAGS_MODULE  += -DDEBUG

格式

 KBUILD_CFLAGS_MODULE  += -D宏

也可以使用
EXTRA_CFLAGS替换 KBUILD_CFLAGS_MODULE

如果要实现下列效果

#define DEBUG 3

使用下列方式即可

 KBUILD_CFLAGS_MODULE  += -DDEBUG=3

没添加宏DEBUG
在这里插入图片描述

添加宏DEBUG后
在这里插入图片描述

你可能感兴趣的:(Linux驱动V2.0,嵌入式Linux开发,#,内核模块,linux,驱动开发,arm开发,c语言,系统架构)