一、什么時(shí)候需要完全重新構(gòu)建
在使用buildroot過(guò)程中,當(dāng)通過(guò)make menuconfig、make xconfig或其他配置工具更改了系統(tǒng)配置時(shí),Buildroot是不會(huì)去檢測(cè)哪些部分需要重建。
在某些情況下,Buildroot應(yīng)該重建整個(gè)系統(tǒng),但在一些情況下,僅應(yīng)重建某一個(gè)軟件包,由于構(gòu)建目標(biāo)的多樣性和復(fù)雜性,所以目前發(fā)布的buildroot不支持對(duì)更新的自動(dòng)檢測(cè)。
作為使用者來(lái)說(shuō),應(yīng)該知道在什么樣的情況下需要進(jìn)行完全重新構(gòu)建,下面列出了一些規(guī)則:
(1)當(dāng)更改目標(biāo)體系的架構(gòu)配置時(shí),需要完全重新構(gòu)建。
例如:修改體系架構(gòu)、二進(jìn)制格式或浮點(diǎn)策略等,這些更改會(huì)影響整個(gè)系統(tǒng)。也就是“Target options”項(xiàng)下的配置,如下圖所示:
(2)更改工具鏈配置時(shí),通常是需要完全重新構(gòu)建。
例如:更改編譯器版本、C庫(kù)的類型或配置、其他一些基本配置項(xiàng)時(shí),因?yàn)檫@些修改會(huì)影響整個(gè)系統(tǒng)。
(3)在配置中新增軟件包時(shí),有些情況下完全重新構(gòu)建。
如果此軟件包從未構(gòu)建過(guò),這時(shí)候buildroot能自動(dòng)檢測(cè)并對(duì)它進(jìn)行構(gòu)建;如果軟件包已經(jīng)構(gòu)建過(guò)了,在我們重新修改配置以支持其他軟件包功能,這時(shí)buildroot是不會(huì)重新構(gòu)建它們的。如果我們知道應(yīng)該重新哪些軟件包,這可以重新構(gòu)建它們,即手動(dòng)重建,如果不知道需要重建哪些軟件包,則需要完全重建。
例如:假設(shè)構(gòu)建了一個(gè)具有ctorrent軟件包支持的系統(tǒng),但沒(méi)有openssl。系統(tǒng)工作后,才意識(shí)到想要ctorrent提供SSL的支持,因此在Buildroot配置中啟用了openssl軟件包并重新進(jìn)行構(gòu)建。這時(shí)候Buildroot 將檢測(cè)到 openssl 應(yīng)該被構(gòu)建,并對(duì)它進(jìn)行構(gòu)建,但是它不會(huì)檢測(cè)到應(yīng)該重新構(gòu)建 ctorrent結(jié)合openssl 軟件包來(lái)增加OpenSSL支持。這時(shí)候則需要進(jìn)行完全重建,或者重建ctorrent軟件包本身。
(4)當(dāng)從配置中刪除軟件包時(shí),Buildroot不會(huì)執(zhí)行任何操作。它不會(huì)從目標(biāo)根文件系統(tǒng)或工具鏈sysroot中刪除該軟件包安裝的文件,所以需要完全重新構(gòu)建才能移除此軟件包。
(5)更改軟件包子選項(xiàng)時(shí),不會(huì)自動(dòng)重建軟件包。在實(shí)際使用中,進(jìn)行此類更改后,只需要重建該軟件包就足夠了,如果啟用子選項(xiàng),然后向該軟件包中添加了一些對(duì)已構(gòu)建的另一個(gè)軟件包有用的功能時(shí),這時(shí)候則需要完全重建。
(6)更改根文件系統(tǒng)的目錄結(jié)構(gòu)時(shí),需要完全重建。
(7)重建或刪除由“FOO_DEPENDENCIES”列出的軟件包時(shí),軟件包foo不會(huì)自動(dòng)重建,這時(shí)候則需要完全重新構(gòu)建。
一般來(lái)說(shuō),當(dāng)我們遇到構(gòu)建錯(cuò)誤并且不確定所做的配置更改可能會(huì)帶來(lái)的影響時(shí),這時(shí)候就應(yīng)該進(jìn)行完全重新構(gòu)建了。
二、如何完全重新構(gòu)建
使用make clean all命令清除全部配置,重新編譯構(gòu)建即可。
三、如何重建軟件包
Buildroot 在尚未從頭開(kāi)始重建的情況下不支持刪除軟件包。這是因?yàn)?Buildroot 無(wú)法跟蹤軟件包在output/staging和output/target目錄中安裝了哪些文件,不能清楚的知道軟件包根據(jù)另一個(gè)軟件包的用途進(jìn)行了哪些編譯。
從頭開(kāi)始重建單個(gè)軟件包最簡(jiǎn)單的方法是:在output/build中刪除對(duì)應(yīng)軟件包的構(gòu)建目錄。然后,Buildroot將從頭開(kāi)始重新提取、重新配置、重新編譯和重新安裝這個(gè)軟件包。我們可以使用make
如果只想從build構(gòu)建步驟重新啟動(dòng)軟件包的構(gòu)建過(guò)程,則可以運(yùn)行make
如果想從 configuration 配置步驟重新啟動(dòng)軟件包的構(gòu)建過(guò)程,可以運(yùn)行make
雖然
在buildroot的內(nèi)部,本質(zhì)上是通過(guò)創(chuàng)建stamp文件來(lái)跟蹤在每個(gè)軟件包中完成了哪些構(gòu)建步驟,該文件保存在軟件包構(gòu)建目錄中,位于output/build/
審核編輯:劉清
-
編譯器
+關(guān)注
關(guān)注
1文章
1662瀏覽量
50203 -
OpenSSL
+關(guān)注
關(guān)注
0文章
21瀏覽量
8995 -
Buildroot
+關(guān)注
關(guān)注
1文章
50瀏覽量
1683
原文標(biāo)題:buildroot使用筆記-04 | 重建的規(guī)則和操作
文章出處:【微信號(hào):嵌入式小生,微信公眾號(hào):嵌入式小生】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
請(qǐng)問(wèn)DMA什么時(shí)候需要設(shè)置為遞增?
cache的應(yīng)用——什么時(shí)候需要刷cache1
怎樣使用buildroot構(gòu)建根文件系統(tǒng)
BuildRoot什么時(shí)候需要全部重新編譯某一個(gè)包
使用Buildroot構(gòu)建根文件系統(tǒng)的方法簡(jiǎn)析
RK3588 ubuntu什么時(shí)候能支持mpi
串口接線什么時(shí)候直連,什么時(shí)候要交叉,有沒(méi)有什么規(guī)則?
請(qǐng)問(wèn)51的P0口什么時(shí)候要上拉電阻什么時(shí)候不需要?
什么時(shí)候需要HDMI接口?
嵌入式Linux學(xué)習(xí)之旅(10)— 使用buildroot構(gòu)建根文件系統(tǒng)

評(píng)論