日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Buildroot 开发

發布時間:2024/1/1 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Buildroot 开发 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載:https://wiki.t-firefly.com/AIO-3288C/buildroot_develop.html
學習連接: 制作根文件系統

Buildroot 開發?

Buildroot 是 Linux 平臺上一個構建嵌入式 Linux 系統的框架。整個 Buildroot 是由 Makefile(*.mk) 腳本和 Kconfig(Config.in) 配置文件構成的。你可以和編譯 Linux 內核一樣,通過 buildroot 配置,menuconfig 修改,編譯出一個完整的可以直接燒寫到機器上運行的 Linux 系統軟件(包含 boot、kernel、rootfs 以及 rootfs 中的各種庫和應用程序)。

Buildroot 官網

Buildroot 開發手冊

目錄結構?

buildroot/ ├── arch # CPU 架構的構建、配置文件 ├── board # 具體單板相關的文件 ├── boot # Bootloaders 的構建、配置文件 ├── build ├── CHANGES # Buildroot 修改日志 ├── Config.in ├── Config.in.legacy ├── configs # 具體單板的 Buildroot 配置文件 ├── COPYING ├── DEVELOPERS ├── dl # 下載的程序、源碼壓縮包、補丁等 ├── docs # 文檔 ├── fs # 各種文件系統的構建、配置文件 ├── linux # Linux 的構建、配置文件 ├── Makefile ├── Makefile.legacy ├── output # 編譯輸出目錄 ├── package # 所有軟件包的構建、配置文件 ├── README # Buildroot 簡單說明 ├── support # 為 Bulidroot 提供功能支持的腳本、配置文件 ├── system # 制作根文件系統的構建、配置文件 ├── toolchain # 交叉編譯工具鏈的構建、配置文件 └── utils # 實用工具

配置?

選擇默認配置文件:

# 進入 SDK 根目錄 cd path/to/SDK/ # 選擇配置文件 # `configs/rockchip_rk3288_defconfig` source envsetup.sh rockchip_rk3288

執行完成后會生成編譯輸出目錄,output/rockchip_rk3288,后續也可以在該目錄下執行 make 相關操作。

軟件包配置?

打開配置界面:

make menuconfig

我們可以在配置界面添加或裁剪一些工具,按需求定制系統功能。以添加 qt53d 為例:

輸入 / 進入搜索界面,輸入要查找的內容 qt53d,按回車進行搜索:

選擇 1 跳轉到對應頁面,按空格選中配置:

配置完成后,移動到 Save 按回車保存到 .config;移動到 Exit 按回車退出。

保存配置文件:

make savedefconfig

將修改保存到配置文件 configs/rockchip_rk3288_defconfig

Busybox 配置?

打開配置界面,進行配置:

make busybox-menuconfig

配置完成后,移動到 Exit 按回車退出,在彈窗頁面選擇 Yes 保存到 .config

保存配置文件:

make busybox-update-config

將修改保存到配置文件 board/rockchip/common/base/busybox.config

編譯?

配置好 Buildroot 后,直接運行 make 進行編譯。

編譯說明?

