0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

fireflyCORE-PX30-JD4編譯Buildroot 固件簡(jiǎn)介

firefly ? 來源:firefly ? 作者:firefly ? 2019-12-19 16:54 ? 次閱讀
編譯 Buildroot 固件

本章介紹 Buildroot 固件的編譯使用。

準(zhǔn)備工作
下載源碼

下載 Linux-SDK:

  • 方法一

初始化 repo 倉(cāng)庫(kù):

mkdir linux-sdkcdlinux-sdk ../repo/repo init --repo-url https://github.com/FireflyTeam/repo.git -u https://github.com/FireflyTeam/manifests.git -b linux-sdk -m px30/px30_linux_release.xml

同步源碼:

../repo/repo sync -c

同步過程中,網(wǎng)絡(luò)波動(dòng)會(huì)導(dǎo)致下載速度過低中斷同步,可以使用下面腳本同步代碼:

#! /bin/bash../repo/repo sync -cwhile[$?-ne0]do../repo/repo sync -cdone
  • 方法二(國(guó)內(nèi)用戶推薦使用)

考慮到國(guó)內(nèi)用戶使用 repo 從網(wǎng)絡(luò)上下載全部代碼會(huì)比較慢,官方提供了基礎(chǔ)的源碼包Linux_SDK.7z。

下載 Linux_SDK.7z:

# 把壓縮包放在上一步下載 repo 工具的目錄下7z x Linux_SDK.7z# 更新代碼repo sync -c
Linux_SDK 目錄介紹

目錄:

├── linux_sdk │ ├── app │ ├── buildroot# Buildroot 根文件系統(tǒng)的編譯目錄│ ├── build.sh -> device/rockchip/common/build.sh# 全自動(dòng)編譯腳本│ ├── device# 編譯相關(guān)配置文件│ ├── distro# Debian 根文件系統(tǒng)生成目錄│ ├── docs# 文檔│ ├── envsetup.sh -> buildroot/build/envsetup.sh │ ├── external │ ├── kernel# 內(nèi)核│ ├── Makefile -> buildroot/build/Makefile │ ├── mkfirmware.sh -> device/rockchip/common/mkfirmware.sh# rockdev 目錄鏈接更新腳本│ ├── prebuilts │ ├── rkbin │ ├── rkflash.sh -> device/rockchip/common/rkflash.sh# 燒寫腳本│ ├── rootfs# Debian 根文件系統(tǒng)編譯目錄│ ├── tools# 燒寫、打包工具│ └── u-boot# u-boot
搭建 SDK 編譯環(huán)境

安裝 Buildroot 編譯所需工具,確保工具都正確安裝:

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
編譯 SDK
編譯前配置

選擇開發(fā)板對(duì)應(yīng)的配置文件。配置文件會(huì)鏈接到device/rockchip/.BoardConfig.mk,查看該文件可確認(rèn)當(dāng)前所使用的配置文件:

./build.sh px30-buildroot.mk# 文件路徑在 `device/rockchip/px30/px30-buildroot.mk`

用戶也可以通過參考該配置生成新的配置文件來適配自己所需要的固件。

