7

如果我解释得不好或者问一些明显流血的东西,我很抱歉,但我是 Linux 内核的新手,而且有点深入......

我们有一个嵌入式 Linux 系统,它带有一个(文档非常糟糕的)SDK,其中包含数百个文件夹,大多数文件夹包含 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 可以正常工作?

4

1 回答 1

2

你的情况并不少见。在为嵌入式系统开发时,您可能会遇到许多以特定方式解决问题的自定义系统。正如人们已经对您的问题发表评论的那样,没有简单的方法可以为您的 makefile 结构/框架生成依赖关系图。但是有些事情你可以尝试,我会根据你的情况尝试提出我的建议。既然你说过:

我是 Linux 内核的新手,有点深入了解...

我们有一个嵌入式 linux 系统,它带有一个(非常糟糕的文档)SDK,其中包含数百个文件夹

您可以尝试以下方法:

  • 如果您的 SDK 由第三方供应商提供,请尝试联系他们并获得一些支持。
  • SDK 通常提供一个抽象来处理多个组件,而无需深入了解每个组件的实际工作原理。尝试查明您的问题,例如,如果您只想自定义内核配置,您可以在 SDK 上找到 linux 内核文件夹(假设您的 SDK 由一组文件夹组成,其中包含库、应用程序的源代码等内容,其中之一可能是内核之一)并运行make menuconfig。这将打开一个基于 ncurses 的配置 GUI,您可以在其中导航和选择内核选项。
  • 正如人们已经指出的那样,您可以尝试运行make -n并检查输出。您也可以尝试运行make -p | less并检查输出,但我不建议这样做,因为它只会打印读取 makefile 产生的数据库(规则和变量值)。您必须解析此输出以找出您想要的内容。

基本上,您应该尝试确定您想要自定义的内容,并查看它如何与您的 SDK 交互。如果它是内核,那么只使用它会给你一个起点。linux 内核有自己的 makefile-build 系统,名为kbuild您可以在内核的文档文件夹中找到有关它的更多信息。

除此之外,如果您有一个复杂的 makefile 结构控制多个组件,那么尝试了解 makefile 的工作原理将对您有所帮助。以下是学习 makefile 的好资源:

GNU Make 官方文档

O'Reilly 的开放书“使用 GNU Make 管理项目”

此外,在尝试构建自己的工具之前,您可以检查是否有一个开源项目可以满足您的需求。谷歌上的快速搜索给了我这个:

另外,检查这个问题这个问题。您可能会从与您遇到相同问题的人那里找到有用的信息。

希望能帮助到你!

于 2013-04-23T12:59:46.373 回答