天天看點

Buildroot使用者指南

第一章        關于Buildroot

       Buildroot是一個包含Makefile和修補程式【patch】的集合,這個集合可以使你很容易的為你的目标建構交叉工具鍊【cross-compilationtoolchain】,根檔案系統【root filesystem】以及Linux核心映像【kernelimage】。Buildroot可以獨立的實作其中的一個或幾個功能。

       Buildroot對于從事嵌入式系統【embeddedsystems】開發的人很有幫助。通常嵌入式系統使用的處理器【processor】不同于在PC跑的x86架構的CPU。嵌入式系統可以使用IBM公司的PowerPC,可以是RISC指令的MIPS(包括龍芯II),也可以是ARM處理器,等等。

       編譯工具鍊【compilationtoolchain】是為你的作業系統編譯程式的工具的集合。主要包括編譯器【compiler】(比如說gcc),包括彙編器【assembler】和連結器【linker】的二進制工具集【binaryutils】(在我們的Linux系統中通常為binutils[1]),C标準類庫(比如GNU Libc[2]、uClibc[3] 或者dietlibc[4])。

       你用來做開發的電腦上安裝的OS通常已經包含一個預設的編譯工具鍊,通過它便已出來的程式可以在你的系統上運作。如果當你使用PC,你的編譯工具鍊工作在x86架構的處理器上,産生的程式也是在x86處理器上使用的。在大多數Linux系統中,交叉工具鍊采用GNU libc(glibc)[2]作為标準類庫。這種編譯工具鍊通常被稱為“主機編譯工具鍊【"hostcompilation toolchain】”。你用來做開發工作的電腦上跑的系統被稱作“主機系統【hostsystem】”。這個編譯工具鍊由你的Linux發行版【distribution】的作業系統自帶,而Buildroot則于你的作業系統無關(但使用Buildroot建立的交叉工具鍊和其他工具可以在你的主機系統執行)。

       正如前面所述,編譯工具鍊由你的系統所提供,運作在你的系統上,産生你系統所用處理器可以執行的代碼檔案。由于你的嵌入式系統的處理器通常與你的開發主機不同,你需要一個交叉編譯【cross-compilation】工具鍊,這工具鍊運作在你的開發主機上,但産生你的嵌入式目标主機(目标處理器)的可執行代碼。比如你的開發主機系統采用x86處理器,而你的嵌入式目标系統處理器是ARM的,普通的編譯工具鍊在你的開發主機上隻能産生x86處理器的執行代碼,而交叉編譯工具鍊則可以在你的開發主機上産生ARM處理器的可執行代碼。

       即使你的嵌入式系統上使用的同樣是x86處理器,你同樣可以使用Buildroot,因為以下兩個原因:

你開發主機上使用的編譯工具鍊GNU Libc是一個完整的C标準庫,但它很大。而在你的嵌入式目标系統上除了使用GNU Libc,你可以使用uClibc,它是一個裁剪的C标準庫,很小。當你想使用uClibc的時候,你需要一個編譯工具鍊使用它作為連結庫産生目标代碼。Buildroot可以為你做到這一點。

       Buildroot自動使用所用可能用到的工具(比如busybox[5])建構根檔案系統。與手動操作相比,更容易。

       由于你可以手動使用gcc、binutils、uClibc和其他工具進行編譯,你一定很好奇為什麼非得用Buildroot這個工具呢。你當然可以使用手動設定,但處理每一個配置選項以及由gcc或binutils版本所産生問題都是非常耗時和無聊的。Buildroot通過使用Makefile自動處理這些問題,而且還對任一個gcc和binutils版本都有更新檔集合以使得它可以在大多數Linux版本中工作。

       此外,Buildroot裡面提供了一個基礎結構,用于再現你建構核心交叉工具鍊和嵌入式根檔案系統的過程。當需要更新檔、更新或當其他人接手這個項目時,建構過程能夠重制是很有用處的。

       [1] 百度百科http://baike.baidu.com/view/1163670.htm

              GNUhttp://www.gnu.org/software/binutils/

              CSDNhttp://blog.csdn.net/yf24518150/article/details/4972632

       [2] 百度百科http://baike.baidu.com/view/1323132.htm

              GNUhttp://www.gnu.org/software/libc/libc.html

       [3] 嵌入式Linux

              百度百科http://baike.baidu.com/view/2946499.htm

              官網http://www.uclibc.org/

       [4] 輕量化的C标準函式庫,最新穩定版于2009年釋出

              官網http://www.fefe.de/dietlibc/

       [5] 百度百科http://baike.baidu.com/view/1429588.htm

              官網http://www.busybox.net/ 

第二章        擷取Buildroot 

       Buildroot的版本是大約每3個月更新一次。也可以直接Git[1]的連接配接和每日快照,如果你想要獲得最前沿的版本的話。

       可用版本位于:http://buildroot.net/downloads/

       最新的快照(snapshot)都位于:http://buildroot.net/downloads/snapshots/buildroot-snapshot.tar.bz2。而老的快照位于http://buildroot.net/downloads/snapshots/

       如果要使用Git下載下傳最新的Buildroot,你可以很簡單的使用“Accessing Git”網頁(http://buildroot.net/-git.html)所描述的規則。如果感到麻煩,可以使用快速方法:

[html] view plaincopy

  1. $ git clone git://git.buildroot.net/buildroot  

第三章        使用Buildroot

3.1 配置和一般使用方法

       Buildroot裡面有一個很好的配置工具,與Linux核心中或在Busybox中很類似。需要注意的是你可以(并且必須)使用普通使用者權限來建構一切,而沒有必要使用root權限配置和使用Buildroot。第一步運作配置助手(configuration assistant):

[html] view plaincopy

  1. $ make menuconfig  

來運作基于Cures的配置器,或者

[html] view plaincopy

  1. $ make xconfig  

[html] view plaincopy

  1. $ make gconfig  

來運作基于Qt或者GTK界面的配置器。

       所有這些“make”指令都需要建立一個配置實用程式(utility),是以你可能需要安裝“development”包配置所使用的實用程式的相關庫。對于Debian系列的系統,menuconfig接口需要libncurses5-dev包,而xconfig需要libqt4-dev包,gconfig則需要libglib2.0-dev、libgtk2.0-dev和libglade2-dev。

       對于在配置工具的每一個菜單項,你可以找到并進入相關的幫助說明。

       一旦配置完成,配置工具将産生一個.config檔案來存儲你的配置。它将被Makefile所使用。

       下一步我們做:

[html] view plaincopy

  1. $ make  

       你絕不可以對Buildroot使用make –jN:它不支援頂級并行make(top-level parallel make)。但是你可以使用BR2_JLEVEL選項來告訴Buildroot對每個包的編譯使用make –jN。

       通常,此指令将執行以下步驟:

              按照需要下載下傳源檔案;

              如果使用内部(internal)工具鍊則,配置、建立和安裝交叉編譯工具鍊;如果外部(external)工具鍊被用到則導入;

              建立和安裝被選中的目标包;

              如果被選擇的話,創核心鏡像;

              如果被選擇的話,建立bootloader;

              如果選中建立格式,建立根檔案系統。

繼續閱讀