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


目录
相关文章
|
Rust 开发工具 git
日志高亮 | notepad
日志高亮 | notepad
405 7
|
XML 安全 IDE
【C/C++ 实用工具】CppCheck:静态代码检测工具,让你的代码更安全
【C/C++ 实用工具】CppCheck:静态代码检测工具,让你的代码更安全
2965 2
|
4月前
|
IDE Shell Go
真香,Cursor懂的都懂(学习用哈),22.5k一键重置Cursor试用限制!被全网疯狂收藏!
go-cursor-help是一款用 Go 编写的开源工具,可在 3 秒内刷新 Cursor IDE 的机器码,绕过试用限制。支持 Windows、macOS 和 Linux,具备跨平台兼容性,自动配置系统架构。核心功能包括一键重写 `storage.json`、可选随机化 MAC 地址、禁用 Updater 避免版本升级干扰,以及内置历史版本回滚机制。
1183 1
|
存储 编译器 C语言
【C语言】关键字static——static修饰局部变量、全局变量和函数详解!
【C语言】关键字static——static修饰局部变量、全局变量和函数详解!
601 0
|
Linux 网络安全 开发者
深入探索Linux命令:`dmesg`
`dmesg`是Linux命令,用于显示和控制内核环形缓冲区的系统消息,包含驱动加载、硬件错误和启动消息。基本用法包括:无参数运行以显示所有内核消息,使用`-c`清除消息,`-n`限制显示数量,以及`-T`按时间戳排序。适用于系统启动诊断、硬件问题排查和内核模块调试。注意,内核消息可能因新消息覆盖而丢失,及时查看很重要。
|
监控 Linux 开发者
【专栏】`head`命令是Linux系统中用于快速查看文件开头内容的工具,常用于处理日志文件
【4月更文挑战第28天】`head`命令是Linux系统中用于快速查看文件开头内容的工具,常用于处理日志文件。基本用法包括指定查看行数(如`head -n 10 file.txt`)和与其他命令(如`grep`)结合使用。高级用法涉及动态查看日志、过滤内容、管道操作及在脚本中的应用。实际应用案例包括监控系统日志、排查错误和分析应用日志。使用时注意文件存在性、行数选择及权限问题。熟练掌握head命令能提升工作效率,结合其他工具可实现更多功能,助力Linux用户提升技能。
281 1
|
机器学习/深度学习 Python
【错误记录】PyCharm 运行 Python 程序报错 ( PEP 8: E402 module level import not at top of file )
【错误记录】PyCharm 运行 Python 程序报错 ( PEP 8: E402 module level import not at top of file )
3271 0
【错误记录】PyCharm 运行 Python 程序报错 ( PEP 8: E402 module level import not at top of file )
|
开发工具 git
使用git下载远程所有分支到本地
使用git下载远程所有分支到本地
825 0
|
Linux 程序员 编译器
【C语言】Sleep()函数----详解
【C语言】Sleep()函数----详解
924 0
【商标小课堂】商标驳回那点事儿
【商标小课堂】商标驳回那点事儿
463 0
【商标小课堂】商标驳回那点事儿