2013-07-26 56 views
7

我將爲AT91SAM9X25 Board設置我自己的linux嵌入式系統的構建環境。我正在使用buildroot來做到這一點。 make命令構建所有目標,首先構建工具鏈,然後打包,然後創建rootfs(tar,cpio ...)的rootfs和映像。 重建rootfs我通常使用make clean然後make。 make clean命令刪除所有工具鏈,包括工具鏈。如何在buildroot中重建rootfs

所以我的第一個問題是:有沒有辦法在沒有構建工具鏈的情況下重新創建rootfs?這需要很多時間。

另外我正在buildroot中構建linux內核。我在buildroot中打開了BR2_LINUX_KERNEL [= y]。 Linux配置爲使用Initial RAM文件系統,因此構建內核所需的rootfs映像(應由buildroot創建)。當我在buildroot的根目錄下運行make時,出現錯誤的構建失敗無法打開'buildroot-2013.05/output/images/rootfs.cpio'。因爲(如果我理解正確)構建序列是工具鏈 - pakages - rootfs - linux內核 - rootfs映像。當它嘗試構建Linux內核時,不會創建rootfs.cpio映像。

所以第二個問題是:如果我想使用初始RAM文件系統,如何在buildroot中構建Linux?

可能是否有比buildroot更高效的替代方案?

在此先感謝。

回答

13

make命令構建你不想這樣做(直到Buildroot裏面配置)的所有目標


您首先需要通過指定目標板來配置Buildroot。
manual你可以從頭開始,還是從相似的板如configs/at91sam9g20dfc_defconfig

除了Buildroot裏面的配置文件,你還需要一個Linux內核配置文件導出您AT91SAM9X25板創建Buildroot裏面配置文件(除非你想嘗試從頭開始配置內核)。
AT91SAM9x5 Atmel評估板的內核配置文件爲at91sam9x5ek_defconfig

您還應該閱讀第3.4.2節。 創建自己的板級支持

所以第一個我的問題是:是否有某種方式來重塑根文件系統沒有建立的工具鏈?這需要很多時間。

答案取決於你如何定義「重拍根目錄」。 如果您刪除目錄output/images/,則會重寫rootfs的文件。
如果您刪除output/build/中的目錄,那麼這些包或子系統將從源代碼重新編譯。

如果您將Buildroot配置爲使用您自己的或外部工具鏈,那麼make clean將不會刪除它們。如果您將Buildroot配置爲安裝其目錄外的工具鏈,則它可能在make clean期間保持獨立。

當然,Buildroot make足夠聰明,可以知道自上次構建以來發生了什麼變化以及需要重新編譯哪些內容。
應該是極少數情況下,您需要刪除output/build/中的目錄以強制重新編譯。

所以第二個問題是:如果我想使用初始RAM文件系統,如何在buildroot中構建linux?

您需要正確配置Buildroot和Linux內核。

make menuconfig 
    Filesystem images ---> 
make linux-menuconfig 
    General setup ---> 
make 

使用Buildroot裏面的AT91SAM9x5更簡潔的信息是this Linx4SAM page

可能會有比buildroot的更有效的替代品?

還有其他工具,如Open Embedded,但他們描述爲「更有效」是主觀的。


附錄

如何重建根文件系統中的buildroot

要強制要重建的根文件系統(在這種情況下的initramfs)在輸出刪除三個隱藏文件/build/linux-x.xx.xx目錄

.stamp_images_installed 
    .stamp_initramfs_rebuilt 
    .stamp_target_installed 
+0

讓我重新修改我關於在buildroot中構建Linux內核的問題(可以解釋得不夠清楚)。 Buildroot使得:1.Toolchain - > 2.packages - > 3.Linux內核 - > 4.rootfs圖像。但是,在步驟3(linux內核)中,rootfs映像是必需的,因爲linux配置爲使用初始RAM文件系統,但我們僅在步驟4中得到了它。問題 - 我在步驟3看到錯誤消息:沒有rootfs.cpio – Yuri

+1

*「linux配置爲使用初始RAM文件系統」* - ** Buildroot是否也配置爲initramfs **?步驟#3中的錯誤意味着您沒有正確配置Buildroot。 [關於「添加對initramfs的支持」的提交說明](http://git.uclibc.org/buildroot/commit/?id=f507921d391bb2578261a9e45c003e72302dc67a)介紹了您對Buildroot如何處理看起來像是雞還是雞蛋問題的擔憂。 。本質上,Buildroot使用* empty * initramfs文件執行第3步,然後執行額外的步驟#5以使用實際的initramfs生成內核。 – sawdust

+0

您的答案(即刪除.stamp_xxx文件)對強制重建rootfs非常有用。不過,我已經用overlay向rootfs添加了額外的東西。當我更改爲(稍微)不同的配置而沒有rootfs覆蓋時,舊的覆蓋文件不會從「target /」下的結構或最終圖像中刪除。我試圖刪除「目標」的內容,但這導致了一個構建錯誤(這不是一個簡單的構建輸出)。有沒有辦法清理已經從rootfs中刪除的東西,而不進行完整的distclean /重建? – Jeremy