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

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

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

【風(fēng)火輪YY3568開發(fā)板免費(fèi)體驗(yàn)】第三章:在 buildroot 框架中添加本地的 hello_world 軟件包以及給包打patch

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

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

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

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

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


1. hello_world 到 buildroot 的集成

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

這里有關(guān)鍵的三類共計(jì)四個(gè)文件:

  1. config 文件(配置的文件)
    1. Config.in 文件,交叉編譯的工程,本次使用交叉編譯 hello_wolrd 工程,最后的可執(zhí)行程序運(yùn)行在 YY3568 上,所以使用這個(gè)文件
    2. Config.in.host 文件,編譯 host 的工程
  2. mk 文件(構(gòu)建的文件 xxx.mk 文件,這個(gè)因?yàn)槲覍?duì)傳統(tǒng)的 makefile 比較熟悉,所以本次使用的是就是 Makefiles for generic packages
  3. hash 文件(下載的軟件包的 hash 校驗(yàn)文件,xxx.hash文件,因?yàn)楸敬螛?gòu)建是直接使用的 local 的源碼文件,所以不存在文件包的校驗(yàn),所以這個(gè)文件暫時(shí)沒有)

根據(jù)上面的介紹,所以首先在 buildroot 的 package 目錄中創(chuàng)建 hello_world 目錄,然后創(chuàng)建 Config.in 和 hello_world.mk 文件,這兩個(gè)文件的內(nèi)容分別如下:

Config.in 文件,本次為了演示,僅僅使用了開啟關(guān)閉編譯 hello_world 的選項(xiàng):

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 文件,關(guān)鍵的地方有 HELLO_WORLD_SITE_METHOD 需要設(shè)置為 local,這樣才會(huì)使用本地目錄的原始文件;HELLO_WORLD_SITE 需要設(shè)置為本地 hello_world 工程源碼的目錄,而非 hello_world 工程(文件夾)所在的目錄。

最后要修改的就是讓 buildroot 的 Config.in 引用的 hello_world 的 Config.in,即相關(guān)的 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"

因?yàn)槲視?huì)開發(fā)一個(gè)視頻處理有關(guān)的應(yīng)用,所以引用 hello_world 工程我就放在了 Audio and video applications。
這樣啟動(dòng) buildroot menuconfig 配置找到 hello_world 的配置選項(xiàng),選中進(jìn)行構(gòu)建。
hello_kc.png
hello_build.png

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

2. 給hello_world創(chuàng)建一個(gè) patch,并依靠 buildroot 在構(gòu)建的時(shí)候合并 patch 并編譯

有了第一部分的基礎(chǔ)后,我們進(jìn)階一下,給 hello_world 打一個(gè)補(bǔ)丁,讓 buildroot 在構(gòu)建這個(gè)工程的時(shí)候先打上補(bǔ)丁在進(jìn)行編譯。

這里我們需要參看這部分內(nèi)容:
build_patch.png

首先我們創(chuàng)建這個(gè)補(bǔ)丁,補(bǔ)丁文件命名為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 工程打包為一個(gè)壓縮包,比如 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 目錄,重新構(gòu)建:
hello_patch_ok.png

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

切記不能用之前的 HELLO_WORLD_SITE_METHOD = local 這種方法實(shí)際我測(cè)試發(fā)現(xiàn)不會(huì)有打 patch 這個(gè)動(dòng)作。

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