重要配置介紹:(如果需要定制固件,可以修改下列配置信息

# Uboot defconfig(uboot 配置文件)exportRK_UBOOT_DEFCONFIG=evb-px30# Kernel defconfig(kernel 配置文件)exportRK_KERNEL_DEFCONFIG=px30_linux_defconfig# Kernel dts(dts 文件)exportRK_KERNEL_DTS=px30-firefly-lvds# Buildroot config(Buildroot 根文件系統(tǒng)配置文件)exportRK_CFG_BUILDROOT=rockchip_px30_64# parameter for GPT table(分區(qū)信息,十分重要)exportRK_PARAMETER=parameter-ubuntu.txt# packagefile for make update image(打包配置文件)exportRK_PACKAGE_FILE=px30-ubuntu-package-file# rootfs image path(根文件系統(tǒng)鏡像路徑)exportRK_ROOTFS_IMG=buildroot/output/$RK_CFG_BUILDROOT/images/rootfs.$RK_ROOTFS_TYPE
全自動(dòng)編譯

在配置和搭建環(huán)境的工作都做好的前提下:

./build.sh

全自動(dòng)編譯會(huì)編譯并打包固件,生成固件目錄rockdev/,同時(shí)會(huì)在IMAGE/中備份。

部分編譯
  • kernel

./build.sh kernel
  • u-boot

./build.sh uboot
  • recovery

recovery 分區(qū)可省略,若有需要,編譯 recovery:

./build.sh recovery
  • rootfs

編譯 Buildroot 根文件系統(tǒng),將會(huì)在buildroot/output生成編譯輸出目錄:

./build.sh buildroot

注意:確保作為普通用戶編譯 Buildroot 根文件系統(tǒng),避免不必要的錯(cuò)誤。編譯過程中會(huì)自動(dòng)下載所需軟件包,請(qǐng)保持聯(lián)網(wǎng)狀態(tài)。

固件打包
同步更新各部分鏡像

每次打包固件前先確保rockdev/目錄下文件鏈接正確:

ls -l ├── boot.img -> ~/linux/linux_sdk/kernel/boot.img ├── idbloader.img -> ~/linux/linux_sdk/u-boot/idbloader.img ├── MiniLoaderAll.bin -> ~/linux/linux_sdk/u-boot/px30_loader_v1.10.112.bin ├── misc.img -> ~/linux/linux_sdk/device/rockchip/rockimg/wipe_all-misc.img ├── oem.img ├── parameter.txt -> ~/linux/linux_sdk/device/rockchip/px30/parameter-ubuntu.txt ├── recovery.img -> ~/linux/linux_sdk/buildroot/output/rockchip_px30_recovery/images/recovery.img ├── rootfs.img -> ~/linux/linux_sdk/buildroot/output/rockchip_px30_64/images/rootfs.ext4 ├── trust.img -> ~/linux/linux_sdk/u-boot/trust.img ├── uboot.img -> ~/linux/linux_sdk/u-boot/uboot.img └── userdata.img

可以運(yùn)行./mkfirmware.sh更新鏈接:

./mkfirmware.sh

提示:若不是編譯全部的分區(qū)鏡像,在運(yùn)行./mkfirmware時(shí),會(huì)遇到如下類似情況:

error: /home/xxx/linux/linux-sdk/buildroot/output/rockchip_px30_recovery/images/recovery.img not found!# 表示 recovery 分區(qū)沒有編譯出鏡像,其他的情況類似,如 oem.img、userdata.img# 上文提到,這些屬于可省略分區(qū)鏡像,可以不用理會(huì)。
打包統(tǒng)一固件

注意:打包前請(qǐng)確認(rèn)tools/linux/Linux_Pack_Firmware/rockdev/package-file是否正確。打包會(huì)根據(jù)此文件進(jìn)行分區(qū)打包。此文件鏈接會(huì)在執(zhí)行./build.shpx30-buildroot.mk命令時(shí)更新,如果配置不對(duì)請(qǐng)?jiān)俅螆?zhí)行該命令。

整合統(tǒng)一固件:

./build.sh updateimg
分區(qū)介紹
parameter

parameter.txt包含了固件的分區(qū)信息十分重要,你可以在device/rockchip/px30目錄下找到一些parameter.txt文件,下面以 parameter-debian.txt 為例子做介紹:

FIRMWARE_VER:8.1 MACHINE_MODEL: PX30 MACHINE_ID:007MANUFACTURER: PX30 MAGIC: 0x5041524B ATAG: 0x00200800 MACHINE: px30 CHECK_MASK: 0x80 PWR_HLD:0,0,A,0,1 TYPE: GPT CMDLINE:mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(trust),0x00002000@0x00008000(misc),0x00010000@0x0000a000(boot),0x00010000@0x0001a000(recovery),0x00010000@0x0002a000(backup),0x00020000@0x0003a000(oem),0x00700000@0x0005a000(rootfs),-@0x0075a000(userdata:grow)uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9

