toolchain設置
進入Toolchain選項:
Toolchain —>
Toolchain type (External toolchain) —> (設定採用自己定義的交叉編譯工具)
Toolchain (Custom toolchain) —>
Toolchain origin (Pre-installed toolchain) —>(預先安裝了交叉編譯工具)
(/opt/FriendlyARM/toolchain/4.9.3/) Toolchain path (設定自定義交叉編譯工具的路徑)
($(ARCH)-linux) Toolchain prefix (設置toolchain的前綴)
External toolchain gcc version (4.9.x) —>(設置toolchain的版本)
External toolchain kernel headers series (3.10.x) —> (最好選用與平臺所用的linux版本一致的headers,具體還要看交叉編譯工具是否支持)
External toolchain C library (glibc/eglibc) —> (選擇自定義交叉編譯工具所用的C庫)
[* ] Toolchain has SSP support? (根據報錯選上的)
[* ] Toolchain has RPC support? (根據報錯選上的)
[*] Toolchain has C++ support? (支持C++)
我的toolchain版本是4.9.3,Linux header可以自行查看:就在version.h裏,199261是十進制,換成十六進制即可發現是3.10版本
Target options設置
Target options —>
Target Architecture (ARM (little endian)) —>(小端模式)
Target Binary Format (ELF) —>(二進制格式是ELF)
Target Architecture Variant (cortex-A7) —>(我的板子CPU是a7)
Target ABI (EABIhf) —> (支持EABIhf)
Floating point strategy (VFPv4-D16) —> (浮點處理採用VFP-v4)
ARM instruction set (Thumb2) —> (採用精簡指令集Thumb2)
這部分是按自己的板子來設置的:
System configuration設置
System configuration —>
(buildroot) System hostname (設置主機名)
(Welcome to Buildroot) System banner (輸入歡迎語)
Init system (BusyBox) —>
/dev management (Dynamic using devtmpfs + mdev) —>(使用mdev動態加載設備節點的方式,devtmpfs是Linux內核中的一個虛擬文件系統,需要啓用內核配置選項: CONFIG_DEVTMPFS和CONFIG_DEVTMPFS_MOUNT)
() Root password(進入linux控制檯終端後的密碼)
[*] remount root filesystem read-write during boot(可以進行動態的掛載)
Run a getty (login prompt) after boot —>
(console) TTY port(設置成串口登陸的設備節點)
Baudrate (115200) —> (設置波特率)
Filesystem images設置
Filesystem images —>
[*] ext2/3/4 root filesystem
ext2/3/4 variant (ext4) —>
[*] tar the root filesystem
Compression method (no compression) —>
kernel相關設置
Kernel—>
[] Linux Kernel 不選不編譯
Target packages設置
Target packages —> : 按自己需求增加或裁剪Target packages,裏面包含了一大堆第三方的開源工具和庫,包括常用的busybox的選用、音頻、網絡等。一切都是按自己需求來配置。
在許多程序中,BusyBox具有基本init程序的實現,這對於大多數嵌入式系統來說已經足夠了。啓用BR2_INIT_BUSYBOX將確保BusyBox將構建和安裝其init程序。這是Buildroot中的默認解決方案。BusyBox init程序將/etc/inittab在啓動時讀取文件以瞭解如何操作。
配置完所有內容後,配置工具將生成.config包含整個配置的 文件。該文件將由頂級Makefile讀取。
要開始構建過程,只需運行:
make
編譯過程中要聯網,因爲可能需要下載一些packages。
編譯後生成的文件夾格式的rootfs在buildroot/output/images/rootfs.tar。先創建一個文件夾作爲根文件目錄,我們將rootfs.tar解壓到這個文件內,得到的就是一個完整的可以工作的文件夾形式的rootfs了
你永遠不應該使用make -jN與Buildroot裏面:目前不支持頂級並行make。相反,使用該BR2_JLEVEL選項告訴Buildroot運行每個包的編譯make -jN。
Buildroot輸出存儲在一個目錄中output/。該目錄包含幾個子目錄:
images/其中存儲了所有images(內核 image,引導加載程序和根文件系統 image)。這些是您需要放在目標系統上的文件。
ibuild//構建所有組件的位置(包括主機上Buildroot所需的工具和爲目標編譯的包)。該目錄包含每個組件的一個子目錄。
staging/其中包含類似於根文件系統層次結構的層次結構。此目錄包含交叉編譯工具鏈的標頭和庫以及爲目標選擇的所有用戶空間包。但是,此目錄不是目標的根文件系統:它包含許多開發文件,未被剝離的二進制文件和庫,這使得它對於嵌入式系統來說太大了。這些開發文件用於編譯依賴於其他庫的目標庫和應用程序。
target/它幾乎包含了目標的完整根文件系統:除了/ dev /中的設備文件外,所有需要的東西都存在(Buildroot無法創建它們,因爲Buildroot不以root身份運行,也不想以root身份運行)。此外,它沒有正確的權限(例如busybox二進制文件的setuid)。因此,不應在目標上使用此目錄 。相反,您應該使用images/目錄中內置的一個圖像。如果需要提取的根文件系統映像以通過NFS引導,則使用生成的tarball映像images/並以root身份提取它。相比staging/,target/ 僅包含運行所選目標應用程序所需的文件和庫:開發文件(標題等)不存在,二進制文件被剝離。
host/ 包含爲正確執行Buildroot所需的爲主機編譯的工具的安裝,包括交叉編譯工具鏈。
其中每次開機都要登錄,太麻煩了,我們修改根文件系統:
vi etc/inittab
將
console::respawn:/sbin/getty -L console 115200 vt100 # GENERIC_SERIAL
這一行註釋掉,替換成:
console::respawn:-/bin/sh
保存重啓即可。