歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Buildroot自動化交叉編譯工具

Buildroot自動化交叉編譯工具

日期:2017/3/1 9:07:38   编辑:Linux編程

Buildroot簡介

Buildroot就是一個自動化生成交叉編譯工具的工具,記得當年我搭建自己的ARM交叉編譯器的時候,花了很大力氣和時間,最好因為各種錯誤而無奈放棄了,最後還是用別人的交叉編譯器,不曾想到有這麼有個好用的工具出現,它大大縮減了生成交叉編譯器的難度,讓嵌入式開發變得更加輕松,讓精力花到刀刃上。除了提供自動生成的交叉編譯工具外,他還提供了很多選項,例如應用軟件的安裝,例如vsftp,ssh等。這麼好的工具,要一天寫完,比較困難,分開一點點弄吧。

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

說明文檔:http://buildroot.uclibc.org/downloads/buildroot.html

下載Buildroot:http://buildroot.NET/downloads/

安裝Buildroot與簡單配置命令

yum install gcc build-essential bison flex gettext tcl sharutils libncurses-dev zlib1g-dev exuberant-ctags g++ texinfo patch vim libtool //升級一下系統的包

make menuconfig //主菜單配置
make busybox-menuconfig //busybox配置菜單
make ctng-menuconfig //交叉編譯工具配置菜單
make source //下載所有源碼包,不安裝

菜單選項有很多,就不一一介紹了。需要關注的配置地方,主要是

Target Architecture

Target Architecture Variant

交叉編譯工具的所采用的系統頭文件版本。這些都需要根據自己目標板來配置。

配置完畢make後,編譯完成。

PS:實在不會配置,可以參考buildroot根目錄下的config文件夾,裡面存放著arm,x86和MIPS等架構的經典配置,可以再這個基礎上裁剪

Buildroot目錄簡介

就主要目錄簡單介紹一下

/dl 存放下載的源碼包

/toolchain 放置編譯交叉工具的配置文件與源代碼

/fs/ 主要存放各種文件系統的源代碼

/fs/skeleton 存放骨架,第一次生成文件系統鏡像的地方

/Linux linux源碼存放地方

/configs 預先放置了一些開發板的配置參考,有arm,X86和MIPS等,還發現了我的入門開發板Mini2440,亮瞎眼了。。

/board 發現友善之臂的配置文件

/boot bootloader的一些配置,可以通過配置下載源碼

/package 主要存放應用軟件的配置文件,未來開發的主戰場,可以通過配置其文件,增加源碼包或者刪減,利用 buildroot來實現交叉編譯

/Output 編譯的生成目錄

/Output/images 編譯生成鏡像

/Output/build 編譯的源碼包,buildroot從dl的包解壓縮到build裡面,然後再編譯

/Output/staging 這個目錄非常重要,它提供了交叉編譯依賴的庫,一般進行make的時候,都會利用staging的庫文件進行鏈接

/Output/target 嵌入式設備下的根文件系統,裡面是我們實際燒寫的根文件系統鏡像

/Output/host 交叉編譯工具位置如arm-linux-gc

/Output/toolchain 第三方交叉編譯工具位置,我的目錄是空的。

從目錄發現buildroot,只要合理使用buildroot完全可以從bootloader開發到QT圖像界面應用程序,筆者,手上的幾塊開發板也是使用buildroot來實現文件系統和應用軟件服務的。

Buildroot的執行流程

1.下載源代碼文件

2.配置,編譯和安裝交叉編譯器,或者導入第三方的交叉編譯器

3.編譯和安裝所選擇的源碼包

4.編譯內核

5.編譯bootloader

6.編譯根文件系統並打包成相應鏡像。

如何重新編譯軟件包

經過第一次完整編譯後,如果我們需要對源碼包重新配置,我們不能直接在buildroot上的根目錄下直接make,buildroot是不知道你已經對源碼進行重新配置,它只會將第一次編譯出來的文件,再次打包成根文件系統鏡像文件。不過,我們可以通過以下兩個方法修改源碼的配置。

1. 直接刪除源碼包,例如我們要重新編譯openssh,那麼可以直接刪除output/build/openssh-vesion 文件夾,那麼當你make的時候,他就會自動從dl文件夾下,解壓縮源碼包,並重新安裝

2. 也是以openssh為例子,如果我們不想重新編譯,只想重新配置,也就是./configure,

•我們可以直接刪除 output/build/openssh-version 目錄下的 .stamp_configured

•如果你只是想重新安裝可以刪除.stamp_target_install

•重新make可以刪除.stamp_built

如何buildroot外面使用buildroot的交叉編譯器

交叉編譯器的路徑在Output/host目錄下,你可以使用arm-Linux-gcc ,arch-linux-objdump等等,雖然看上去非常美好的,但筆者時候的時候卻是非常難受,因為當移植一個軟件的時候,你需要編譯的東西,可能不僅僅是一個源碼包,這個軟件可能需要到另外一個源碼包的庫,而這個源碼包更可能需要其他的庫,結果到最後,編譯的包各種多,如果你對庫依賴熟悉還好,不熟悉的情況,實在讓人頭痛,這種方法,筆者不太推薦,buildroot的優勢有點類似在CentOS下的YUM,大部分的包,他都能夠識別依賴,你需要的庫,只要選上,基本編譯就不成問題了,如果實在不行,你稍微制定路徑就可以,路徑一般在/output/host/usr/ARCH-unknown-linux-gnu/sysroot/usr下,這個目錄相當於交叉編譯的編譯環境,他提供了很多庫依賴,減輕了很多移植工作,buildroot的強大之處。

Copyright © Linux教程網 All Rights Reserved