CMDLINE屬性是我們關(guān)注的地方。以 uboot 為例0x00002000@0x00004000(uboot)中0x00004000為uboot分區(qū)的起始位置0x00002000為分區(qū)的大小。后面的分區(qū)規(guī)則相同。用戶可以根據(jù)自己需要增減或者修改分區(qū)信息,但是請(qǐng)最少保留 uboot,trust,boot,rootfs 分區(qū),這是機(jī)器能正常啟動(dòng)的前提條件。parameter-ubuntu.txt 中使用的就是這樣的最簡(jiǎn)分區(qū)方案。

分區(qū)介紹:

  • uboot 分區(qū):燒寫 uboot 編譯出來的 uboot.img

  • trust 分區(qū):燒寫 uboot 編譯出來的 trust.img

  • misc 分區(qū):燒寫 misc.img,開機(jī)檢測(cè)進(jìn)入 recovery 模式(可省略)

  • boot 分區(qū):燒寫 kernel 編譯出來的 boot.img,包含 kernel 和設(shè)備樹信息

  • recovery 分區(qū):燒寫 recovery.img(可省略)

  • backup 分區(qū):預(yù)留,暫時(shí)沒有用。后續(xù)跟 Android 一樣作為 recovery 的 backup 使用(可省略)

  • oem 分區(qū):給廠家使用,存放廠家的 app 或數(shù)據(jù)。只讀。代替原來音箱的 data 分區(qū)。掛載在 /oem 目錄(可省略)

  • rootfs 分區(qū):存放 Buildroot 或者 Debian 編出來的 rootfs.img,只讀

  • userdata 分區(qū):存放 app 臨時(shí)生成的文件或者是給最終用戶使用??勺x寫,掛載在 /userdata 目錄下(可省略)

package-file

此文件應(yīng)當(dāng)與parameter保持一致,用于固件打包??梢栽趖ools/linux/Linux_Pack_Firmware/rockdev下找到相關(guān)文件。以 px30-ubuntu-package-file 為例介紹:

# NAME Relative path##HWDEF HWDEFpackage-file package-file bootloader Image/MiniLoaderAll.bin parameter Image/parameter.txt trust Image/trust.img uboot Image/uboot.img boot Image/boot.img rootfs:grow Image/rootfs.img backup RESERVED

以上是 SDK 編譯后生成的鏡像文件。根據(jù)parameter.txt只打包自己用到的映像文件。

Buildroot 介紹
output 目錄

Buildroot 編譯輸出結(jié)果保存在output目錄,具體目錄由配置文件決定,本例保存在buildroot/output/rockchip_px30_64目錄,后續(xù)可以在該目錄執(zhí)行make編譯根文件系統(tǒng)。

采用全自動(dòng)編譯方式時(shí),默認(rèn)會(huì)生成buildroot/output/rockchip_px30_recovery目錄,這是recovery.img的編譯輸出目錄。

子目錄說明:

  • build/包含所有的源文件,包括 Buildroot 所需主機(jī)工具和選擇的包,這個(gè)目錄包含所有 模塊源碼。

  • host/主機(jī)端編譯需要的工具包括交叉編譯工具。

  • images/包含壓縮好的根文件系統(tǒng)鏡像文件。

  • staging/這個(gè)目錄類似根文件系統(tǒng)的目錄結(jié)構(gòu),包含編譯生成的所有頭文件和庫(kù),以及其他開發(fā)文件,不過他們沒有裁剪,比較龐大,不適用于目標(biāo)文件系統(tǒng)。

  • target/包含完整的根文件系統(tǒng),對(duì)比staging/,它沒有開發(fā)文件,不包含頭文件,二進(jìn)制文件也經(jīng)過strip處理。

自定義 Buildroot

下文將介紹一些自定義 Buildroot 的方法。

模塊配置

默認(rèn)編譯好的根文件系統(tǒng)不一定滿足我們的需求,我們可能需要增加一些第三方包,或者修改包的配置選項(xiàng),Buildroot 支持圖形化方式去做配置選擇:

cdbuildroot/output/rockchip_px30_64/# 進(jìn)入圖形化配置界面,選擇所需模塊,保存退出make menuconfig# 保存到配置文件 'buildroot/configs/rockchip_px30_64_defconfig'make savedefconfig#編譯 Buildroot 根文件系統(tǒng)make

