C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了makefile – Eudyptula挑战和内核路径大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我决定拿 Eudyptula Challenge.
在我提交了第一个任务之后,建立一个简单的“Hello World!”模块,我收到以下答案.

要求是:

我正在做的是检查环境变量KERNELRELEASE是否设置.如果是我构建模块

$(KERNELRELEASE)/build

如果不是反对的话

/lib/modules/$(sHell uname -r)/build

我不明白为什么这不符合这项任务的要求.

@H_607_16@解决方法
根据 Eudyptula challenge规则,禁止给你直接的解决方案,所以我将尝试描述答案的元素,所以你可以自己解决问题.基本上,我下面写的所有内容都在 Documentation/kbuild/modules.txt文件(特别是 section 3.1 – Shared Makefile)中有所描述,所以我不认为这是违规的规则.下面只是解释上述文档中描述的内容.

KERNELRELEASE变量

你所错误的是认为$(KERNELRELEASE)旨在保持内核的路径.什么$(KERNELRELEASE)变量实际上意味着 – 你可以在Documentation/kbuild/makefiles.txt找到它:

事情是,你的Makefile将被执行2次:从你的make命令和内核Makefile.而$(KERNELRELEASE)可以帮助你解决

>如果未定义此变量,则您的Makefile从您的make命令运行;在此步骤中,您将执行内核的Makefile(使用-C param提供内核目录).对于内核的Makefile(从Makefile的内部)运行make后,您的Makefile将被第二次执行(见下一个项目).
>如果定义了这个变量,你的Makefile是从内核的Makefile执行的(它定义了这个变量,然后再调用你的MakefilE).在这一步,您可以使用内核构建系统功能,如obj-m.

-C参数

您真正需要做的是在Makefile中定义一些自定义变量,该变量将保存内核目录路径.你可以称它为KDIR为例.如您所知,您的内核源位于此路径:/ lib / modules / $(sHell uname -r)/ build.接下来,您可以在执行内核的Makefile时向-C param(参见man 1 make)提供此变量.

接下来,您必须使您可以从Makefile外部传递此变量.为此,可以使用conditional variable assignment operator

KDIR ?= /lib/modules/$(sHell uname -r)/build

这样,如果您将KDIR变量传递给您的Makefile,如下所示:

$make KDIR=bla-bla-bla

KDIR变量将具有您传递的值.否则它将包含认值,它是/ lib / modules / $(sHell uname -r)/ build.

大佬总结

以上是大佬教程为你收集整理的makefile – Eudyptula挑战和内核路径全部内容,希望文章能够帮你解决makefile – Eudyptula挑战和内核路径所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。