buildroot使用總結


一、buildroot使用步驟

1、構建圖形配置界面
make menuconfig

編譯出圖形配置界面,如下圖所示:

image

2、配置Target options

​ 在該項下,主要有以下配置選項:

image

這里以ARM contex-A7型處理器為例,配置選項如下:

Target options
-> Target Architecture												= ARM (little endian)
-> Target Binary Format											= ELF
-> Target Architecture Variant								= cortex-A7
-> Target ABI																 = EABIhf
-> Floating point strategy                                		 = NEON/VFPv4
-> ARM instruction set                                              = ARM
3、配置Build options

​ 這項是為build選擇特性和參數。特性有:build-in、modularized、ignored。

4、配置Toolchain

image

5、配置 System configuration
6、配置 Filesystem images。

​ 此選項配置我們最終制作的根文件系統為什么格式的

7、禁止編譯 Linux 內核和 uboot

buildroot 不僅僅能構建根文件系統,也可以編譯 linux 內核和 uboot。當配置 buildroot,使

能 linux 內核和 uboot 以后 buildroot 就會自動下載最新的 linux 內核和 uboot 源碼並編譯。但是
我們一般都不會使用 buildroot 下載的 linux 內核和 uboot,因為 buildroot 下載的 linux 和 uboot
官方源碼,里面會缺少很多驅動文件,而且最新的 linux 內核和 uboot 會對編譯器版本號有要
求,可能導致編譯失敗。因此我們需要配置 buildroot,關閉 linux 內核和 uboot 的編譯,只使用
buildroot 來構建根文件系統,首先是禁止 Linux 內核的編譯

8、編譯
sudo make -j12

編譯完成后如下圖

image

等待編譯完成,編譯完成以后就會在 buildroot-2021.02.3/output/images 下生成根文件系統。

9、測試文件系統

​ nfs掛載根文件系統,測試:

image

10、buildroot使用總結

​ 對於buildroot的使用步驟與linux內核 、u-boot以及busybox等的過程是幾乎一樣的。重要還是對Target packages 第三方軟件和庫的配置上。

二、問題總結
(2-1)啟動后命令行命令提示符一直為“#”

【問題描述】

使用構建的根文件系統啟動以后會發現,輸入命令的時候命令行前面一直都是“#”,如果我們進入到某個目錄的話前面並不會顯示當前目錄路徑。


PS1 變量是用於設置命令提示符格式,可選參數含義如下圖所示:

\! 顯示該命令的歷史記錄編號。
\# 顯示當前命令的命令編號。
\$ 顯示$符作為提示符,如果用戶是 root 的話,則顯示#號。
\\ 顯示反斜杠。
\d 顯示當前日期。
\h 顯示主機名。
\n 打印新行。
\nnn 顯示 nnn 的八進制值。
\s 顯示當前運行的 shell 的名字。
\t 顯示當前時間。
\u 顯示當前用戶的用戶名。
\W 顯示當前工作目錄的名字。
\w 顯示當前工作目錄的路徑

【解決方法】

打開/etc/profile 文件,找到如下所示內容,然后將其屏蔽掉:

#if [ "$PS1" ]; then
#	if [ "`id -u`" -eq 0 ]; then
#		export PS1='# '
#	else
#		export PS1='$ '
#	fi
#fi

添加如下代碼:

PS1='[\u@\h]:\w$:'
export PS1
(2-2)工具鏈中Gcc版本和kernel headers series版本選擇問題

【問題描述】

​ 如下圖所示,在選擇工具鏈時需要選擇gcc的版本和kernel header series版本

image

​ 如果選擇不合適,將會出現以下類似的錯誤提示信息,並終止編譯過程:

Incorrect selection of gcc version: expected 7.x, got 5.5.0
Incorrect selection of kernel headers: expected ....

【原因分析及解決方法】

原因是在交叉編譯器路徑下有一個內核版本代碼,buildroot在執行check-kernel-headers.sh時會檢測這這個內核版本代碼。

描述文件路徑為:工具路徑/gcc-linaro-5.5.0-2017.10-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/usr/include/linux/version.h

#define LINUX_VERSION_CODE 263680 //263680 = 40600(h)

所以應該選擇kernel headers series的版本為:4.6.x

所以如果需要選擇對應的kernel header series版本,需要計算出LINUX_VERSION_CODE。


免責聲明!

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



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