往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年网络安全优秀创新成果大赛-杭州分站赛”正式公布评选结果。 经专家评审,美创科技报名参赛的解决方案—“医…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
