buildroot


http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2

簡介

buildroot是一個Makefiles和patches的命令集,它可以非常簡單的為你的目標系統產生一個交叉編譯工具鏈和根文件系統。除了buildroot本身外,它還可以用來配置編譯linux, busybox, u-boot以及uClibc庫。(uclibc庫比GNU libc庫小,適合於嵌入式系統)

buildroot擁有內嵌的編譯工具鏈,也可以通過配置指定外部的編譯工具鏈。通過指定linux的源碼路徑和內核配置選項,調用交叉編譯器編譯內核鏡像(可以指定內核鏡像的存放路徑、文件名、壓縮格式等);同時,編譯busybox用來生成根文件系統,可以指定根文件系統的格式(cramfs/squashfs/ubifs/jffs2/ext2等)和壓縮格式(gzip/bzip2/lzma等),最后生成rootfs.tar文件。

編譯

make menuconfig 配置buildroot以及其他組建的配置選項,在根目錄生成.config配置文件

make 編譯

make BR2_JLEVEL=N 編譯每個單獨的package時啟用多線程編譯 (不能用make -jN命令)

編譯生成的文件位於output目錄下,其中output/images目錄存放最終的鏡像文件,比如內核鏡像、bootloader鏡像以及根文件系統鏡像等;output/build目錄是編譯目錄; output/staging目錄包含了根文件系統的層次結構,但是它不是真正的根文件系統;output/target目錄存放了幾乎完整的根文件系統文件,除了/dev下的設備節點,同時也沒有正確的讀寫權限,真正的根文件系統鏡像位於output/images下; output/host下包含了主機需要的工具。

 

 常用命令

make help 查看幫助信息

make show-targets 查看全部編譯目標

make V=1 <target> 顯示編譯時執行的所有命令

make <pkg-target> 編譯指定目標

make <pkg-target>-rebuild 重新編譯指定目標

make O=/tmp/build 指定輸出目錄

make UCLIBC_CONFIG_FILE=/my/uClibc.config 指定uClibc配置

make BUSYBOX_CONFIG_FILE=/my/busybox.config 指定busybox配置

make list-defconfigs 顯示擁有默認配置的單板列表

make busybox-menuconfig

make linux-menuconfig

make uclibc-menuconfig

make barebox-menuconfig

make uboot-menuconfig

make clean

make distclean 同時清除配置文件

make clean all 完整的重新編譯

生成幫助手冊,當前在docs/manual下,編譯生成的在output/dosc/manual下

make manual-clean

make manual

make -s printvars 顯示內部編譯變量

make graph-depends 圖形化查看依賴關系

make <pkg>-graph-depends 查看某個package的依賴關系

 

init進程

init進程是內核加載的第一個用戶空間的進程,PID為1,負責加載用戶空間的服務和程序。Buildroot提供了三種init的解決方案:

1) Busybox 使能BR2_INIT_BUSYBOX選項,啟動時讀取/etc/inittab(默認inittab文件位於buildroot/system/skeleton/etc/inittab),inittab除了做一些簡單的任務和文件系統掛載之外,還負責加載/etc/init.d/rcS腳本(主要的任務都在該腳本中實現),此外,還負責加載getty程序(提供login功能)

Busybox

通過設置BR2_PACKAGE_BUSYBOX_CONFIG可以指定busybox配置文件(在busybox源碼包下通過make menuconfig可以生成自定義配置文件,也可以在buildroot根目錄執行make busybox-menuconfig命令創建配置文件)

uClibc

同busybox配置一樣,也可以通過BR2_UCLIBC_CONFIG指定uClibc配置,或者通過make uclibc-menuconfig生成

Linux Kernel

通過BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG指定默認內核配置文件,可以通過在buildroot根目錄執行make linux-menuconfig命令或者在linux內核源碼根目錄執行make menuconfig生成配置文件

U-Boot

通過BR2_TARGET_UBOOT_USE_CUSTOM_CONFIG指定uboot默認配置文件,在buildroot根目錄執行make uboot-menuconfig或者在uboot源碼根目錄執行make menuconfig生成配置文件

 

Package

make <package>-<target>

 Buildroot對單個package的處理過程通常包括:下載tarball,解壓,配置,編譯,安裝。源碼解壓到output/build/<package>-<version>目錄,這是個臨時目錄,當執行make clean命令時,該目錄會被刪除,下一次執行make時重新創建。

但是,如果我們希望自己指定源代碼,比如內核源碼,上述方式就不適用,因為我們無法實現代碼的修改和修改記錄的保存。針對這種情況,buildroot給我們提供了<pkg>_OVERRIDE_SRCDIR機制,buildroot首先讀取override文件,如果用戶指定了特定package的代碼路徑,就不去執行下載tarball和解壓的操作。該override文件默認為buildroot根目錄的local.mk文件,也可以通過BR2_PACKAGE_OVERRIDE_FILE指定override文件。

在override文件中,buildroot希望找到如下的行:

<pkg1>_OVERRIDE_SRCDIR = /path/to/pkg1/sources
<pkg2>_OVERRIDE_SRCDIR = /path/to/pkg2/sources

比如

LINUX_OVERRIDE_SRCDIR=/home/bob/linux/

BUSYBOX_OVERRIDE_SRCDIR=/home/bob/busybox/

編譯的時候,buildroot會用rsync命令從<pkg>_OVERRIDE_SRCDIR目錄拷貝源碼到output/build/<package>-custom目錄,可以使用make <pkg>-rebuild和make <pkg>-reconfigure命令,或者make <pkg>-rebuild all。

 

根文件系統定制

buildroot最常用的功能是創建根文件系統,所以重點記錄根文件系統的定制,包括:

1) 添加或者覆蓋文件(BR2_ROOTFS_OVERLAY)

2) 修改或者刪除文件(BR2_ROOTFS_POST_BUILD_SCRIPT)

3) 在創建根文件系統之前執行特定的命令(BR2_ROOTFS_POST_BUILD_SCRIPT)

4) 設置權限和屬組關系(BR2_ROOTFS_DEVICE_TABLE)

5) 添加指定的設備節點(BR2_ROOTFS_STATIC_DEVICE_TABLE)

6) 添加用戶賬戶(BR2_ROOTFS_USERS_TABLES)

7) 生成文件系統之后執行特定的命令(BR2_ROOTFS_POST_IMAGE_SCRIPT)

8) 給指定的package打補丁(BR2_GLOBAL_PATCH_DIR)

9) 添加工程指定的packages

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM