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

    文章

    10990

    浏览量

    206738
  • 开发板
    +关注

    关注

    25

    文章

    4434

    浏览量

    94017
  • 编译
    +关注

    关注

    0

    文章

    615

    浏览量

    32396
  • RK3568
    +关注

    关注

    4

    文章

    433

    浏览量

    4130
  • Buildroot
    +关注

    关注

    1

    文章

    46

    浏览量

    1297
收藏 人收藏

    评论

    相关推荐

    使用YY3568开发板部署AI能力

    YY3568开发板是 「风火轮科技」 基于Rockchip RK3568 芯片平台设计的开发板,四核 64Cortex-A55 核,主频最高
    的头像 发表于 11-28 10:59 1299次阅读
    使用<b class='flag-5'>YY3568</b><b class='flag-5'>开发板</b>部署AI能力

    YY3568适配OpenHarmony

    YY3568开发板简介 YY3568开发板 YY3568开发板是 「
    的头像 发表于 04-07 15:58 1788次阅读

    【新品体验】风火轮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 1110次阅读
    <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 641次阅读
    <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 2910次阅读
    RK<b class='flag-5'>3568</b> MIPI CSI摄像头GC8034适配工作流程