<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【風火輪YY3568開發板免費體驗】第三章:在 buildroot 框架中添加本地的 hello_world 軟件包以及給包打patch

Red Linux ? 來源: Red Linux ? 作者: Red Linux ? 2023-08-12 12:56 ? 次閱讀

第三章:在 buildroot 框架中添加本地的 hello_world 軟件包以及給包打patch

在第二章介紹了在buildroot框架下快樂編譯 ffmpeg之后,本章就記錄下如何在buildroot 的編譯框架中添加一個新的軟件包實現開發的一致性,這樣做的好處是保持整個構建過程的統一,要不然可能還需要自己構建自己工程的編譯環境,兼容buildroot編譯框架的好處會隨著開發軟件包的復雜度提高逐漸顯示出來這種做法的優越性。所以,本章就演示下如何根據 The Buildroot User Manual.pdf 的指導一步步完成 hello_world 工程到 builderoot package 的集成工作。

  • 將本地的 hello_world 工程集成到 buildroot package 的編譯框架
  • 如何集成 patch 的合并工作,在構建 hello_world 的自動打上這個 patch

主要參考資料:[The Buildroot User Manual.pdf](The Buildroot User Manual.pdf)


1. hello_world 到 buildroot 的集成

首先看一下 hello_world 工程本身的結構和內容:
hello_src.png
hello_mk.png
下面就是準備將 hello_world 集成到 buildroot 中作為一個 package 進行構建,這部分首先看下一 buildroot 的 manual 是怎么描述的(The Buildroot User Manual.pdf中有詳細的描述):build_pac.png