運行 make 進行編譯時,會執行以下過程:

  • 下載源碼;

  • 配置、編譯、安裝交叉編譯工具鏈;

  • 配置、編譯、安裝選擇的軟件包;

  • 按選擇的格式生成根文件系統;

  • 關于 make 的更多用法,可通過 make help 獲得。

    編譯軟件包?

    我們可以執行 make <package> 單獨編譯某個軟件包。軟件包的編譯主要包括下載,解壓,打補丁,配置,編譯,安裝等過程,具體可以查看 package/pkg-generic.mk

    • 下載

      Buildroot 會根據配置 package/<package>/<package>.mk,自動從網絡獲取對應的軟件包,包括一些第三方庫,插件,實用工具等,放在 dl/ 目錄。

    • 解壓

      軟件包會解壓在 output/rockchip_rk3288/build/<package>-<version> 目錄下。

    • 打補丁

      補丁集中放在 package/<packgae>/ 目錄,Buildroot 會在解壓軟件包后為其打上相應的補丁。如果要修改源碼,可以通過打補丁的方式進行修改。

    • 配置

    • 編譯

    • 安裝

      編譯完成后,會將需要的編譯生成文件拷貝到 output/rockchip_rk3288/target/ 目錄。

    對于某個軟件包,我們可以通過 make <package>-<target> 調用軟件包構建中的某一步驟,如下:

    Package-specific:<pkg> - Build and install <pkg> and all its dependencies<pkg>-source - Only download the source files for <pkg><pkg>-extract - Extract <pkg> sources<pkg>-patch - Apply patches to <pkg><pkg>-depends - Build <pkg>'s dependencies <pkg>-configure - Build <pkg> up to the configure step <pkg>-build - Build <pkg> up to the build step <pkg>-graph-depends - Generate a graph of <pkg>'s dependencies<pkg>-dirclean - Remove <pkg> build directory<pkg>-reconfigure - Restart the build from the configure step<pkg>-rebuild - Restart the build from the build step

    編譯輸出目錄?

    編譯完成后,在編譯輸出目錄 output/rockchip_rk3288 會生成子目錄,說明如下:

    • build/ 包含所有的源文件,包括 Buildroot 所需主機工具和選擇的軟件包,這個目錄包含所有軟件包源碼。

    • host/ 主機端編譯需要的工具,包括交叉編譯工具。

    • images/ 包含壓縮好的根文件系統鏡像文件。

    • staging/ 這個目錄類似根文件系統的目錄結構,包含編譯生成的所有頭文件和庫,以及其他開發文件,不過他們沒有裁剪,比較龐大,不適用于目標文件系統。

    • target/ 包含完整的根文件系統,對比 staging/,它沒有開發文件,不包含頭文件,二進制文件也經過 strip 處理。

    交叉編譯工具?

    Buildroot 編譯完成后,會在 output/rockchip_rk3288/host/ 目錄下,生成交叉編譯工具,我們可以用來編譯目標程序。

    • 交叉編譯工具目錄

    output/rockchip_rk3288/host/bin/

    • 編譯示例 hello.c

    #include <stdio.h> #include <stdlib.h>

    int main(int argc, char *argv[])
    {
    printf(“Hello World!\n);
    return 0;
    }

    • 編譯

    .../host/bin/arm-buildroot-linux-gnueabihf-gcc hello.c -o hello
    • 運行

    將可執行程序 hello 拷貝到設備,運行 ./hello,則會看到打印信息 Hello World!

    重建?

    對于重建的具體說明,可以查看文檔 buildroot/docs/manual/rebuilding-packages.txt

    重建軟件包?

    在開發過程中,若修改了某個軟件包的源碼,Buildroot 是不會重新編譯該軟件包的。可以按如下方式操作:

    • 方式一

    make <package>-rebuild
    • 方式二

    # 刪除軟件包的編譯輸出目錄 rm -rf output/rockchip_rk3288/build/<package>-<version> # 編譯 make <package>

    完全重建?

    當通過 make menuconfig,make xconfig 或其他配置工具之一更改系統配置時,Buildroot 不會嘗試檢測應重建系統的哪些部分。在某些情況下,Buildroot 應該重建整個系統,在某些情況下,僅應重建軟件包的特定子集。但是以完全可靠的方式檢測到這一點非常困難,因此 Buildroot 開發人員已決定不嘗試這樣做。

    何時需要完全重建?

    • 更改目標體系結構配置時,需要完全重建;

    • 更改工具鏈配置時,需要完全重建;

    • 將其他軟件包添加到配置中時,不一定需要完全重建;

    • 從配置中刪除軟件包時,Buildroot 不會執行任何特殊操作。它不會從目標根文件系統或工具鏈中刪除此軟件包安裝的文件。需要完全重建才能刪除這些文件;

    • 更改軟件包的子選項時,不會自動重建軟件包;

    • 對根文件系統框架進行更改時,需要完全重建;

    一般而言,當你遇到構建錯誤并且不確定所做的配置更改可能帶來的后果時,請進行完全重建。具體說明可以查看文檔 rebuilding-packages.txt

    如何完全重建?

    • 方式一

    直接刪除編譯輸出目錄,之后重新進行配置、編譯。

    rm -rf output/
    • 方式二

    執行如下命令,會刪除編譯輸出并重新編譯。

    make clean all

    新增本地源碼包?

    開發過程中,Buildroot 自帶的軟件包有時可能無法滿足我們的需求,為此我們需要添加自定義的軟件包。Buildroot 支持多種格式的軟件包,包括 generic-package、cmake-package、autotools-package 等,我們以 generic-package 舉例說明。

    • 創建工程目錄

    cd path/to/SDK/ mkdir buildroot/package/rockchip/firefly_demo/
    • 新建 Config.in

    firefly_demo/ 下添加 Config.in:

    config BR2_PACKAGE_FIREFLY_DEMObool "Simple Firefly Demo"
    • 新建 firefly_demo.mk

    firefly_demo/ 下添加 firefly_demo.mk:

    ################################################## ########### # ### firefly_demo # ################################################## ########### ifeq ($(BR2_PACKAGE_FIREFLY_DEMO), y) FIREFLY_DEMO_VERSION:<span class="o">=</span><span class="m">1</span>.0.0<span class="nv">FIREFLY_DEMO_SITE</span><span class="o">=</span><span class="k">$(</span>TOPDIR<span class="k">)</span>/../external/firefly_demo/src<span class="nv">FIREFLY_DEMO_SITE_METHOD</span><span class="o">=</span><span class="nb">local</span>

    define FIREFLY_DEMO_BUILD_CMDS
    (</span>TARGETMAKEENV<spanclass="k">)</span><spanclass="k">(</span>TARGET_MAKE_ENV<span class="k">)</span> <span class="k">(</span>TARGETM?AKEE?NV<spanclass="k">)</span><spanclass="k">(MAKE) CC=(</span>TARGETCC<spanclass="k">)</span><spanclass="nv">CXX</span><spanclass="o">=</span><spanclass="k">(</span>TARGET_CC<span class="k">)</span> <span class="nv">CXX</span><span class="o">=</span><span class="k">(</span>TARGETC?C<spanclass="k">)</span><spanclass="nv">CXX</span><spanclass="o">=</span><spanclass="k">(TARGET_CXX) -C $(@D)
    endef

    define FIREFLY_DEMO_CLEAN_CMDS
    (</span>TARGETMAKEENV<spanclass="k">)</span><spanclass="k">(</span>TARGET_MAKE_ENV<span class="k">)</span> <span class="k">(</span>TARGETM?AKEE?NV<spanclass="k">)</span><spanclass="k">(MAKE) -C $(@D) clean
    endef

    define FIREFLY_DEMO_INSTALL_TARGET_CMDS
    (</span>TARGETMAKEENV<spanclass="k">)</span><spanclass="k">(</span>TARGET_MAKE_ENV<span class="k">)</span> <span class="k">(</span>TARGETM?AKEE?NV<spanclass="k">)</span><spanclass="k">(MAKE) -C $(@D) install
    endef

    define FIREFLY_DEMO_UNINSTALL_TARGET_CMDS
    (</span>TARGETMAKEENV<spanclass="k">)</span><spanclass="k">(</span>TARGET_MAKE_ENV<span class="k">)</span> <span class="k">(</span>TARGETM?AKEE?NV<spanclass="k">)</span><spanclass="k">(MAKE) -C $(@D) uninstall
    endef

    (</span><spanclass="nv">eval</span><spanclass="k">(</span><span class="nv">eval</span> <span class="k">(</span><spanclass="nv">eval</span><spanclass="k">(generic-package))
    endif

    • 創建源碼目錄

    上文的 Makefile 文件里已經指定了源碼目錄 external/firefly_demo/src

    cd path/to/SDK/ mkdir external/firefly_demo/src
    • 編寫源碼 firefly_demo.c

    firefly_demo/src/ 下添加 firefly_demo.c:

    #include <stdio.h> #include <stdlib.h>

    int main(int argc, char *argv[])
    {
    printf(“Hello World!\n);
    return 0;
    }

    • 編寫 Makefile

    firefly_demo/src/ 下添加 Makefile:

    DEPS = OBJ = firefly_demo.o CFLAGS = %.o: %.c $(DEPS)$(CC) -c -o $@ $< $(CFLAGS)

    firefly_demo: (</span><spanclass="nv">OBJ</span><spanclass="k">)</span><spanclass="k">(</span><span class="nv">OBJ</span><span class="k">)</span> <span class="k">(</span><spanclass="nv">OBJ</span><spanclass="k">)</span><spanclass="k">(CXX) -o $@ <spanclass="k">^ <span class="k"><spanclass="k">(CFLAGS)

    .PHONY: clean
    clean:
    rm -f *.o *~ firefly_demo

    .PHONY: install
    install:
    cp -f firefly_demo $(TARGET_DIR)/usr/bin/

    .PHONY: uninstall
    uninstall:
    rm -f $(TARGET_DIR)/usr/bin/firefly_demo

    • 修改上一級 Config.in

    buildroot/package/rockchip/Config.in 末尾添加一行:

    source "package/rockchip/firefly_demo/Config.in"
    • 配置軟件包

    打開配置菜單 make menuconfig,找到 firefly_demo 并選中配置。

    • 編譯

    # 編譯 firefly_demo make firefly_demo # 打包進根文件系統 make # 若修改源碼,重新編譯軟件包 make firefly_demo-rebuild

    rootfs-overlay?

    rootfs-overly 是一個相當不錯的功能,它能夠在目標文件系統編譯完成后將指定文件覆蓋到某個目錄。通過這種方式,我們可以方便地添加或修改一些文件到根文件系統。

    假設我們要在根文件系統的 /etc/ 目錄下添加文件 overlay-test,可以按如下步驟操作:

    • 設置 rootfs-overlay 根目錄

    打開配置菜單 make menuconfig,通過設置 BR2_ROOTFS_OVERLAY 選項,添加用于覆蓋的根目錄。對于 rk3288,默認已添加了目錄 board/rockchip/rk3288/fs-overlay/

    • 添加文件到覆蓋目錄

    cd buildroot/board/rockchip/rk3288/fs-overlay/ mkdir etc/ touch etc/overlay-test
    • 編譯

    make
    • 下載根文件系統

    將編譯好的根文件系統 output/rockchip_rk3288/images/rootfs.ext2 下載到設備。啟動設備,可以看到已添加文件 /etc/overlay-test

    也可以通過查看 target/ 目錄,驗證是否添加成功:

    ls buildroot/output/rockchip_rk3288/target/etc/overlay-test

    交叉編譯 Qt-5.12.2?

    交叉編譯工具鏈?

    Firefly 提取了 Buildroot 的交叉編譯工具鏈,用戶可以直接使用該工具鏈開發 Buildroot 上的 Qt 應用程序,而無需下載編譯 SDK 代碼。

    工具鏈支持 EGLFS、LinuxFB、Wayland 等插件。

    使用環境:

    主機:x86-64 / Ubuntu 16.04/18.04 設備: Firefly RK3399 RK3288 PX30 .. / Buildroot

    下載?

    對于 32位芯片,如 rk3288,下載 firefly-qt-5.12.2-arm.tar.gz;對于其它 64位芯片,如 rk3399,下載 firefly-qt-5.12.2-aarch64.tar.gz。

    下載鏈接(提取碼:6dg7)

    下文將以 firefly-qt-5.12.2-aarch64.tar.gz 為例進行說明。

    目錄結構?

    解壓下載好的壓縮包:

    tar -zxvf firefly-qt-5.12.2-aarch64.tar.gz

    目錄結構:

    firefly-qt-5.12.2-aarch64/ ├── aarch64.tar.gz # 用于 Qt 程序運行的庫文件、插件等 ├── demo │?? └── mainwindow # demo 程序 ├── firefly-qt-5.12.2-aarch64 # 交叉編譯工具鏈 └── ReadMe # 使用說明

    配置交叉編譯環境?

    將工具鏈拷貝到主機的指定目錄:

    cd firefly-qt-5.12.2-aarch64/ # 該目錄 `/opt/` 不可修改 cp -rdf firefly-qt-5.12.2-aarch64 /opt/

    若拷貝失敗,先修改下目錄權限,再執行上述操作:

    sudo chmod 777 /opt/

    交叉編譯?

    以 demo 程序為例,運行如下命令:

    cd demo/mainwindow/ /opt/firefly-qt-5.12.2-aarch64/host/bin/qmake make

    編譯完成后,會生成可執行程序 demo/mainwindow/mainwindow

    配置運行環境?

    使用 U盤將 aarch64.tar 拷貝到設備上:

    cp /media/usb0/aarch64.tar /userdata/

    解壓:

    cd /userdata/ tar -xvf aarch64.tar

    將文件拷貝到對應目錄:

    cd aarch64/ cp -rdf usr/lib/* /usr/lib/ cp -rdf usr/qml/* /usr/qml/ cp usr/bin/gdbserver /usr/bin/

    運行程序?

    將編譯好的可執行程序 mainwindow 拷貝到設備上。

    默認板子運行了 Wayland 桌面環境,按如下方式運行:

    # 設置環境變量 export XDG_RUNTIME_DIR=/tmp/.xdg # 運行 ./mainwindow -platform wayland

    使用 eglfs 插件運行:

    # 退出 Wayland 桌面環境 /etc/init.d/S50launcher stop # 運行 ./mainwindow -platform eglfs

    Qt Creator?

    下面介紹 Qt Creator 的使用說明,在操作前,請先按前面的步驟配置好交叉編譯環境和運行環境。

    安裝?

    進入 Qt 官方下載頁面,下載 qt-opensource-linux-x64-5.12.2.run,下載完成之后,運行安裝。

    配置?

    安裝完成后,啟動 Qt Creator,打開菜單 Tools -> Options,找到 Kits。

    • 配置 Qt Versions

      qmake:/opt/firefly-qt-5.12.2-aarch64/host/bin/qmake

    • 配置 Compilers

      g++:/opt/firefly-qt-5.12.2-aarch64/host/bin/aarch64-buildroot-linux-gnu-g++

      gcc:/opt/firefly-qt-5.12.2-aarch64/host/bin/aarch64-buildroot-linux-gnu-gcc

    為方便調試,配置 Debuggers 和 Devices 用于在線調試:

    • 配置 Debuggers

      gdb:/opt/firefly-qt-5.12.2-aarch64/host/bin/aarch64-buildroot-linux-gnu-gdb

    • 配置 Devices

    設置好設備的 IP、用戶名(root)和密碼(rockchip)。為了方便調試,可以在設備上設置靜態 IP。

    • 配置 Kits

    將前面設置的配置項添加到 Kits。

    編譯運行?

    打開 demo 程序,Welcome -> Open Project,選擇要使用的 Kits:

    之后打開 Projects -> Run,配置命令行參數,這里設置為 -platform wayland

    配置環境變量,即 export XDG_RUNTIME_DIR=/tmp/.xdg

    編譯運行:

    點擊 Build 交叉編譯 Qt 程序;點擊 RunDebug 在設備上運行或調試程序。要重新運行程序時,記得手動點擊 Stop 關閉已經運行的程序。

    編譯生成目錄在 demo/build-mainwindow-qt_5_12_2_aarch64-Debug

    桌面應用?

    官方發布的 Buildroot 固件,默認已支持 Wayland 桌面環境以及一些 Qt 應用,如下圖:

    這些 Qt 應用提供了一些基礎功能,如,攝像頭預覽,文件管理器,多媒體播放器,WiFi 連接等。

    用戶和密碼?

    • 用戶:root

    • 密碼:rockchip

    WiFi 連接?

    # wifi_start.sh wifi-ssid password wifi_start.sh wifi-test 12345678

    音/視頻播放?

    # 播放 wav aplay test.wav gstwavplay.sh test.wav

    # 播放 mp3
    mp3play.sh test.mp3
    gstmp3play.sh test.mp3

    # 播放 mp4
    gstmp4play.sh test.mp4
    gstvideoplay.sh test.mp4

    SSH?

    Buildroot 默認已支持 SSH 服務。

    • ssh 登錄設備

    讓設備處于聯網狀態,在 PC 端執行登錄命令:

    # 用戶:root;密碼:rockchip # IP:192.168.27.129 ~$ ssh root@192.168.27.129 The authenticity of host '192.168.27.129 (192.168.27.129)' can't be established. ECDSA key fingerprint is SHA256:+NwFawDiU0EwLHRFrIA/7snmlMc9ZfN6Nxa5vUSC7Pg. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.27.129' (ECDSA) to the list of known hosts. root@192.168.27.129's password: [root@rk3288:~]#
    • scp

    在 PC 端執行命令,拷貝文件到設備:

    ~$ scp ./file root@192.168.27.129:/ root@192.168.27.129's password: file 100% 154 0.2KB/s 00:00

    MIPI 攝像頭(OV13850)?

    查看 ISP 驅動是否加載成功,成功可以看到如下設備信息:

    root@firefly:~# grep '' /sys/class/video4linux/video*/name /sys/class/video4linux/video0/name:rkisp1_mainpath /sys/class/video4linux/video1/name:rkisp1_selfpath /sys/class/video4linux/video2/name:rkisp1_dmapath /sys/class/video4linux/video3/name:rkisp1-statistics /sys/class/video4linux/video4/name:rkisp1-input-params

    root@firefly:~# ls /dev/video*
    video0 video1 video2 video3 video4

    查看 OV13850 設備是否注冊成功,成功可以看到如下打印:

    root@firefly:~# dmesg |grep 13850 [ 3.911130] ov13850 3-0010: driver version: 00.01.03 [ 3.911168] ov13850 3-0010: GPIO lookup for consumer reset [ 3.911171] ov13850 3-0010: using device tree for GPIO lookup [ 3.911187] of_get_named_gpiod_flags: parsed 'reset-gpios' property of node '/i2c@ff150000/ov13850@10[0]' - status (0) [ 3.911370] ov13850 3-0010: could not get default pinstate [ 3.911373] ov13850 3-0010: could not get sleep pinstate [ 3.911376] ov13850 3-0010: GPIO lookup for consumer pwdn [ 3.911379] ov13850 3-0010: using device tree for GPIO lookup [ 3.911403] of_get_named_gpiod_flags: parsed 'pwdn-gpios' property of node '/i2c@ff150000/ov13850@10[0]' - status (0) # 成功獲取設備 ID [ 3.914401] ov13850 3-0010: Detected OV00d850 sensor, REVISION 0xb2

    預覽:

    gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=NV12,width=640,height=480, framerate=30/1 ! videoconvert ! kmssink &

    # 或者
    export XDG_RUNTIME_DIR=/tmp/.xdg
    gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=NV12,width=640,height=480, framerate=30/1 ! videoconvert ! waylandsink &

    外部存儲設備?

    Buildroot 支持自動掛載外部存儲設備:

    U 盤掛載路徑:/udisk

    TF 卡掛載路徑:/sdcard

    恢復出廠設置?

    Buildroot 支持恢復出廠設置。直接運行 update 或者加上 factory/reset 參數均可進入 recovery 恢復出廠設置。

    注意:此出廠設置表示恢復為設備最后一次升級固件之后的初始狀態。

    update # 或者 update factory / update reset

    升級固件?

    Buildroot 支持從外部存儲設備升級固件,以下是升級流程說明。

    • 制作升級固件

    按照正常的固件編譯流程,制作用于升級的固件。《編譯 Buildroot 固件》

    升級固件不一定要全分區升級,可修改 package-file 文件,將不要升級的分區去掉,這樣可以減少升級包的大小。

    例如,修改文件 tools/linux/Linux_Pack_Firmware/rockdev/rk3288-package-file,將 rootfs 的相對路徑改為 RESERVED,這樣就不會打包根文件系統,即不升級根文件系統分區。

    # name relative path # #hwdef hwdef package-file package-file bootloader image/miniloaderall.bin parameter image/parameter.txt trust image/trust.img uboot image/uboot.img misc image/misc.img boot image/boot.img recovery image/recovery.img rootfs RESERVED oem image/oem.img userdata:grow image/userdata.img backup RESERVED

    將制作好的升級固件拷貝到 U 盤、TF 卡或者設備的 /userdata/ 目錄下,重命名為 update.img

    注意: 若將升級固件放至設備的 /userdata/ 目錄,則不要打包 userdata.img,將 image/userdata.img 改為 RESERVED

    • 升級

    啟動設備,在命令行執行升級命令,update ota path/to/update.img,設備會進入 recovery 進行升級。

    # U 盤 update ota /udisk/update.img # TF 卡 update ota /sdcard/update.img # /userdata/ update ota /userdata/udpate.img

    等待升級完成,升級成功后,設備會重新啟動進入系統。

    FirmwareOta?

    firmwareota 是一個 Qt 桌面應用,支持從網絡下載固件進行固件升級,下面是使用說明。

    添加桌面應用?

    • 下載

    下載鏈接(提取碼:1234)

    • 解壓

    tar -zxvf firmwareota.tar.gz
    • 按照目錄結構,將文件拷貝到設備

    └── usr├── bin│?? └── firmwareota└── share├── applications│?? └── firmwareota.desktop└── icon└── icon_firmwareota.png
    • 重啟桌面

    /etc/init.d/S50launcher stop /etc/init.d/S50launcher start
    • 啟動

    設置完成后,則可以在桌面啟動應用。

    設置下載地址?

    程序會通過默認的 Http 地址下載列表文件 ota_list,解析列表文件獲取固件下載鏈接。

    列表文件格式,例:

    firmware_name_1 http://192.168.2.11:8000/firmware_name_1 firmware_name_2 http://192.168.2.11:8000/firmware_name_2 ...

    我們可以通過添加 /userdata/list_url 文件,設置指定列表文件下載地址,例:

    http://192.168.2.11:8000/ota_list

    Weston 配置?

    我們可以通過配置 Weston 對顯示進行一些自定義設置,下文對部分設置進行說明。

    狀態欄設置?

    Weston 支持在 weston.ini 配置文件的 shell 段設置狀態欄的背景色、位置,以及在 launcher 段設置快捷啟動程序,如:

    # /etc/xdg/weston/weston.ini

    [shell]
    # 顏色格式為 ARGB8888
    panel-color=0xff002244
    # top|bottom|left|right|none
    panel-position=bottom

    [launcher]
    icon=/usr/share/weston/terminal.png
    path=/usr/bin/weston-terminal

    [launcher]
    # 圖標路徑
    icon=/usr/share/weston/icon_flower.png
    # 快捷啟動命令
    path=/usr/bin/qsetting

    背景設置?

    Weston 支持在 weston.ini 配置文件的 shell 段設置背景圖案、顏色,如:

    # /etc/xdg/weston/weston.ini

    [shell]
    # 背景圖案(壁紙)絕對路徑
    background-image=/usr/share/weston/background.png
    # scale|scale-crop|tile
    background-type=scale
    # 顏色格式為 ARGB8888,未設置背景圖案時生效
    background-color=0xff002244

    待機及鎖屏配置?

    Weston 的超時待機時長可以在啟動參數中配置,也可以在 weston.ini 的 core 段配置,如:

    # /etc/init.d/S50launcherstart)...# 0 為禁止待機,單位為秒weston --tty=2 -B=drm-backend.so --idle-time=0&

    或者:

    # /etc/xdg/weston/weston.ini

    [core]
    # 設置 5 秒未操作后進入待機狀態
    idle-time=5

    顯示顏色格式配置?

    Buildroot SDK 內 Weston 目前默認顯示格式為 ARGB8888,對于某些低性能平臺,可以在 weston.ini 的 core 段配置為 RGB565,如:

    # /etc/xdg/weston/weston.ini

    [core]
    # xrgb8888|rgb565|xrgb2101010
    gbm-format=rgb565

    也可以在 weston.ini 的 output 段單獨配置每個屏幕的顯示格式,如:

    # /etc/xdg/weston/weston.ini

    [output]
    # output 的 name 可以查看 /sys/class/drm/card0-name
    name=LVDS-1
    # xrgb8888|rgb565|xrgb2101010
    gbm-format=rgb565

    屏幕方向設置?

    Weston 的屏幕顯示方向可以在 weston.ini 的 output 段配置,如:

    # /etc/xdg/weston/weston.ini

    [output]
    name=LVDS-1
    # normal|90|180|270|flipped|flipped-90|flipped-180|flipped-270
    transform=180

    如果需要動態配置屏幕方向,可以通過動態配置文件,如:

    echo "output:all:rotate90" > /tmp/.weston_drm.conf # 所有屏幕旋轉 90 度 echo "output:eDP-1:rotate180" > /tmp/.weston_drm.conf # eDP-1 旋轉 180 度

    分辨率及縮放配置?

    Weston 的屏幕分辨率及縮放可以在 weston.ini 的 output 段配置,如:

    # /etc/xdg/weston/weston.ini

    [output]
    name=HDMI-A-1
    # 需為屏幕支持的有效分辨率
    mode=1920x1080
    # 需為整數倍數
    scale=2

    如果需要動態配置分辨率及縮放,可以通過動態配置文件,如:

    echo "output:HDMI-A-1:mode=800x600" > /tmp/.weston_drm.conf # 修改 HDMI-A-1 分辨率為800x600

    這種方式縮放時需要依賴 RGA 加速。

    凍結屏幕?

    在啟動 Weston 時,開機 logo 到 UI 顯示之間存在短暫切換黑屏。如需要防止黑屏,可以通過以下種動態配置文件方式短暫凍結 Weston 屏幕內容:

    # /etc/init.d/S50launcherstart)...export WESTON_FREEZE_DISPLAY=/tmp/.weston_freeze # 設置特殊配置文件路徑touch /tmp/.weston_freeze # 凍結顯示weston --tty=2 -B=drm-backend.so --idle-time=0&...sleep 1 && rm /tmp/.weston_freeze& # 1 秒后解凍

    多屏配置?

    Buildroot SDK 的 Weston 支持多屏同異顯及熱拔插等功能,不同顯示器屏幕的區分根據 drm 的 name (通過 /sys/class/drm/card0-name 獲取),相關配置通過環境變量設置,如:

    # /etc/init.d/S50launcher start<span class="o">)</span>...<span class="nb">export</span> <span class="nv">WESTON_DRM_PRIMARY</span><span class="o">=</span>HDMI-A-1 <span class="c1"># 指定主顯為 HDMI-A-1</span><span class="nb">export</span> <span class="nv">WESTON_DRM_MIRROR</span><span class="o">=</span><span class="m">1</span> <span class="c1"># 使用鏡像模式(多屏同顯),不設置此環境變量即為異顯</span><span class="nb">export</span> <span class="nv">WESTON_DRM_KEEP_RATIO</span><span class="o">=</span><span class="m">1</span> <span class="c1"># 鏡像模式下縮放保持縱橫比,不設置此變量即為強制全屏</span><span class="nb">export</span> <span class="nv">WESTON_DRM_PREFER_EXTERNAL</span><span class="o">=</span><span class="m">1</span> <span class="c1"># 外置顯示器連接時自動關閉內置顯示器</span><span class="nb">export</span> <span class="nv">WESTON_DRM_PREFER_EXTERNAL_DUAL</span><span class="o">=</span><span class="m">1</span> <span class="c1"># 外置顯示器連接時默認以第一個外顯為主顯</span>weston --tty<span class="o">=</span><span class="m">2</span> -B<span class="o">=</span>drm-backend.so --idle-time<span class="o">=</span><span class="m">0</span><span class="p">&amp;</span>

    鏡像模式縮放顯示內容時需要依賴 RGA 加速。

    同時也支持在 weston.ini 的 output 段單獨禁用指定屏幕:

    # /etc/xdg/weston/weston.ini

    [output]
    name=LVDS-1
    mode=off
    # off|current|preferred|<WIDTHxHEIGHT@RATE>

    輸入設備相關配置?

    Weston 服務默認需要至少一個輸入設備,如無輸入設備,則需要在 weston.ini 中的 core 段特殊設置:

    # /etc/xdg/weston/weston.ini

    [core]
    require-input=false

    總結

    以上是生活随笔為你收集整理的Buildroot 开发的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 精品国产一区二区三区在线观看 | 亚洲va韩国va欧美va精品 | 国产一区二区精品丝袜 | 国产不卡毛片 | 国产精品久久久久久福利 | 伊人激情综合网 | 蜜桃视频污在线观看 | 外国电影免费观看高清完整版 | 久久艳片www.17c.com | 久久三级精品 | 成人av影视在线 | 99热在线观看精品 | 性生活三级视频 | 噜噜噜网站 | 三级全黄的视频 | 精品久久久久久一区二区里番 | 成人录像 | 日日碰狠狠添天天爽无码av | 中文字幕在线免费观看视频 | 成人免费看高清电影在线观看 | 久久国产露脸精品国产 | 久久亚洲色图 | 蜜臀999| 泰坦尼克号3小时49分的观看方法 | 精品午夜久久久 | 国产一级黄色大片 | 亚洲一区二区三区四区在线 | 欧美日韩视频在线观看免费 | 久久激情综合网 | 久久99精品久久久 | 国产精品网友自拍 | 亚洲一区二区三区影院 | 小罗莉极品一线天在线 | 大尺度激情吻胸视频 | 免费在线国产精品 | 天天撸一撸 | 成人不卡视频 | eeuss鲁片一区二区三区在线观看 | 天天色棕合合合合合合合 | 欧美福利一区二区三区 | 好男人在线视频 | 国产一区二区三区 | 91麻豆精品国产91久久久久久久久 | zzjj国产精品一区二区 | 7777精品久久久久久 | 五十路中出 | 国产一区视频在线免费观看 | 中文字幕成人一区 | 亚洲视频四区 | 天天看天天做 | 99re视频在线 | 久久久影院 | av毛片精品| 日本资源在线 | 中文字幕一级 | 国产高清视频免费观看 | 在线观看的网站 | av网站免费在线 | 樱花影院电视剧免费 | 午夜日韩 | 国产视频综合在线 | 在线一区二区视频 | 亚洲精选在线 | 欧美日韩一二三区 | 国产日韩一区二区 | 开心色站 | 欧美一区二区三区久久精品 | 亚洲天堂123 | 91亚洲精品在线观看 | 亚洲国产免费视频 | 国产男男gay | 欧美色图中文字幕 | 69天堂网 | 免费成人av片 | 成品短视频泡芙 | 美女裸体网站久久久 | 国产男同gay网站 | 一区二区三区中文字幕 | 少妇高潮大叫好爽喷水 | 丰满人妻一区二区三区免费 | 日韩视频免费观看高清完整版在线观看 | 五月天黄色网址 | 欧美视频在线观看一区二区 | 99色在线观看 | 久久久性色精品国产免费观看 | 日本黄色精品 | 日本人dh亚洲人ⅹxx | 国产清纯白嫩初高中在线观看性色 | 欧美激情图片 | 少妇脱了内裤让我添 | 免费国产| 国产又粗又猛又色又 | 免费在线黄 | 日韩精品视频观看 | 婷婷激情成人 | 国产福利一区二区视频 | 美日韩在线 | 日本在线观看a | 国产精品夜夜夜爽阿娇 |