教你用 buildroot 構建根檔案系統
導讀 | 如果想要構建完整的根檔案系統,大家一般都是使用buildroot,它不僅包含了 busybox 的功能,而且裡面還整合了各種軟體,需要什麼軟體就選擇什麼軟體,不需要我們去移植。 |
嵌入式系統三大部分:bootloader(uboot)、 核心、根檔案系統。
製作根檔案系統有三大神器:busybox、buildroot、yocto。
使用 busybox 構建檔案系統,僅僅只是幫我們構建好了一些常用的 和檔案,像 lib 庫、/etc 目錄下的一些檔案都需要自己手動建立,我們還要自己去移植一些第三方軟體和庫,比如 alsa、iperf、mplayer 等等。而且 busybox 構建的根檔案系統預設沒有使用者名稱和密碼設定。
如果想要構建完整的根檔案系統,大家一般都是使用buildroot,它不僅包含了 busybox 的功能,而且裡面還整合了各種軟體,需要什麼軟體就選擇什麼軟體,不需要我們去移植。buildroot 極大的方便了我們嵌入式 Linux 開發人員構建實用的根檔案系統。
至於 yocto 構建根檔案系統,過於複雜,需要時間也很久,我們一般不會選擇這一種方式。
buildroot 原始碼肯定是要從 buildroot 官網下載,官網地址為 。
下載後解壓如圖:
buildroot 和 uboot、Linux kernel 一樣也支援圖形化配置,輸入如下 即可開啟圖形化配置界:
make menuconfig
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
此配置項用於配置交叉編譯工具鏈,設定為我們自己所使用的交叉編譯器,必須是絕對路徑。
目前,在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) //選中
用於設定一些系統配置,比如開發板名字、歡迎語、使用者名稱、密碼等。
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
此選項配置我們最終制作的根檔案系統為什麼格式的,配置如下:
-> 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
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 選項!
此選項用於配置要選擇的第三方庫或軟體、比如 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 的,既然用到了 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 根檔案系統構建
- 根檔案系統簡介與BusyBox構建根檔案系統
- F1c200s使用buildroot構建根檔案系統後程式無法執行UI
- i.MX6ULL終結者Linux檔案系統的構建BusyBox構建根檔案系統Linux
- i.MX6ULL終結者Linux檔案系統的構建根檔案系統目錄介紹Linux
- rootfs -根檔案系統製作
- Linux雜記-根檔案系統Linux
- 構建dubbo分散式平臺-maven構建根專案分散式Maven
- 檔案管理系統助力檔案資訊化建設
- ubifs根檔案系統掛載失敗可能原因
- Linux核心啟動之根檔案系統掛載Linux
- 二、Linux檔案系統結構Linux
- ROS架構(三)——檔案系統ROS架構
- 系統 boot 和執行根檔案系統中的命令特別重要boot
- Linux 根檔案系統的移植(從入門到精通)Linux
- NLPIR系統自動構建知識圖譜核查招標檔案
- 為媒體資產構建一個雲原生的檔案系統
- 樹莓派使用buildroot生成系統映象樹莓派UI
- Linux下的檔案系統結構Linux
- 檔案系統的物理結構分配
- Linux檔案系統目錄結構Linux
- HDFS架構指南(分散式系統Hadoop的檔案系統架構)架構分散式Hadoop
- Linux系統篇-檔案系統&虛擬檔案系統Linux
- 檔案和檔案系統
- Gradle 與 AGP 構建 API: 配置您的構建檔案GradleAPI
- 檔案系統
- Linux系統中有哪些比較重要的檔案系統結構?Linux
- 檔案系統(五):exFAT 檔案系統原理詳解
- Linux系統檔案系統及檔案基礎篇Linux
- 分散式檔案系統(HDFS)與 linux系統檔案系統 對比分散式Linux
- 檔案系統(十):一文看懂 UBI 檔案系統
- 【檔案系統】嵌入式檔案系統Fatfs簡介
- WIN10怎麼建立bat檔案 win10系統如何建bat檔案Win10BAT
- Qemu搭建ARM vexpress開發環境(三)----NFS網路根檔案系統Express開發環境NFS
- 列出並排序檔案系統根目錄(/)下各個目錄的大小排序
- debugfs檔案系統
- Linux檔案系統Linux
- FUSE檔案系統