buildroot構(gòu)建根文件系統(tǒng)

一、簡介

Buildroot是Linux平臺(tái)上一個(gè)構(gòu)建嵌入式Linux系統(tǒng)的框架。整個(gè)Buildroot是由Makefile腳本和Kconfig配置文件構(gòu)成的。本文使用buildroot為freescale imx287 開發(fā)板制作根文件系統(tǒng)。
參考 https://www.cnblogs.com/kele-dad/p/8231434.html

1.buildroot目錄說明

.
├── arch: 目錄存放CPU架構(gòu)相關(guān)的配置腳本,如arm/mips/x86 ,這些CPU相關(guān)的配置,在制作工具鏈,編譯boot和內(nèi)核時(shí)很關(guān)鍵。
├── board:存放了一些默認(rèn)開發(fā)板的配置補(bǔ)丁之類的
├── boot
├── CHANGES
├── Config.in
├── Config.in.legacy
├── configs: 放置開發(fā)板的一些配置參數(shù). 
├── COPYING
├── DEVELOPERS
├── dl: 存放下載的源代碼及應(yīng)用軟件的壓縮包. 
├── docs: 存放相關(guān)的參考文檔. 
├── fs: 放各種文件系統(tǒng)的源代碼. 
├── linux: 存放著Linux kernel的自動(dòng)構(gòu)建腳本. 
├── Makefile
├── Makefile.legacy
├── output: 是編譯出來的輸出文件夾. 
│   ├── build: 存放解壓後的各種軟件包編譯完成後的現(xiàn)場.
│   ├── host: 存放著製作好的編譯工具鏈,如gcc、arm-linux-gcc等工具.
│   ├── images: 存放著編譯好的uboot.bin, zImage, rootfs等鏡像文件,可燒寫到板子裏, 讓linux系統(tǒng)跑起來.
│   ├── staging
│   └── target: 用來製作rootfs文件系統(tǒng),裏面放著Linux系統(tǒng)基本的目錄結(jié)構(gòu),以及編譯好的應(yīng)用庫和bin可執(zhí)行文件. (buildroot根據(jù)用戶配置把.ko .so .bin文件安裝到對應(yīng)的目錄下去,根據(jù)用戶的配置安裝指定位置)
├── package:下面放著應(yīng)用軟件的配置文件,每個(gè)應(yīng)用軟件的配置文件有Config.in和soft_name.mk。
├── README
├── support
├── system:這里就是根目錄的主要骨架和相關(guān)的啟動(dòng)初始化配置,當(dāng)制作根目錄時(shí)就是將此處的文件cp到output里去.然后再安裝toolchain的動(dòng)態(tài)庫和你勾選的package的可執(zhí)行文件之類的.
└── toolchain

2.buildroot工作原理

Buildroot本身提供構(gòu)建流程的框架,開發(fā)者按照格式寫腳本,提供必要的構(gòu)建細(xì)節(jié),配置整個(gè)系統(tǒng),最后自動(dòng)構(gòu)建出你的系統(tǒng)。

  • buildroot的編譯流程是先從dl/xxx.tar下解壓出源碼到output/build/xxx, 然后它利用本身的配置文件(如果有的話)覆蓋output/build/xxx下的配置文件,在開始編譯連接完成后安裝到output/相應(yīng)文件夾下.
  • Buildroot提供了函數(shù)框架和變量命令框架,采用它的框架編寫的app_pkg.mk這種Makefile格式的自動(dòng)構(gòu)建腳本,將被package/pkg-generic.mk 這個(gè)核心腳本展開填充到buildroot主目錄下的Makefile中去。
  • package/pkg-generic.mk中通過調(diào)用同目錄下的pkg-download.mk、pkg-utils.mk文件,已經(jīng)幫你自動(dòng)實(shí)現(xiàn)了下載、解壓、依賴包下載編譯等一系列機(jī)械化的流程。你只要需要按照格式寫Makefile腳app_pkg.mk,填充下載地址,鏈接依賴庫的名字等一些特有的構(gòu)建細(xì)節(jié)即可。

3.iMX287開發(fā)板硬件說明

1.主板外觀及基本接口分布

?
image

2.硬件資源

image

二、構(gòu)建步驟

1.下載buildroot

git clone git://git.busybox.net/buildroot

2.配置buildroot

查看buildroot包含的開發(fā)板配置

make list-defconfigs

選擇imx28默認(rèn)配置

cd buildroot
make freescale_imx28evk_defconfig

進(jìn)入menuconfig逐項(xiàng)配置

