教你用 buildroot 構建根檔案系統

大雄45發表於2021-07-02
導讀 如果想要構建完整的根檔案系統,大家一般都是使用buildroot,它不僅包含了 busybox 的功能,而且裡面還整合了各種軟體,需要什麼軟體就選擇什麼軟體,不需要我們去移植。

嵌入式系統三大部分:bootloader(uboot)、 核心、根檔案系統。

製作根檔案系統有三大神器:busybox、buildroot、yocto。

使用 busybox 構建檔案系統,僅僅只是幫我們構建好了一些常用的 和檔案,像 lib 庫、/etc 目錄下的一些檔案都需要自己手動建立,我們還要自己去移植一些第三方軟體和庫,比如 alsa、iperf、mplayer 等等。而且 busybox 構建的根檔案系統預設沒有使用者名稱和密碼設定。

如果想要構建完整的根檔案系統,大家一般都是使用buildroot,它不僅包含了 busybox 的功能,而且裡面還整合了各種軟體,需要什麼軟體就選擇什麼軟體,不需要我們去移植。buildroot 極大的方便了我們嵌入式 Linux 開發人員構建實用的根檔案系統。

至於 yocto 構建根檔案系統,過於複雜,需要時間也很久,我們一般不會選擇這一種方式。

buildroot 下載

buildroot 原始碼肯定是要從 buildroot 官網下載,官網地址為 。

下載後解壓如圖:
教你用 buildroot 構建根檔案系統教你用 buildroot 構建根檔案系統

buildroot 和 uboot、Linux kernel 一樣也支援圖形化配置,輸入如下 即可開啟圖形化配置界:

make menuconfig

教你用 buildroot 構建根檔案系統教你用 buildroot 構建根檔案系統

1、配置 Target options
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
2、配置 Toolchain

此配置項用於配置交叉編譯工具鏈,設定為我們自己所使用的交叉編譯器,必須是絕對路徑。

目前,在ARM Linux的開發中,人們趨向於使用Linaro( )工具鏈團隊維護的ARM工具鏈,它以每月一次的 形式釋出新的版本,編譯好的可執行檔案可從網址 downloads/ 下載。Linaro是ARM Linux領域中最著名最具技術成就的開源組織,其會員包括ARM、Broadcom、Samsung、TI、Qualcomm等,國內的海思、中興、全志和台灣的MediaTek 也是它的會員。

一個典型的ARM Linux工具鏈包含arm-linux-gnueabihf-gcc(後續工具省略字首)、strip、gcc、objdump、ld、gprof、nm、readelf、 addr2line等。字首中的“hf”顯 示該工具鏈是完全的硬浮點。

Toolchain 
  -> Toolchain type = External toolchain 
  -> Toolchain = Custom toolchain //使用者自己的交叉編譯器 
  -> Toolchain origin = Pre-installed toolchain //預裝的編譯器 
  -> Toolchain path =   //編譯器絕對路徑  
  -> Toolchain prefix = $(ARCH)-linux-gnueabihf //字首 
  -> External toolchain gcc version = 4.9.x 
  -> External toolchain kernel headers series = 4.1.x 
  -> External toolchain C library = glibc/eglibc  
  -> [*] Toolchain has SSP support? (NEW) //選中 
  -> [*] Toolchain has RPC support? (NEW) //選中 
  -> [*] Toolchain has C++ support? //選中 
  -> [*] Enable MMU support (NEW) //選中
3、配置 System configuration

用於設定一些系統配置,比如開發板名字、歡迎語、使用者名稱、密碼等。

System configuration 
 -> System hostname = Jasonangel //平臺名字,自行設定 
 -> System banner = Welcome to xxxxx //歡迎語 
 -> Init system = BusyBox //使用 busybox 
 -> /dev management = Dynamic using devtmpfs + mdev //使用 mdev 
 -> [*] Enable root login with password (NEW) //使能登入密碼 
  -> Root password = 123456 //登入密碼為 123456
4、配置 Filesystem images

此選項配置我們最終制作的根檔案系統為什麼格式的,配置如下:

-> Filesystem images 
 -> [*] ext2/3/4 root filesystem //如果是 EMMC 或 SD 卡的話就用 ext3/ext4 
  -> ext2/3/4 variant = ext4 //選擇 ext4 格式 
 -> [*] ubi image containing an ubifs root filesystem //如果使用 NAND 的話就用 ubifs
5、禁止編譯 Linux 核心和 uboot

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

-> Kernel  
 -> [ ] Linux Kernel //不要選擇編譯 Linux Kernel 選項!

接著禁止編譯 Uboot,配置如下:

-> Bootloaders  
-> [ ] U-Boot //不要選擇編譯 U-Boot 選項!
6、配置 Target packages

此選項用於配置要選擇的第三方庫或軟體、比如 alsa-utils、ffmpeg、iperf、ftp、ssh等工具,可以按需選擇。

配置完成以後就可以編譯 buildroot 了,編譯完成以後 buildroot 就會生成編譯出來的根檔案系統壓縮包,我們可以直接使用。輸入如下命令開始編譯:

sudo make //注意,一定要加 sudo,而且不能透過-jx 來指定多核編譯!!!

buildroot 編譯過程會很耗時,請耐心等待!編譯完成以後就會在 buildroot-2019.02.6/output/images 下生成根檔案系統,即可使用。

編譯過程需要一定的額外記憶體,注意需要留好記憶體,否則會報錯如下:

g++: internal compiler error: Killed (program cc1plus) 
Please submit a full bug report
buildroot 下的 busybox 配置

buildroot 在構建根檔案系統的時候也是要用到 busybox 的,既然用到了 busybox 那麼就涉及到 busybox 的配置。buildroot 會自動下載 busybox 壓縮包,buildroot 下載的原始碼壓縮包都存放在/dl 目錄下,在 dl 目錄下就有一個叫做“busybox”的資料夾,此目錄下儲存著 busybox 壓縮包。

在 buildroot下開啟 busybox 的配置介面輸入如下命令:

sudo make busybox-menuconfig

輸入以後就會開啟 buildroot 下的 busybox 配置介面,需要什麼功能,使能即可。可以在busybox中修改檔案,使其對中文支援,這一點可以百度設定。

編譯完畢以後,會生成 rootfs.tar,複製出來以後,可以對其進行解壓然後使用nfs掛載到板子上,或者直接使用SD卡燒錄。編譯出來的檔案系統即可使用,如果需要什麼命令和工具,在 make menuconfig 中使能再次編譯即可。

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2779351/,如需轉載,請註明出處,否則將追究法律責任。

相關文章