如果我解释得不好或者问了一些明显的问题,我很抱歉,但我是 Linux 内核的新手,而且有点深入……
我们有一个嵌入式 Linux 系统,它附带一个(文档非常糟糕的)SDK,其中包含数百个文件夹stuff,大多数文件夹包含rules.make,make,make.config或...的某些变体,并且根文件夹包含“master”makefile和rules.make,这意味着您可以从根文件夹中键入“make sysall” “它构建了整个包。
到目前为止一切顺利,但尝试调试它是一个问题,因为文档会这样说:
"要让内核输出调试消息,只需定义#outputdebugmessagesplz"
好的,但是其中一些内容是在“主”make/rules 文件中定义的,其中一些是在子 make/rules/config 文件中定义的,一些是在 .h 文件中......当然,更好的是从“顶部”make.config 打开/关闭这些东西,而不是修改单个 .h 文件,然后必须记住再次关闭它们。
所以我认为递归地构建一棵树是一件有用的事情,从主“make”文件开始并遵循它所做的一切,定义或重新定义的所有内容等等......但似乎没有有一个简单的方法吗?
我假设我在这里缺少一个输出此信息的“make”选项,或者缺少一个可以正常工作的 makefile/config 的用法?
你的情况并不少见。在开发嵌入式系统时,您可能会遇到许多以特定方式解决问题的自定义系统。正如人们已经对您的问题发表评论一样,没有简单的方法可以为您的 makefile 结构/框架生成依赖关系图。但有些事情你可以尝试,我会根据你的情况尝试提出我的建议。既然你说过:
我对 Linux 内核还是个新手,而且有点深入……
and
我们有一个嵌入式 Linux 系统,它附带了(非常糟糕)
已记录)包含数百个文件夹的 SDK
您可以尝试以下操作:
- 如果您的 SDK 由第三方供应商提供,请尝试联系他们并获得一些支持。
- SDK 通常提供一种抽象来与多个组件一起工作,而无需深入了解每个组件的实际工作原理。尝试找出您的问题,例如您是否想要自定义only内核配置,您可以在 SDK 上找到 linux 内核文件夹(假设您的 SDK 由一组文件夹组成,其中包含库、应用程序源代码等内容,其中一个可能是内核文件夹)并运行制作菜单配置。这将打开一个基于 ncurses 的配置 GUI,您可以在其中导航并选择内核选项。
- 正如人们已经指出的,你可以尝试运行make -n并检查输出。你也可以尝试运行使-p |较少的并检查输出,但我不建议这样做,因为它只会打印读取 makefile 所产生的数据库(规则和变量值)。您必须解析此输出才能找出您想要的内容。
基本上,您应该尝试确定您想要自定义的内容,并查看它如何与您的 SDK 交互。如果它是内核,那么仅使用它将为您提供一个起点。 Linux 内核有自己的 makefile 构建系统,名为kbuild。您可以在以下位置找到更多相关信息:内核的文档文件夹 https://www.kernel.org/doc/Documentation/kbuild/.
除此之外,如果您有一个控制多个组件的复杂 makefile 结构,那么尝试了解 makefile 的工作原理将对您有所帮助。以下是了解 makefile 的好资源:
GNU Make 官方文档 https://www.gnu.org/software/make/manual/html_node/index.html
奥莱利的打开的书“使用 GNU Make 管理项目” http://oreilly.com/catalog/make3/book/
此外,在尝试构建自己的工具之前,您可以检查是否有一个开源项目可以满足您的需求。在谷歌上的快速搜索给了我这个:
- 制作师 https://code.google.com/p/makegrapher/
另外,检查这个问题 https://stackoverflow.com/questions/5032269/backtrace-for-gnu-make and this one https://stackoverflow.com/questions/2947821/graphing-the-dag-generated-by-make。您可能会从与您有相同问题的人那里找到有用的信息。
希望能帮助到你!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)