第一章? ? ? ? 關于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
- $ git clone git://git.buildroot.net/buildroot ?
第三章? ? ? ? 使用Buildroot
3.1 配置和一般使用方法
?? ? ? Buildroot里面有一個很好的配置工具,與Linux內核中或在Busybox中很類似。需要注意的是你可以(并且必須)使用普通用戶權限來構建一切,而沒有必要使用root權限配置和使用Buildroot。第一步運行配置助手(configuration assistant):
[html] view plaincopy
- $ make menuconfig ?
來運行基于Cures的配置器,或者
[html] view plaincopy
- $ make xconfig ?
或
[html] view plaincopy
- $ 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
- $ make ?
?? ? ? 你絕不可以對Buildroot使用make –jN:它不支持頂級并行make(top-level parallel make)。但是你可以使用BR2_JLEVEL選項來告訴Buildroot對每個包的編譯使用make –jN。
?? ? ? 通常,此命令將執行以下步驟:
? ? ? ? ? ? ? 按照需要下載源文件;
? ? ? ? ? ? ? 如果使用內部(internal)工具鏈則,配置、創建和安裝交叉編譯工具鏈;如果外部(external)工具鏈被用到則導入;
? ? ? ? ? ? ? 創建和安裝被選中的目標包;
? ? ? ? ? ? ? 如果被選擇的話,創內核鏡像;
? ? ? ? ? ? ? 如果被選擇的話,創建bootloader;
? ? ? ? ? ? ? 如果選中創建格式,創建根文件系統。