這里有關鍵的三類共計四個文件:

  1. config 文件(配置的文件)
    1. Config.in 文件,交叉編譯的工程,本次使用交叉編譯 hello_wolrd 工程,最后的可執行程序運行在 YY3568 上,所以使用這個文件
    2. Config.in.host 文件,編譯 host 的工程
  2. mk 文件(構建的文件 xxx.mk 文件,這個因為我對傳統的 makefile 比較熟悉,所以本次使用的是就是 Makefiles for generic packages
  3. hash 文件(下載的軟件包的 hash 校驗文件,xxx.hash文件,因為本次構建是直接使用的 local 的源碼文件,所以不存在文件包的校驗,所以這個文件暫時沒有)

根據上面的介紹,所以首先在 buildroot 的 package 目錄中創建 hello_world 目錄,然后創建 Config.in 和 hello_world.mk 文件,這兩個文件的內容分別如下:

Config.in 文件,本次為了演示,僅僅使用了開啟關閉編譯 hello_world 的選項:

config BR2_PACKAGE_HELLO_WORLD
	bool "hello_world"
	help
	  This is a comment that explains how to add new package to buildroot

hello_world.mk 文件:

################################################################################
#
# hello_world
#
################################################################################
HELLO_WORLD_VERSION = 0.9
HELLO_WORLD_SOURCE = hello_world
HELLO_WORLD_SITE = /home/red/Public/buildroot_sample/hello_world
HELLO_WORLD_LICENSE = GPL-3.0+
HELLO_WORLD_LICENSE_FILES = COPYING
HELLO_WORLD_INSTALL_STAGING = YES
HELLO_WORLD_SITE_METHOD = local
define HELLO_WORLD_BUILD_CMDS
$(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) all
endef

define HELLO_WORLD_INSTALL_STAGING_CMDS
$(INSTALL) -D -m 0755 $(@D)/hello_world $(STAGING_DIR)/usr/bin
endef

define HELLO_WORLD_INSTALL_TARGET_CMDS
$(INSTALL) -D -m 0755 $(@D)/hello_world $(STAGING_DIR)/usr/bin
endef

$(eval $(generic-package))

在 hello_world.mk 文件,關鍵的地方有 HELLO_WORLD_SITE_METHOD 需要設置為 local,這樣才會使用本地目錄的原始文件;HELLO_WORLD_SITE 需要設置為本地 hello_world 工程源碼的目錄,而非 hello_world 工程(文件夾)所在的目錄。

最后要修改的就是讓 buildroot 的 Config.in 引用的 hello_world 的 Config.in,即相關的 diff 文件:

diff --git a/buildroot/package/Config.in b/buildroot/package/Config.in
index d18c688..d06ec07 100644
--- a/buildroot/package/Config.in
+++ b/buildroot/package/Config.in
@@ -10,6 +10,7 @@ menu "Target packages"
 	source "package/skeleton-init-sysv/Config.in"
 
 menu "Audio and video applications"
+	source "package/hello_world/Config.in"
 	source "package/alsa-utils/Config.in"
 	source "package/alsa-plugins/Config.in"
 	source "package/atest/Config.in"

因為我會開發一個視頻處理有關的應用,所以引用 hello_world 工程我就放在了 Audio and video applications。
這樣啟動 buildroot menuconfig 配置找到 hello_world 的配置選項,選中進行構建。
hello_kc.png
hello_build.png

將編譯出來的 hello_world 通過 scp 發送到 YY3568,打印如下:
hello_ok.png

2. 給hello_world創建一個 patch,并依靠 buildroot 在構建的時候合并 patch 并編譯

有了第一部分的基礎后,我們進階一下,給 hello_world 打一個補丁,讓 buildroot 在構建這個工程的時候先打上補丁在進行編譯。

這里我們需要參看這部分內容:
build_patch.png

首先我們創建這個補丁,補丁文件命名為0001-say-sth-else.patch:

diff --git a/main.c b/main.c
index dd0e127..fcbbe7e 100644
--- a/main.c
+++ b/main.c
@@ -2,6 +2,6 @@
 
 int main(int argc, char *argv[])
 {
-	printf("red say hello world to YY3568n");
+	printf("red say sth else to YY3568 just for demonstate how to patch package in buildrootn");
 	return 0;
 }

放在 buildroot/package/hello_world 目錄:
hello_patch.png

接著需要將原始的 hello_world 工程打包為一個壓縮包,比如 hello_world.tar。然后修改 hello_world.mk 文件如下:

--- /tmp/tar_o.txt	2023-08-12 12:41:28.772370902 +0800
+++ /tmp/tar.txt	2023-08-12 12:41:53.564330270 +0800
@@ -4,12 +4,12 @@
 #
 ################################################################################
 HELLO_WORLD_VERSION = 0.9
-HELLO_WORLD_SOURCE = hello_world
-HELLO_WORLD_SITE = /home/red/Public/buildroot_sample/hello_world
+HELLO_WORLD_SOURCE = hello_world.tar
+HELLO_WORLD_SITE = /home/red/Public/buildroot_sample
 HELLO_WORLD_LICENSE = GPL-3.0+
 HELLO_WORLD_LICENSE_FILES = COPYING
 HELLO_WORLD_INSTALL_STAGING = YES
-HELLO_WORLD_SITE_METHOD = local
+HELLO_WORLD_SITE_METHOD = file
 define HELLO_WORLD_BUILD_CMDS
 $(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) all
 endef

然后刪除 buildroot/output/rockchip_rk3568/build/hello_world-0.9 目錄,重新構建:
hello_patch_ok.png

運行新編譯出來的hello_world 到 YY3568,可以看到打印提示就變了:
hello_patch_pr.png

切記不能用之前的 HELLO_WORLD_SITE_METHOD = local 這種方法實際我測試發現不會有打 patch 這個動作。

至此,就記錄了如何為 buildroot 添加一個本地的軟件包以及打 patch 的操作,將遠端的軟件包納入 buildroot package 進行構建的方法是類似的,這里暫時就不記錄了。這里提示下,如果 patch 是在遠端的,該怎么辦呢?需要就對應的 patch 文件添加到變量 _PATCH,這部分 The Buildroot User Manual.pdf 也有介紹。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11001

    瀏覽量

    206847
  • 開發板
    +關注

    關注

    25

    文章

    4506

    瀏覽量

    94458
  • 編譯
    +關注

    關注

    0

    文章

    622

    瀏覽量

    32417
  • RK3568
    +關注

    關注

    4

    文章

    441

    瀏覽量

    4226
  • Buildroot
    +關注

    關注

    1

    文章

    46

    瀏覽量

    1304
收藏 人收藏

    評論

    相關推薦

    使用YY3568開發板部署AI能力

    YY3568開發板是 「風火輪科技」 基于Rockchip RK3568 芯片平臺設計的開發板,四核 64Cortex-A55 核,主頻最高
    的頭像 發表于 11-28 10:59 ?1344次閱讀
    使用<b class='flag-5'>YY3568</b><b class='flag-5'>開發板</b>部署AI能力

    YY3568適配OpenHarmony

    YY3568開發板簡介 YY3568開發板 YY3568開發板是 「
    的頭像 發表于 04-07 15:58 ?1829次閱讀

    【新品體驗】風火輪YY3568開發板免費體驗

    YY3568主板基于 Rockchip RK3568 芯片平臺,四核 64位 Cortex-A55 核,主頻最高達 2GHz,集成雙核心架構GPU以及高效能NPU,芯片性能優異。開發板
    發表于 06-25 14:35

    風火輪YY3568開發板免費體驗】開箱篇 -----最好的RK3568開發板賞析

    風火輪YY3568開發板采用RK3568芯片設計,RK3568明星芯片是一款瑞芯微電子定位中高端的通用型SoC。該芯片采用了先進的22nm工
    發表于 08-07 10:00

    風火輪YY3568開發板免費體驗】使用之二:系統測試安卓

    開發板,如下圖所示: 按住設備上的 RECOVERY (恢復)鍵并保持接上電源 大約兩三秒鐘后,松開 RECOVERY 鍵 UART DEBUG測試: YY3568
    發表于 08-09 21:01

    風火輪YY3568開發板免費體驗】01.開箱、燒寫系統

    吧。 首先就是我最喜歡的開發板啦,YY3568,板載2GB RAM和16GB EMMC,真的太棒了,里面核心已經底板上面安裝的了,還有WIFI模塊和天線。 接下來就是送的7寸電容式
    發表于 08-10 19:35

    風火輪YY3568開發板免費體驗】第二YY3568 ffmpeg 編譯以及 nanogui 移植

    本章主要記錄如何移植 nanogui 以及 buildroot 下快樂編譯 ffmpeg: nanogui 是一個輕量級的圖形開發庫,底層使用 wayland
    發表于 09-11 15:29

    風火輪YY3568開發板免費體驗】第三章 buildroot 框架添加本地hello_world 軟件包以及包打patch

    第三章 buildroot 框架添加本地
    發表于 09-11 15:35

    風火輪YY3568開發板免費體驗】第四 nanogui 添加 VideoView 控件,支持 rtsp 視頻流獲取并顯示

    就可以定位到出錯的代碼位置。 3. solus 上編譯 buildroot 家里的一臺筆記本,我安裝的是 solus,軟件包可能沒有 fedora 那么齊全,所以編譯過程碰到了一
    發表于 09-11 15:41

    風火輪YY3568開發板免費體驗】第五 Solus 上運行 npu 例程并搭建 nfs 環境實現在 YY3568 上實際運行 npu 例程

    經過前面幾章的鋪墊,接下來的章節就開始進入到 NPU 相關的開發測試了。本章呢,記錄下我分別在 Solus 上對 npu 相關例程的仿真以及實際 YY3568 上進行的 npu 例程
    發表于 09-11 15:44

    風火輪YY3568開發板免費體驗】+ YY3568安裝運行Unity的自制游戲教程范例

    ,并成功自己的開發筆記本,以及手機(Android-12)上運行,因此想測試一下能否YY3568的Android-11系統上運行。 根
    發表于 11-14 11:44

    風火輪YY3568開發板免費體驗】+ YY3568安裝運行Home-Assistant服務端

    電腦上使用putty軟件,通過ssh方式登錄到YY3568。 2.1.1. 編譯安裝最新版Python-3.12 由于YY3568采用的是Debian-10系
    發表于 11-14 11:49

    風火輪科技YY3568開發板新品上市

    ? 風火輪近來又推出一款新的嵌入式主板YY3568 ,它是一款基于瑞芯微RK3568 4核處理器的ARM主板,性價比極高;現在瑞芯微的旗艦款是rk3588主打性能,這個rk3568是主
    的頭像 發表于 04-27 14:50 ?1129次閱讀
    <b class='flag-5'>風火輪</b>科技<b class='flag-5'>YY3568</b><b class='flag-5'>開發板</b>新品上市

    風火輪科技又發新品啦--YY3568開發板

    風火輪近來又推出一款新的嵌入式主板YY3568,它是一款基于瑞芯微RK3568 4核處理器的ARM主板,性價比極高;現在瑞芯微的旗艦款是rk3588主打性能,這個rk3568是主打性價
    的頭像 發表于 05-05 16:41 ?669次閱讀
    <b class='flag-5'>風火輪</b>科技又發新品啦--<b class='flag-5'>YY3568</b><b class='flag-5'>開發板</b>

    RK3568 MIPI CSI攝像頭GC8034適配工作流程

    首先介紹一下硬件。主板為風火輪科技的YY3568開發板,主控RK3568。此開發板的相關介紹可以參考
    的頭像 發表于 07-04 09:27 ?3171次閱讀
    RK<b class='flag-5'>3568</b> MIPI CSI攝像頭GC8034適配工作流程
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>