驱动代码
#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后