make menuconfig
image
  • Target options(目標(biāo)配置)

    • Target Architecture:目標(biāo)架構(gòu),這里選擇 ARM(little endian),ARM小端模式
    • Target Binary Format:二進(jìn)制格式,為 ELF
    • Target Architecture Variant:架構(gòu)變體為 arm920t,內(nèi)核類型
    • Target ABI:應(yīng)用程序二進(jìn)制接口,為EABI
    • Floating point strategy:浮點(diǎn)數(shù)的策略,選擇為 Soft float
    • ARM instruction set:arm 匯編指令集,選擇 ARM
  • Build options(編譯選項(xiàng))

    對編譯過程進(jìn)行一些設(shè)置,通常用默認(rèn)設(shè)置即可。

  • Toolchain(工具鏈)

    使用內(nèi)部工具鏈。

    也可以手動(dòng)選擇Kernel Header版本和外部工具鏈。

    注意:實(shí)際測試發(fā)現(xiàn),根文件系統(tǒng)與內(nèi)核使用不同版本的交叉工具鏈編譯,得到的根文件系統(tǒng)鏡像文件也可以與內(nèi)核鏡像搭配運(yùn)行。

  • System configuration(系統(tǒng)配置)

    對目標(biāo)系統(tǒng)進(jìn)行配置,包括主機(jī)名稱(System hostname)、歡迎旗標(biāo)(System banner)、初始化系統(tǒng)(Init system)、設(shè)備管理方式(/dev management)、登錄方式和 Shell 等。

    “Run a gretty after root”需要根據(jù)硬件進(jìn)行設(shè)置,必須與系統(tǒng)調(diào)試串口對應(yīng)。 EasyARM28x 使用默認(rèn)的 console 即可。

  • kernel和bootloaders配置

    內(nèi)核定制裁剪以及 Bootloader 的定制,建議獨(dú)立管理, Kernel 和 Bootloaders 這兩項(xiàng)留空即可。

  • Target Packages(軟件包)

    Buildroot 提供了海量軟件包可選,只需在配置界面選中所需要的軟件包,交叉編譯后即可使用。

    Busybox是必選。

  • Filesystems images(文件系統(tǒng)鏡像選擇)

    可以設(shè)置生成的文件系統(tǒng)鏡像類型 ,如.tar、cpio、ext2/3/4、 jffs2、 yaffs2 和 ubifs 等多種方式 。

    如果要生成ubifs,需要知道芯片邏輯擦除塊大小、最小IO單元(頁大小)、可用物理擦除塊數(shù)量(PEB)??梢栽趗boot環(huán)境下,執(zhí)行如下命令得知:

    > mtpart default
    > ubi part rootfs
    

3.編譯buildroot

make

編譯完成,在 output 目錄下可以得到生成的文件系統(tǒng)和鏡像文件

$ ls output/
build host images staging target

在images目錄下有燒錄鏡像文件

4.完善文件系統(tǒng)

1)增加/dev/null 文件

Buildroot 編譯后,生成的文件系統(tǒng)中通常沒有/dev/null 文件,而系統(tǒng)啟動(dòng)通常是需要的,可以自行創(chuàng)建:

cd output/target/dev/
sudo mknod null c 1 3

2)增加/dev/console文件

對應(yīng)于System configuration-“Run a gretty after root”選擇的調(diào)試端口

cd output/target/dev/
sudo mknod console c 5 1

3)再次編譯builtroot

make

三、使用根文件系統(tǒng)

將生成的rootfs.tar.bz2文件或rootfs.ubifs文件燒錄到處理器,進(jìn)入系統(tǒng)后即可以通過shell命令操作,已有的shell命令參考o(jì)utput/bin/目錄下的鏈接文件。

開機(jī)成功進(jìn)入根文件系統(tǒng)

1.登錄

因?yàn)樵赟ystem configuration中把root passwd設(shè)置為root,所以用戶名和密碼都是root。

2.系統(tǒng)信息查看

  • 查看內(nèi)核版本:cat /proc/version
  • 查看內(nèi)存使用:free
  • 查看磁盤使用:df -m
  • 查看CPU信息:cat /proc/cpuinfo

3.網(wǎng)絡(luò)設(shè)置

  • 修改IP地址:ifconfig eth0 192.168.181.251

  • 設(shè)置默認(rèn)網(wǎng)關(guān):route add default gw 192.168.181.1

  • 設(shè)置子網(wǎng)掩碼:ifconfig eth0 netmask 255.255.255.0

  • 設(shè)置廣播地址:ifconfig eth0 broadcast 192.168.181.225

  • 修改mac地址:ifconfig eth0 hw ether 00:11:22:33:44:55

  • 設(shè)置DNS:vi /etc/resolv.conf 修改后保存 #設(shè)置好DNS才能解析域名

    nameserver 8.8.8.8 #修改成你的主DNS
    nameserver 8.8.4.4 #修改成你的備用DNS
    search localhost #你的域名
    
  • 開機(jī)自動(dòng)設(shè)置網(wǎng)絡(luò)參數(shù):vi /etc/rc.d/init.d/start_userapp 將上述命令加入文件中

  • 關(guān)閉/開啟網(wǎng)關(guān):

    • fconfig eth0 down
    • ifconfig eth0 up
  • 設(shè)置動(dòng)態(tài)獲取ip地址:udhcpc #重啟后無效

  • 外網(wǎng)ping測試:ping www.baidu.com

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容