【风火轮YY3568开发板免费体验】第三章:在 buildroot 框架中添加本地的 hello_world 软件包以及给包打patch

2023-08-12 14:28:17 来源:Red Linux
第三章:在 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_world 集成到 buildroot 中作为一个 package 进行构建,这部分首先看下一 buildroot 的 manual 是怎么描述的(The Buildroot User Manual.pdf中有详细的描述):

这里有关键的三类共计四个文件:

config 文件(配置的文件) Config.in 文件,交叉编译的工程,本次使用交叉编译 hello_wolrd 工程,最后的可执行程序运行在 YY3568 上,所以使用这个文件Config.in.host 文件,编译 host 的工程mk 文件(构建的文件 xxx.mk 文件,这个因为我对传统的 makefile 比较熟悉,所以本次使用的是就是 Makefiles for generic packages)hash 文件(下载的软件包的 hash 校验文件,xxx.hash文件,因为本次构建是直接使用的 local 的源码文件,所以不存在文件包的校验,所以这个文件暂时没有)

根据上面的介绍,所以首先在 buildroot 的 package 目录中创建 hello_world 目录,然后创建 Config.in 和 hello_world.mk 文件,这两个文件的内容分别如下:

Config.in 文件,本次为了演示,仅仅使用了开启关闭编译 hello_world 的选项:

config BR2_PACKAGE_HELLO_WORLDbool "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.9HELLO_WORLD_SOURCE = hello_worldHELLO_WORLD_SITE = /home/red/Public/buildroot_sample/hello_worldHELLO_WORLD_LICENSE = GPL-3.0+HELLO_WORLD_LICENSE_FILES = COPYINGHELLO_WORLD_INSTALL_STAGING = YESHELLO_WORLD_SITE_METHOD = localdefine HELLO_WORLD_BUILD_CMDS$(MAKE) $(TARGET_CONFIGURE_OPTS) -C $(@D) allendefdefine HELLO_WORLD_INSTALL_STAGING_CMDS$(INSTALL) -D -m 0755 $(@D)/hello_world $(STAGING_DIR)/usr/binendefdefine HELLO_WORLD_INSTALL_TARGET_CMDS$(INSTALL) -D -m 0755 $(@D)/hello_world $(STAGING_DIR)/usr/binendef$(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.inindex 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_world 通过 scp 发送到 YY3568,打印如下:

2. 给hello_world创建一个 patch,并依靠 buildroot 在构建的时候合并 patch 并编译

有了第一部分的基础后,我们进阶一下,给 hello_world 打一个补丁,让 buildroot 在构建这个工程的时候先打上补丁在进行编译。

这里我们需要参看这部分内容:

首先我们创建这个补丁,补丁文件命名为0001-say-sth-else.patch:

diff --git a/main.c b/main.cindex 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_world 工程打包为一个压缩包,比如 hello_world.tar。然后修改 hello_world.mk 文件如下:

--- /tmp/tar_o.txt2023-08-12 12:41:28.772370902 +0800+++ /tmp/tar.txt2023-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_world 到 YY3568,可以看到打印提示就变了:

切记不能用之前的 HELLO_WORLD_SITE_METHOD = local这种方法实际我测试发现不会有打 patch 这个动作。

至此,就记录了如何为 buildroot 添加一个本地的软件包以及打 patch 的操作,将远端的软件包纳入 buildroot package 进行构建的方法是类似的,这里暂时就不记录了。这里提示下,如果 patch 是在远端的,该怎么办呢?需要就对应的 patch 文件添加到变量 _PATCH,这部分 The Buildroot User Manual.pdf 也有介绍。

标签:

【风火轮YY3568开发板免费体验】第三章:在 buildroot 框架中添加本地的 hello_world 软件包以及给包打patch

2023-08-12

汉朝第一将卫青简历 汉朝第一将卫青

2023-08-12

幸有我来山未孤

2023-08-12

C视频丨虞世南楷书《大运帖》页:经典的书法名帖、隽永的为政思想丨汉字中国100讲㊹

2023-08-12

浦东将建10万平方米研发创新中心 打造现代种业“张江种谷”

2023-08-12

受大模型等拖累,科大讯飞上半年净利暴跌74%,C端业务受益营收增长20%

2023-08-12

微营销流程(微营销教程)

2023-08-12

7月金融数据超预期回落:社融增量创7年新低,居民贷款疲软

2023-08-11

亚威股份(002559.SZ):拟受让江苏疌泉亚威沣盈智能制造产业基金合伙份额

2023-08-11

美国的真假敌人

2023-08-11

连花杯·我和中国药|追逐传统文化,践行中医梦想

2023-08-11

土耳其经常账户出现罕见盈余 经济仍脆弱不堪

2023-08-11

民富国际(08511.HK)一季度收益约70万港元 同比减少约90.7%

2023-08-11

项目警长丨东营经济技术开发区“项目警长”为重大项目建设增加平安动力

2023-08-11

8K技术生态论坛在沪举行,企业与创作者共探8K技术发展现状及未来

2023-08-11

excel表格键盘方向键无法移动(excel表格键盘方向键)

2023-08-11

小米13 Ultra同款基材!Redmi K60至尊版搭载华星C7屏

2023-08-11

娱乐行业经营许可证申请注意事项有哪些

2023-08-11

车评头条:更全能的多功能家轿 试驾沃兰多48V轻混版

2023-08-11

量化做实“三年行动计划” 东莞“产改”工作落地见效

2023-08-11

福田汽车:今年新能源汽车已累计销售1.88万辆

2023-08-11

江苏省海安县发布高温黄色预警

2023-08-11

国林科技:截至2023年8月10日,公司股东人数(合并普通账户和融资融券信用账户)共计11761户

2023-08-11

2023廊坊霸州市非蓄滞洪区就业岗位有哪些?

2023-08-11

2023-2026世界羽联世界巡回赛总决赛落户杭州

2023-08-11

第七届广西万村篮球赛桂平市级赛开赛

2023-08-11

Godox神牛携新品亮相,影像系统解决方打造光影新体验

2023-08-11

【新甘肃云·融媒集萃】甘谷县:加强水土治理 改善人居环境

2023-08-11

河道涨水7人遇难,请远离“野生景点”

2023-08-11

科技服务助力乡村振兴

2023-08-11

Copyright ©  2015-2023 非洲频道网版权所有  备案号:沪ICP备2022005074号-8   联系邮箱:58 55 97 3@qq.com