需要了解的是:

  • 進(jìn)行編譯時(shí),Buildroot 根據(jù)配置,會(huì)自動(dòng)從網(wǎng)絡(luò)獲取相關(guān)的軟件包,包括一些第三方庫(kù),插件,實(shí)用工具等,放在dl/目錄。

  • 軟件包會(huì)解壓在output/rockchip_px30_64/build/目錄下,然后進(jìn)行編譯。

  • 如果要修改軟件包的源碼,可以通過打補(bǔ)丁的方式進(jìn)行修改,補(bǔ)丁集中放在package/目錄,Buildroot 會(huì)在解壓軟件包時(shí)為其打上相應(yīng)的補(bǔ)丁。

busybox 配置修改

busybox 用于管理系統(tǒng)的命令工具,可按如下方式修改:

cdbuildroot/output/rockchip_px30_64/# 進(jìn)入圖形化配置界面,選擇所需工具,退出保存make busybox-menuconfig# 保存到配置文件 `board/rockchip/common/base/busybox.config`make busybox-update-config#編譯 Buildroot 根文件系統(tǒng)make

文件系統(tǒng)覆蓋

文件系統(tǒng)覆蓋是指在目標(biāo)文件系統(tǒng)編譯完成后將文件覆蓋到文件系統(tǒng)目錄。通過這種方式,我們可以簡(jiǎn)單的添加或修改一些文件:

  • 本例覆蓋目錄buildroot/board/rockchip/px30/fs-overlay-64

  • 公有覆蓋目錄buildroot/board/rockchip/common

