往Buildroot中增加Qt项目
前言
目的:应用开发时最初是没有和buildroot中一起编译时,后面应用程序写的差不多时,同事问我怎么把应用程序打包到文件系统中,然后发布时跟随文件系统一起发布,并且增加打包启动脚本。所以本文在已经可以单独编译的基础上把项目放入buildroot一起编译。
应用程序单独可以编译(buildroot 有make sdk 单独打包编译环境)。
本文简化了项目部分内容,仅以demo 为项目代号,记录在buildroot中增加qt项目的过程。
环境:ubuntu20.04 、瑞芯微 RV1109 SDK
实现方法
1. 在app 目录下创建一个qt工程
创建过程省略,当然后创建工程的路径也可以任务指定,不一定非得在SDK中的app目录下,只是app下面有很多其它的demo,这里也就放在app路径下了。这里假设app目录下创建工程文件名为demo/gui/demo.pro 工程
2.buildroot的操作
在SDK路径/buildroot/package 创建一个demo 文件夹,文件夹中分别创建二个文件,一个demo.mk 另一个为Config.in ; 内容分别为
demo.mk:
################################################################################
#
# demo
#
################################################################################DEMO_VERSION = 1.0
DEMO_SITE = ${TOPDIR}/../app/demo
DEMO_SITE_METHOD = localDEMO_LICENSE = Apache V2.0
DEMO_LICENSE_FILES = NOTICEdefine DEMO_CONFIGURE_CMDScd $(@D)/gui/;$(TARGET_MAKE_ENV) $(HOST_DIR)/bin/qmake ;
endefdefine DEMO_BUILD_CMDSsource $(@D)/gui/../work_sdk_path.sh; $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/gui/
endefdefine DEMO_INSTALL_TARGET_CMDS$(@D)/app_install.sh $(TARGET_DIR)
endef$(eval $(generic-package))
注意这里 多了个/gui/ ,因为写建工程时demo.pro 是放在工程目录gui下方的。
Config.in:
config BR2_PACKAGE_DEMObool "demo"helpthis is a app for QT Buildroot demo
在/buildroot/package 路径下增加“source "package/demo/Config.in"”
menu "Target packages"source "package/busybox/Config.in"source "package/rockchip/Config.in"source "package/skeleton/Config.in"source "package/skeleton-custom/Config.in"source "package/skeleton-init-common/Config.in"source "package/skeleton-init-none/Config.in"source "package/skeleton-init-systemd/Config.in"source "package/skeleton-init-sysv/Config.in"source "package/testApp/Config.in"source "package/demo/Config.in"
3.验证使用buildroot 编译是否正确
先设置编译buildroot的环境,执行source envsetup.sh rockchip_rv1126_rv1109_facial_gate。下面是查看当前sdk使用哪个环境编译的。
ubuntu:~/work/rv1109_rq/rv1126_1109_20220429$ ./build.sh -h rootfs
###Current SDK Default [ rootfs ] Build Command###
source envsetup.sh rockchip_rv1126_rv1109_facial_gate
make
然后再进入buildroot目录 执行
(1)make demo-dirclean 删除掉工buildroot缓存的工程目录 ,因为在测试过程中,我们的文件一直是放在app下,有时增加或者修改(单独编译qmake)与buildroot下的不同,所以需要先clean 删除。
(2)make demo-rebuild 进行编译,看是否报错
如果不报错,就接近使用了。
4.buildroot 的menuconfig中设置
选择BR2_PACKAGE_DEMO 后面在buildrootk 整个make 就可以执行整个流程了
实际问题
从上面的流程中,只是一般性的描述了如何把一个工程放入buildroot下编译,并且编译成功,但并没有解决打包的问题,同时增加的buildrot,因为文件目录众多,关系有点绕。其他人只关心怎么把应用程序、配置、资源文件、启动脚本打包进文件系统。至于buildroot 如果去配置,他们不关心,也不想经常去改。且多人配合时,路径问题如何管理。
路径管理
多人开发时引用头文件或者库的路径问题,怎么才不至于不同开发人员间频繁的修改代码或者配置
下面方式通过设置WORK_SDK_PATH 来实现不同路径的切换
INCLUDEPATH += $(WORK_SDK_PATH)/host/arm-buildroot-linux-gnueabihf/sysroot/usr/include/easymediaINCLUDEPATH += $(WORK_SDK_PATH)/rv1126_1109_20220429/external/rkfacialINCLUDEPATH += $(WORK_SDK_PATH)/rv1126_1109_20220429/external/rknpu/rknn/rknn_api/librknn_api/includeINCLUDEPATH += $(WORK_SDK_PATH)/host/arm-buildroot-linux-gnueabihf/sysroot/usr/include/drm
程序编译时环境配置
修改DEMO_BUILD_CMDS
source $(@D)/gui/../work_sdk_path.sh; $(TARGET_MAKE_ENV) $(MAKE) -C $(@D)/gui/
来设置“路径管理”中设置的变量,这个脚本在app/demo/work_sdk_path.sh 路径下。
打包时调用自定义脚本
修改DEMO_INSTALL_TARGET_CMDS
$(@D)/app_install.sh $(TARGET_DIR)
这个脚本在app/demo/app_install.sh 路径下
注意$(@D) 表示的并不是app/demo的目录,表示的是buildroot/output/build/demo 下的路径
相关文章:
往Buildroot中增加Qt项目
前言 目的:应用开发时最初是没有和buildroot中一起编译时,后面应用程序写的差不多时,同事问我怎么把应用程序打包到文件系统中,然后发布时跟随文件系统一起发布,并且增加打包启动脚本。所以本文在已经可以单独编译的基…...
C#-Tolewer和ToUpper的使用
目录 简介: 好处: 过程: 总结: 简介: 字符串是不可变的,所以这些函数都不会直接改变字符串的内容,而是把修改后的字符串的值通过函数返回值的形式返回。 ToLower和ToUpper是字符串处理函数,用于将字符中的英文字母转换为小…...
RabbitMQ集群搭建和测试总结_亲测
RabbiMQ简介 RabbitMQ是用Erlang开发的,集群非常方便,因为Erlang天生就是一门分布式语言,但其本身并不支持负载均衡。 RabbitMQ模式 RabbitMQ模式大概分为以下三种: (1)单一模式。 (2)普通模式(默认的集群模式)。 (3)镜像模式(把需要的队列…...
SQLSTATE[IMSSP]: The active result for the query contains no fields.
我的是SQL server 报错场景,代码: $psendmx_sql"SET IDENTITY_INSERT PSENDMX ON;INSERT INTO psendmx (DJBH,MIBH,MXBH,SPDM,GG1DM,GG2DM,SL,SL_2,CKJ,ZK,DJ,DJ_1,JE,HH) VALUES {$mx_values};SET IDENTITY_INSERT PSENDMX OFF;"; $a$db_er…...
在Flutter应用内部实现分屏功能
前言 这一次被要求实现屏幕上同时展示两个页面,并且两个页面的逻辑,功能互不影响,通俗一点讲就是在Flutter内部实现一个类似于分屏的功能,这可难不倒我。 方法 要在 Flutter 中实现一个屏幕的上半部分和下半部分展示不同的页面…...
Docker常用操作命令(二)
Docker常用操作命令(二) 11、进入容器 docker exec -it 容器名称or容器ID /bin/bash [rootzch01 ~]# docker exec -it 973ff3caff19 /bin/bash 退出容器 root973ff3caff19:/# exit 12、查看容器中的进程 docker top 容器名称or容器ID [rootzch01 ~]# docker top 973ff3c…...
vue3 tailwindcss的使用
首先安装依赖: npm install -D tailwindcsslatest postcsslatest autoprefixerlatestnpm i -D unocss 然后vite.config.ts中 引入 import Unocss from unocss/viteexport default defineConfig({plugins: [Unocss(),],})终端执行: npx tailwindcss in…...
redis 基础篇(redis 理解)
目录 redis 特性介绍 redis 的一些特性(优点) 1. 在内存中存储数据 2. 可编程的 3. 可扩展 4. 持久化 5. 支持集群 6. 高可用 redis 的应用场景 数据库 作缓存 会话存储 作消息队列 redis 不适合做的事情 redis 介绍 redis 客户端形态 命…...
C++系列-函数重载
C系列-函数重载 函数重载函数重载的条件函数重载注意事项引用作为重载函数重载遇到默认参数 函数重载 函数名可以相同, 提高复用性 函数重载的条件 同一个作用域下函数名相同函数参数不同 – 参数个数不同 – 参数顺序不同 – 参数类型不同不可以使用返回值作为重…...
Linux scp命令
scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。 scp 是加密的,rcp 是不加密的,scp 是 rcp 的加强版。 scp [可选参数] file_source file_target 参数说明: -1: 强制scp命令使用协议ss…...
vue 简单实验 v-bind 变量与html属性绑定
1.代码 <script src"https://unpkg.com/vuenext" rel"external nofollow" ></script> <div id"bind-attribute"><span v-bind:title"message">鼠标悬停几秒钟查看此处动态绑定的提示信息!</sp…...
114.(cesium篇)cesium去掉时间轴并用按钮控制运动
地图之家总目录(订阅之前必须详细了解该博客) 完整代码工程包下载,运行如有问题,可“私信”博主。效果如下所示: cesium去掉时间轴并用按钮控制运动 下面献上完整代码,代码重要位置会做相应解释 <html lang...
2023年清洁能源与智能电网国际会议(CCESG 2023)
会议简介 Brief Introduction 2023年清洁能源与智能电网国际会议(CCESG 2023) 会议时间:2023年 召开地点:中国南宁 大会官网:CCESG 2023-2023 International Joint Conference on Clean Energy and Smart Grid 由IASED主办, CoreS…...
RISC-V中国峰会 | 256核服务器高调亮相,谁与争锋?
8月23日,第三届RISC-V中国峰会(RISC-V Summit China 2023)在北京香格里拉饭店正式开幕,来自世界各地的行业精英汇聚一堂,为RISC-V生态系统建言献策,凝心聚力! 中国工程院院士倪光南、RISC-V国际…...
树套树小结
树状数组套权值线段树,实现过程类似主席树,采用动态开点实现 https://www.luogu.com.cn/problem/P3380 树状数组部分 线段树部分...
android 解决sdk代码冲突
1. 在引用sdk的外面添加排除sdk implementation ("androidx.core:core-ktx:1.9.0"){exclude (group:androidx.appcompat, module:appcompat)} 2. 全局指定对应的sdk版本 configurations.all {resolutionStrategy.eachDependency { DependencyResolveDetails detail…...
C++逆天合集
1.基础知识 1. 创建 编译 运行 touch a.cpp gedit a.cpp g -o a.out a.cpp ./a.out 2. a 等价于a a 1 3. ::运算符 4. 类型转换 赋给无符号类型超出其表达范围时,对总数取模得余数 赋给带符号类型超出其表达范围时,结…...
stm32之15.超声波与灯光功能一起实现(进阶)
主函数代码修改 --------------------- 源码 int main(void) {uint32_t t0;uint32_t distance;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);led_init();key_init();/* 初始化串口1波特率为115200bps,若发送/接收数据有乱码,请检查PLL */usart1_ini…...
美创科技荣获“2023年网络安全优秀创新成果大赛—杭州分站赛”两项优胜奖
近日,由浙江省互联网信息办公室指导、中国网络安全产业联盟(CCIA)主办,浙江省网络空间安全协会承办的“2023年网络安全优秀创新成果大赛-杭州分站赛”正式公布评选结果。 经专家评审,美创科技报名参赛的解决方案—“医…...
形转化理论SYS方程组系数推导的现状:进展、成就与挑战
作者:温沛林日期:2026年5月20日摘要形转化理论(FTT)的核心动力学内核——形转化最小赋予系统(SYS)方程组——的系数完全确定,是从一个自洽的数学框架走向可计算、可检验物理模型的关键枢纽。本文…...
实验7全流程
## 实验七:微服务综合项目实战(零基础全流程)本实验基于 **Spring Boot 3.5.x** **Spring Cloud 2025.0.1** **RabbitMQ 4.2.3** **Redis 7.x**,带你从零搭建一个完整的电商下单系统: **用户请求 → Gateway网关 …...
QGIS 3.28.3 保姆级教程:手把手教你下载天地图影像/矢量瓦片(附完整参数与避坑指南)
QGIS 3.28.3 天地图数据获取全攻略:从零配置到高效下载 天地图作为国内权威的地理信息数据源,为开发者、学生和研究人员提供了丰富的影像和矢量数据。但对于刚接触QGIS的新手来说,如何正确配置参数、避开常见陷阱并高效下载所需数据ÿ…...
JeecgBoot 低代码平台:协同工作与 Flowable 流程审批,如何选?
JeecgBoot 低代码平台两模块引困惑很多团队在接入 JeecgBoot 低代码平台后,面对 "协同工作" 和 "Flowable 流程审批" 两个模块时常常陷入困惑:两个都是处理审批流程的,到底用哪个?能混着用吗?设计…...
躲猫猫书店管理系统
选题背景随着互联网技术的飞速发展和电子商务的普及,传统实体书店面临着前所未有的挑战与机遇。一方面,线上购书平台凭借其便捷性、价格优势和海量选择,分流了大量读者;另一方面,实体书店独特的文化氛围、沉浸式阅读体…...
别再只用BackgroundImage了!C# WinForm窗体背景图5种方法全解析(含PictureBox与资源文件实战)
别再只用BackgroundImage了!C# WinForm窗体背景图5种方法全解析 当我们需要为WinForm窗体添加背景图时,很多开发者会条件反射地使用BackgroundImage属性。这种习惯性选择虽然简单,但在实际项目中可能会遇到性能瓶颈、内存泄漏或适配问题。本文…...
10分钟打造专属AI歌手:Retrieval-based-Voice-Conversion-WebUI语音克隆终极指南
10分钟打造专属AI歌手:Retrieval-based-Voice-Conversion-WebUI语音克隆终极指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retr…...
2026年最容易上手的5个AI副业
前言: 2026年,AI工具已经彻底改变了副业的门槛。过去需要3-5年积累的技能,借助AI可能只需3-5周就能开始接单赚钱。 这篇文章精选了5个最容易上手、最快出收益的AI副业方向,每个方向都附上了具体操作路径。 一、为什么现在是做AI副业的最好时机? 三个关键信号: 需求爆发…...
ANSYS Workbench实战:用网格自适应搞定超弹性橡胶大变形不收敛(附命令流)
ANSYS Workbench实战:超弹性橡胶大变形问题的网格自适应解决方案 橡胶材料在工程仿真中一直是个令人头疼的存在——当你满怀信心地设置好边界条件点击求解,却在进度条走到30%时突然弹出"网格扭曲"的红色警告。作为一名长期与超弹性材料"斗…...
企业级部署警告:Perplexity事实核查功能未开启溯源审计模式的5大合规风险,GDPR/CCPA双认证团队紧急通告
更多请点击: https://codechina.net 第一章:Perplexity事实核查功能的核心机制与合规定位 Perplexity 的事实核查功能并非依赖单一模型输出,而是构建于多层验证架构之上:实时检索增强生成(RAG)、跨源可信度…...
