如何将参数从Makefile传递到Linux内核模块源代码

Rasmus Friis Kjeldsen:

我有源代码:

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

int init_module(void)
{
    printk(KERN_INFO "Hello world %i\n", BUILD_NUMBER);
    return 0;
}

void cleanup_module(void)
{
    printk(KERN_INFO "Goodbye world 1.\n");
}

和一个makefile:

obj-m += hello-1.o

BUILD_NUMBER := 42

# How to pass BUILD_NUMBER to hello-1.c ???

all:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

现在如何将BUILD_NUMBER参数从makefile传递到源代码?

迪迪埃·特罗塞特(Didier Trosset):

由于Linux构建系统使用内核提供的Makefile,因此无法对其进行更改。我建议您将版本号直接放在源代码中,而不要放在Makefile中。

有一种可能的想法。您可以定义CPPFLAGS环境变量。它应该由内核Makefile传递给C编译器命令行。如果将此CPPFLAGS变量定义为-DVERSION=42,则可以VERSION在源文件中使用此宏。

all:
    CPPFLAGS="-DVERSION=42" make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

请注意,CPPFLAGS代表“ C预处理程序标志”。它与C ++无关。

经过测试。这是行不通的。但是有一个解决方案。内核Makefile允许(并使用)KCPPFLAGS环境变量的定义,该环境变量将被添加到内核Makefile中定义的CPPFLAGS中。

您必须使用:

all:
    KCPPFLAGS="-DVERSION=42" make -C /lib/modules/$(shell uname -r)/build M=$(PWD) 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Cpuset将内核模块隔离到特定的内核

针对文件系统上的任何内核源代码树编译树外内核模块

如何编写Linux内核模块?

将数组作为命令行参数传递给Linux内核模块

Linux内核模块编程:makefile

如何在启动时将值传递给内置Linux内核模块?

如何从C代码加载Linux内核模块?

Linux内核模块的Makefile?

如何解析通过/ proc文件传递到内核模块的大量数据?

如何解析通过/ proc文件传递到内核模块的大量数据?

如何从Linux内核模块的init_module代码创建设备节点?

如何将内核模块加载到lxc容器?

内核模块。如何根据传递的参数修改printk的严重性?

如何将参数从Web Pack传递到代码?

如何将参数从Makefile传递到程序?

如何将参数从模块传递到unittest模块?

如何将参数从JS函数传递到PHP代码

基本内核模块的Makefile

如何将源代码编译到内核中?

如何在以下makefile下的空格分隔的目录中编译Linux内核模块?

在Linux中使用Makefile编译内核模块

用于Linux内核模块的Makefile问题

如何将参数从模块A传递到模块B?

如何将内核模块列入黑名单?

printk 的 Linux 内核模块错误:格式参数太多

如何将参数从 php 传递到 linux 中的脚本?

如何将 yocto rootfs 中的 galcore 内核模块列入黑名单

如何将参数传递给应用服务的源代码管理?

使用socket api,如何将额外的数据结构传递给内核模块中的fd?