例:buildroot/board/rockchip/px30/fs-overlay-64/usr/bin/rkbt將覆蓋文件系統(tǒng)的/usr/bin/rkbt文件。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式主板
    +關(guān)注

    關(guān)注

    7

    文章

    6084

    瀏覽量

    35154
  • 安卓
    +關(guān)注

    關(guān)注

    5

    文章

    2116

    瀏覽量

    56960
  • Firefly
    +關(guān)注

    關(guān)注

    2

    文章

    538

    瀏覽量

    6963
  • Buildroot
    +關(guān)注

    關(guān)注

    1

    文章

    48

    瀏覽量

    1376
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    fireflyCORE-PX30-JD4燒寫工作介紹

    原始固件是一種能以逐位復(fù)制的方式燒寫到存儲(chǔ)設(shè)備的固件,是存儲(chǔ)設(shè)備的原始映像。原始固件一般燒寫到SD卡中,但也可以燒寫到eMMC中。燒寫原始固件有許多工具可以選用:
    的頭像 發(fā)表于 11-14 11:03 ?2111次閱讀
    <b class='flag-5'>fireflyCORE-PX30-JD4</b>燒寫工作介紹

    fireflyAIO-3399C主板編譯Buildroot固件介紹

    編譯 Buildroot 固件   本章介紹 Buildroot 固件編譯使用。
    的頭像 發(fā)表于 12-13 10:39 ?1930次閱讀

    fireflyAIO-3288C主板編譯Buildroot固件簡(jiǎn)介

    本章介紹 Buildroot 固件編譯使用。
    的頭像 發(fā)表于 12-16 14:55 ?1456次閱讀

    fireflyCORE-PX30-JD4接口定義介紹

    AIO-PX30-JD4 提供了豐富的接口,主要包括:電源接口, 1 x USB3.0(device),6x USB2.0(接口×4,座子×2),以太網(wǎng),LVDS屏幕接口,TP觸摸接口,屏電壓跳線
    的頭像 發(fā)表于 12-19 16:36 ?1841次閱讀
    <b class='flag-5'>fireflyCORE-PX30-JD4</b>接口定義介紹

    fireflyCORE-PX30-JD4編譯 Ubuntu 固件簡(jiǎn)介

    為了方便用戶的使用與開發(fā),官方提供了 Linux 開發(fā)的整套 SDK,本章詳細(xì)的說明 SDK 的具體用法。
    的頭像 發(fā)表于 12-20 08:45 ?2577次閱讀

    fireflyCORE-PX30-JD4燒寫固件簡(jiǎn)介

    AIO-PX30-JD4 有靈活的啟動(dòng)方式。一般情況下,除非硬件損壞,AIO-PX30-JD4 開發(fā)板是不會(huì)變磚的。
    的頭像 發(fā)表于 12-20 08:49 ?3399次閱讀

    fireflyCORE-PX30-JD4產(chǎn)品簡(jiǎn)介

    采用PX30工業(yè)級(jí)64位低功耗處理器,擁有強(qiáng)大的硬解碼能力,以及豐富的接口,僅需擴(kuò)展功能底板即可快速實(shí)現(xiàn)項(xiàng)目研產(chǎn),可適用于AIOT物聯(lián)網(wǎng)設(shè)備、車載中控、游藝/游戲設(shè)備、商顯一體設(shè)備等應(yīng)用領(lǐng)域
    的頭像 發(fā)表于 12-20 08:50 ?1575次閱讀

    fireflyAIO-3288J簡(jiǎn)介編譯Buildroot固件簡(jiǎn)介

    編譯 Buildroot 固件 本章介紹 Buildroot 固件編譯使用。 準(zhǔn)備
    的頭像 發(fā)表于 12-26 14:43 ?2194次閱讀

    Core 3328 JD4固件Buildroot(GPT)

    電子發(fā)燒友網(wǎng)站提供《Core 3328 JD4固件Buildroot(GPT).txt》資料免費(fèi)下載
    發(fā)表于 09-13 10:31 ?5次下載
    Core 3328 <b class='flag-5'>JD4</b><b class='flag-5'>固件</b><b class='flag-5'>Buildroot</b>(GPT)

    Core PX30 JD4固件Android 8.1固件分享

    電子發(fā)燒友網(wǎng)站提供《Core PX30 JD4固件Android 8.1固件分享.txt》資料免費(fèi)下載
    發(fā)表于 09-13 09:23 ?13次下載
    Core <b class='flag-5'>PX30</b> <b class='flag-5'>JD4</b><b class='flag-5'>固件</b>Android 8.1<b class='flag-5'>固件</b>分享

    Core PX30 JD4固件Buildroot(GPT)文件分享

    電子發(fā)燒友網(wǎng)站提供《Core PX30 JD4固件Buildroot(GPT)文件分享.txt》資料免費(fèi)下載
    發(fā)表于 09-13 09:22 ?0次下載
    Core <b class='flag-5'>PX30</b> <b class='flag-5'>JD4</b><b class='flag-5'>固件</b><b class='flag-5'>Buildroot</b>(GPT)文件分享

    Core PX30 JD4固件Ubuntu(GPT)文件分享

    電子發(fā)燒友網(wǎng)站提供《Core PX30 JD4固件Ubuntu(GPT)文件分享.txt》資料免費(fèi)下載
    發(fā)表于 09-13 09:21 ?1次下載
    Core <b class='flag-5'>PX30</b> <b class='flag-5'>JD4</b><b class='flag-5'>固件</b>Ubuntu(GPT)文件分享

    Core PX3 SEJ固件Buildroot系統(tǒng)

    電子發(fā)燒友網(wǎng)站提供《Core PX3 SEJ固件Buildroot系統(tǒng).txt》資料免費(fèi)下載
    發(fā)表于 09-16 10:42 ?0次下載
    Core <b class='flag-5'>PX</b>3 SEJ<b class='flag-5'>固件</b><b class='flag-5'>Buildroot</b>系統(tǒng)

    Core 1808 JD4固件Buildroot

    電子發(fā)燒友網(wǎng)站提供《Core 1808 JD4固件Buildroot.txt》資料免費(fèi)下載
    發(fā)表于 09-20 17:07 ?0次下載
    Core 1808 <b class='flag-5'>JD4</b><b class='flag-5'>固件</b><b class='flag-5'>Buildroot</b>

    AIO 3566JD4固件Buildroot

    電子發(fā)燒友網(wǎng)站提供《AIO 3566JD4固件Buildroot.txt》資料免費(fèi)下載
    發(fā)表于 09-20 10:39 ?0次下載
    AIO 3566<b class='flag-5'>JD4</b><b class='flag-5'>固件</b><b class='flag-5'>Buildroot</b>