聲明:本文內(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)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11123

    瀏覽量

    207921
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4771

    瀏覽量

    96190
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    646

    瀏覽量

    32672
  • RK3568
    +關(guān)注

    關(guān)注

    4

    文章

    479

    瀏覽量

    4723
  • Buildroot
    +關(guān)注

    關(guān)注

    1

    文章

    48

    瀏覽量

    1342
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用YY3568開發(fā)板部署AI能力

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

    YY3568適配OpenHarmony

    YY3568開發(fā)板簡(jiǎn)介 YY3568開發(fā)板 YY3568開發(fā)板是 「
    的頭像 發(fā)表于 04-07 15:58 ?2158次閱讀

    【新品體驗(yàn)】風(fēng)火輪YY3568開發(fā)板免費(fèi)體驗(yàn)

    YY3568主板基于 Rockchip RK3568 芯片平臺(tái),四核 64位 Cortex-A55 核,主頻最高達(dá) 2GHz,集成雙核心架構(gòu)GPU以及高效能NPU,芯片性能優(yōu)異。開發(fā)板
    發(fā)表于 06-25 14:35

    風(fēng)火輪YY3568開發(fā)板免費(fèi)體驗(yàn)】開箱篇 -----最好的RK3568開發(fā)板賞析

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

    風(fēng)火輪YY3568開發(fā)板免費(fèi)體驗(yàn)】01.開箱、燒寫系統(tǒng)

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

    風(fēng)火輪YY3568開發(fā)板免費(fèi)體驗(yàn)】第二YY3568 ffmpeg 編譯以及 nanogui 移植

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

    風(fēng)火輪YY3568開發(fā)板免費(fèi)體驗(yàn)】第三章 buildroot 框架添加本地hello_world 軟件包以及包打patch

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

    風(fēng)火輪YY3568開發(fā)板免費(fèi)體驗(yàn)】第四 nanogui 添加 VideoView 控件,支持 rtsp 視頻流獲取并顯示

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

    風(fēng)火輪YY3568開發(fā)板免費(fèi)體驗(yàn)】第五 Solus 上運(yùn)行 npu 例程并搭建 nfs 環(huán)境實(shí)現(xiàn)在 YY3568 上實(shí)際運(yùn)行 npu 例程

    經(jīng)過前面幾章的鋪墊,接下來的章節(jié)就開始進(jìn)入到 NPU 相關(guān)的開發(fā)測(cè)試了。本章呢,記錄下我分別在 Solus 上對(duì) npu 相關(guān)例程的仿真以及實(shí)際 YY3568 上進(jìn)行的 npu 例程
    發(fā)表于 09-11 15:44

    風(fēng)火輪YY3568開發(fā)板免費(fèi)體驗(yàn)】+ YY3568安裝運(yùn)行Unity的自制游戲教程范例

    ,并成功自己的開發(fā)筆記本,以及手機(jī)(Android-12)上運(yùn)行,因此想測(cè)試一下能否YY3568的Android-11系統(tǒng)上運(yùn)行。 根
    發(fā)表于 11-14 11:44

    風(fēng)火輪科技YY3568開發(fā)板新品上市

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

    風(fēng)火輪科技又發(fā)新品啦--YY3568開發(fā)板

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

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

    首先介紹一下硬件。主板為風(fēng)火輪科技的YY3568開發(fā)板,主控RK3568。此開發(fā)板的相關(guān)介紹可以參考
    的頭像 發(fā)表于 07-04 09:27 ?4874次閱讀
    RK<b class='flag-5'>3568</b> MIPI CSI攝像頭GC8034適配工作流程

    風(fēng)火輪科技第三開發(fā)板youyeetoo R1簡(jiǎn)介

    2023年的尾聲之際,風(fēng)火輪科技如約而至,再次為我們帶來驚喜。繼前兩款備受贊譽(yù)的開發(fā)板之后,他們?cè)俅瓮瞥隽巳碌?b class='flag-5'>第三款開發(fā)板--youye
    的頭像 發(fā)表于 01-02 14:08 ?1150次閱讀
    <b class='flag-5'>風(fēng)火輪</b>科技<b class='flag-5'>第三</b>款<b class='flag-5'>開發(fā)板</b>youyeetoo R1簡(jiǎn)介

    迅為電子RK3588S開發(fā)板第三章Buildroot系統(tǒng)功能測(cè)試

    迅為電子RK3588S開發(fā)板第三章Buildroot系統(tǒng)功能測(cè)試
    的頭像 發(fā)表于 09-02 14:45 ?435次閱讀
    迅為電子RK3588S<b class='flag-5'>開發(fā)板</b><b class='flag-5'>第三章</b><b class='flag-5'>Buildroot</b>系統(tǒng)功能測(cè)試