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


目录
相关文章
|
21天前
|
C语言
内核源码中遇到不会解析的宏怎么办?
内核源码中遇到不会解析的宏怎么办?
206 1
|
16天前
|
存储 程序员 编译器
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)(上)
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)
27 0
|
16天前
|
程序员 编译器 C语言
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)(中)
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)
26 0
|
16天前
|
自然语言处理 编译器 Linux
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)(下)
C语言进阶⑳(程序环境和预处理)(#define定义宏+编译+文件包含)
20 0
|
21天前
|
编译器 测试技术
如何编写自己的Makefile(1)
如何编写自己的Makefile(1)
10 1
|
C语言
gcc编译时传递宏定义
gcc编译时传递宏定义
213 0
|
存储 编译器 API
Win32汇编:过程与宏调用
在计算机领域,堆栈是一个不容忽视的概念,堆栈是一种`后进先出(LIFO,Last-In,First-Out)`的数据结构,这是因为最后压入堆栈的值总是最先被取出,而新数值在执行PUSH压栈时总是被加到堆栈的最顶端,数据也总是从堆栈的最顶端被取出,堆栈是个`特殊的存储区`,主要功能是暂时存放数据和地址,通常用来保护断点和现场.
91 0
|
关系型数据库

热门文章

最新文章