本章介紹 Buildroot 固件的編譯使用。
下載repo工具:
下載 Linux-SDK:
-
方法一
mkdir linux-sdk cd linux-sdk # 初始化repo倉庫 ../repo/repo init --repo-url https://github.com/FireflyTeam/repo.git -u https://github.com/FireflyTeam/manifests.git -b linux-sdk -m rk3399/rk3399_linux_release.xml # 同步源碼 ../repo/repo sync -c
-
方法二
下載Linux_SDK.7z
# 把壓縮包放在上一步下載repo工具的目錄下 7z x Linux_SDK.7z # 更新代碼 repo sync -c
安裝編譯所需工具,確保工具都正確安裝:
sudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools device-tree-compiler \ gcc-aarch64-linux-gnu mtools parted libudev-dev libusb-1.0-0-dev python-linaro-image-tools \ linaro-image-tools autoconf autotools-dev libsigsegv2 m4 intltool libdrm-dev curl sed make \ binutils build-essential gcc g++ bash patch gzip bzip2 perl tar cpio python unzip rsync file bc wget \ libncurses5 libqt4-dev libglib2.0-dev libgtk2.0-dev libglade2-dev cvs git mercurial rsync openssh-client \ subversion asciidoc w3m dblatex graphviz python-matplotlib libc6:i386 libssl-dev texinfo \ liblz4-tool genext2fs lib32stdc++6
選擇開發(fā)板對應(yīng)的配置文件。配置文件會鏈接到 device/rockchip/.BoardConfig.mk
,查看該文件可確認(rèn)當(dāng)前所使用的配置文件:
./build.sh firefly-rk3399.mk # 文件路徑在 `device/rockchip/rk3399/firefly-rk3399.mk`
.mk
文件默認(rèn)配置為編譯 Buildroot 固件,下面對 Buildroot 相關(guān)配置進(jìn)行說明:
# Buildroot config export RK_CFG_BUILDROOT=rockchip_rk3399 # Buildroot 根文件系統(tǒng)配置文件 # 文件路徑在 `buildroot/configs/rockchip_rk3399_defconfig`
# Recovery config export RK_CFG_RECOVERY=rockchip_rk3399_recovery # recovery 模式下根文件系統(tǒng)配置文件(可省略) # 文件路徑在 `buildroot/configs/rockchip_rk3399_recovery_defconfig`
# rootfs image path export RK_ROOTFS_IMG=buildroot/output/$RK_CFG_BUILDROOT/images/rootfs.$RK_ROOTFS_TYPE # Buildroot 根文件系統(tǒng)鏡像路徑 # 本例中,文件路徑在 `buildroot/output/rockchip_rk3399/images/rootfs.ext4` # 注:該文件路徑將在首次編譯根文件系統(tǒng)后生成
執(zhí)行編譯命令時,將會根據(jù) .mk
文件進(jìn)行編譯。
全自動編譯會編譯并打包固件 update.img
,生成固件目錄 rockdev/
:
./build.sh
-
編譯 kernel
./build.sh kernel
-
編譯 u-boot
./build.sh uboot
-
編譯 rootfs
編譯 Buildroot 根文件系統(tǒng),將會在 buildroot/output
生成編譯輸出目錄:
./build.sh buildroot # 注:確保作為普通用戶編譯 Buildroot 根文件系統(tǒng),避免不必要的錯誤。編譯過程中會自動下載所需軟件包,請保持聯(lián)網(wǎng)狀態(tài)
為確保 rockdev/
目錄下文件鏈接正確,更新各部分鏡像鏈接:
./mkfirmware.sh
將 rockdev
目錄的各部分鏡像打包成固件 update.img
:
./build.sh updateimg
Buildroot 編譯輸出結(jié)果保存在 output
目錄,具體目錄由配置文件決定,本例保存在 buildroot/output/rockchip_rk3399
目錄,后續(xù)可以在該目錄執(zhí)行 make
編譯根文件系統(tǒng)。
采用全自動編譯方式時,默認(rèn)會生成 buildroot/output/rockchip_rk3399_recovery
目錄,這是 recovery
的編譯輸出目錄。
子目錄說明:
-
build/
包含所有的源文件,包括 Buildroot 所需主機(jī)工具和選擇的包,這個目錄包含所有 模塊源碼。 -
host/
主機(jī)端編譯需要的工具包括交叉編譯工具。 -
images/
包含壓縮好的根文件系統(tǒng)鏡像文件。 -
staging/
這個目錄類似根文件系統(tǒng)的目錄結(jié)構(gòu),包含編譯生成的所有頭文件和庫,以及其他開發(fā)文件,不過他們沒有裁剪,比較龐大,不適用于目標(biāo)文件系統(tǒng)。 -
target/
包含完整的根文件系統(tǒng),對比staging/
,它沒有開發(fā)文件,不包含頭文件,二進(jìn)制文件也經(jīng)過strip
處理。
下文將介紹一些自定義 Buildroot 的方法。
模塊配置
默認(rèn)編譯好的根文件系統(tǒng)不一定滿足我們的需求,我們可能需要增加一些第三方包,或者修改包的配置選項,Buildroot 支持圖形化方式去做選擇配置:
cd buildroot/output/rockchip_rk3399/ # 進(jìn)入圖形化配置界面,選擇所需模塊,保存退出 make menuconfig # 保存到配置文件 'buildroot/configs/rockchip_rk3399_defconfig' make savedefconfig #編譯 Buildroot 根文件系統(tǒng) make
需要了解的是:
-
進(jìn)行編譯時,Buildroot 根據(jù)配置,會自動從網(wǎng)絡(luò)獲取相關(guān)的軟件包,包括一些第三方庫,插件,實用工具等,放在dl/目錄。
-
軟件包會解壓在
output/build/
目錄下,然后進(jìn)行編譯。 -
如果要修改軟件包的源碼,可以通過打補(bǔ)丁的方式進(jìn)行修改,補(bǔ)丁集中放在
package/
目錄,Buildroot 會在解壓軟件包時為其打上相應(yīng)的補(bǔ)丁。
busybox 配置修改
busybox 用于管理系統(tǒng)的命令工具,可按如下方式修改:
cd buildroot/output/rockchip_rk3399/ # 進(jìn)入圖形化配置界面,選擇所需工具,退出保存 make busybox-menuconfig # 保存到配置文件 `board/rockchip/common/base/busybox.config` make busybox-update-config make
文件系統(tǒng)覆蓋
文件系統(tǒng)覆蓋是指在目標(biāo)文件系統(tǒng)編譯完成后將文件覆蓋到文件系統(tǒng)目錄。通過這種方式,我們可以簡單的添加或修改一些文件:
-
本例覆蓋目錄
buildroot/board/rockchip/rk3399/fs-overlay-64
-
公有覆蓋目錄
buildroot/board/rockchip/common
例:buildroot/board/rockchip/rk3399/fs-overlay-64/etc/input-event-daemon.conf
將覆蓋文件系統(tǒng)的 /etc/input-event-daemon.conf
文件。
-
Linux
+關(guān)注
關(guān)注
87文章
11207瀏覽量
208717 -
嵌入式主板
+關(guān)注
關(guān)注
7文章
6084瀏覽量
35154 -
Firefly
+關(guān)注
關(guān)注
2文章
538瀏覽量
6963 -
Buildroot
+關(guān)注
關(guān)注
1文章
48瀏覽量
1376
發(fā)布評論請先 登錄
相關(guān)推薦
評論