一、什么时候需要完全重新构建
在使用buildroot过程中,当通过make menuconfig、make xconfig或其他配置工具更改了系统配置时,Buildroot是不会去检测哪些部分需要重建。
在某些情况下,Buildroot应该重建整个系统,但在一些情况下,仅应重建某一个软件包,由于构建目标的多样性和复杂性,所以目前发布的buildroot不支持对更新的自动检测。
作为使用者来说,应该知道在什么样的情况下需要进行完全重新构建,下面列出了一些规则:
(1)当更改目标体系的架构配置时,需要完全重新构建。
例如:修改体系架构、二进制格式或浮点策略等,这些更改会影响整个系统。也就是“Target options”项下的配置,如下图所示:
(2)更改工具链配置时,通常是需要完全重新构建。
例如:更改编译器版本、C库的类型或配置、其他一些基本配置项时,因为这些修改会影响整个系统。
(3)在配置中新增软件包时,有些情况下完全重新构建。
如果此软件包从未构建过,这时候buildroot能自动检测并对它进行构建;如果软件包已经构建过了,在我们重新修改配置以支持其他软件包功能,这时buildroot是不会重新构建它们的。如果我们知道应该重新哪些软件包,这可以重新构建它们,即手动重建,如果不知道需要重建哪些软件包,则需要完全重建。
例如:假设构建了一个具有ctorrent软件包支持的系统,但没有openssl。系统工作后,才意识到想要ctorrent提供SSL的支持,因此在Buildroot配置中启用了openssl软件包并重新进行构建。这时候Buildroot 将检测到 openssl 应该被构建,并对它进行构建,但是它不会检测到应该重新构建 ctorrent结合openssl 软件包来增加OpenSSL支持。这时候则需要进行完全重建,或者重建ctorrent软件包本身。
(4)当从配置中删除软件包时,Buildroot不会执行任何操作。它不会从目标根文件系统或工具链sysroot中删除该软件包安装的文件,所以需要完全重新构建才能移除此软件包。
(5)更改软件包子选项时,不会自动重建软件包。在实际使用中,进行此类更改后,只需要重建该软件包就足够了,如果启用子选项,然后向该软件包中添加了一些对已构建的另一个软件包有用的功能时,这时候则需要完全重建。
(6)更改根文件系统的目录结构时,需要完全重建。
(7)重建或删除由“FOO_DEPENDENCIES”列出的软件包时,软件包foo不会自动重建,这时候则需要完全重新构建。
一般来说,当我们遇到构建错误并且不确定所做的配置更改可能会带来的影响时,这时候就应该进行完全重新构建了。
二、如何完全重新构建
使用make clean all命令清除全部配置,重新编译构建即可。
三、如何重建软件包
Buildroot 在尚未从头开始重建的情况下不支持删除软件包。这是因为 Buildroot 无法跟踪软件包在output/staging和output/target目录中安装了哪些文件,不能清楚的知道软件包根据另一个软件包的用途进行了哪些编译。
从头开始重建单个软件包最简单的方法是:在output/build中删除对应软件包的构建目录。然后,Buildroot将从头开始重新提取、重新配置、重新编译和重新安装这个软件包。我们可以使用make
如果只想从build构建步骤重新启动软件包的构建过程,则可以运行make
如果想从 configuration 配置步骤重新启动软件包的构建过程,可以运行make
虽然
在buildroot的内部,本质上是通过创建stamp文件来跟踪在每个软件包中完成了哪些构建步骤,该文件保存在软件包构建目录中,位于output/build/
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !