大佬教程收集整理的这篇文章主要介绍了makefile – Eudyptula挑战和内核路径,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
要求是:
我正在做的是检查环境变量KERNELRELEASE是否设置.如果是我构建模块
$(KERNELRELEASE)/build
如果不是反对的话
/lib/modules/$(sHell uname -r)/build
我不明白为什么这不符合这项任务的要求.
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,请注明来意。