OpenIPC开源IPC之工程框架

2024-08-31 10:52
文章标签 框架 工程 开源 ipc openipc

本文主要是介绍OpenIPC开源IPC之工程框架,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OpenIPC开源IPC之工程框架

  • 1. 源由
  • 2. 介绍
    • 优点
    • 缺点
    • 适用
  • 3. 框架
  • 4. 举例
    • Step 1: 配置使能`wfb-ng`软件包
    • Step 2: 添加`wfb-ng`软件包
    • Step 3: 软件包版本配置
    • Step 4: 地面端配置OSD
  • 5. 参考资料

1. 源由

OpenIPC的工程框架使用了Buildroot,该构建工具与OpenWrt、OpenEmbedded、Yocto类似,被广泛应用于嵌入根文件系统自动化构建。

2. 介绍

Buildroot 通过使用交叉编译来简化和自动化构建嵌入式系统完整 Linux 系统。

Buildroot 作为一个用于构建嵌入式 Linux 系统的工具,有其独特的优缺点。以下是对其主要优势和劣势的概述:

优点

  1. 轻量化和简洁性

    • Buildroot 非常轻量化,且设计简洁。它的配置和使用相对简单,对于小型和中型嵌入式项目,特别是那些不需要高度定制的系统,Buildroot 是一个非常高效的工具。
  2. 快速构建

    • Buildroot 可以快速生成一个完整的 Linux 根文件系统、内核和引导加载程序。这使得它非常适合开发过程中频繁迭代测试的情况。
  3. 广泛的硬件支持

    • Buildroot 支持多种处理器架构(如 ARM、MIPS、PowerPC、x86 等)和大量现成的开发板,适合广泛的嵌入式应用。
  4. 简单的配置机制

    • Buildroot 使用的 make menuconfigmake xconfig 等配置工具类似于 Linux 内核的配置方式,使得用户能够轻松配置所需的工具链、软件包和其他系统组件。
  5. 良好的文档和社区支持

    • Buildroot 拥有良好的文档支持和一个活跃的开发者社区,用户可以快速找到所需的信息和帮助。
  6. 自包含的构建系统

    • Buildroot 的构建过程不依赖于宿主系统的许多软件包,而是通过下载并构建所需的一切(包括工具链),这减少了环境依赖性和不一致性的问题。

缺点

  1. 缺乏包管理系统

    • Buildroot 没有像 Yocto 或 OpenEmbedded 那样的包管理系统,这意味着在运行时不能方便地添加或移除软件包。所有的软件包都必须在构建时选择并编译进系统。
  2. 功能相对简单

    • Buildroot 的设计目标是简单和快速,因此它在复杂项目中的灵活性和功能性上可能不如 Yocto 等更强大的构建系统。如果项目需要高度定制和复杂的功能集成,Buildroot 可能不足以满足需求。
  3. 不支持多重构建缓存

    • Buildroot 通常是一次性构建所有内容,如果需要重新构建某个部分,通常需要重新构建整个系统。这与支持增量构建和更复杂缓存机制的 Yocto 有所不同,可能导致开发效率下降。
  4. 有限的系统集成能力

    • Buildroot 更适合简单或中等复杂度的系统。如果项目需要广泛的定制或复杂的集成,如定制 BSP 或复杂的中间件系统,可能需要更强大的构建工具。
  5. 软件包数量有限

    • 虽然 Buildroot 提供了许多常见的嵌入式软件包,但与 Yocto 等系统相比,其软件包数量和可用性要少一些。这可能意味着你需要自己编写新的包定义或补丁。

适用

Buildroot 主要对从事嵌入式系统开发的人有用,非常适合那些需要快速生成嵌入式 Linux 系统的项目,特别是对于资源有限的设备或不需要高度复杂和定制的系统。

3. 框架

Buildroot 基本上是一组 Makefile,它们负责下载、配置和编译软件,并确保使用正确的选项进行编译。它还包括为各种软件包提供的补丁,主要是与交叉编译工具链相关的软件包(如 gcc、binutils 和 uClibc)。

基本上,每个软件包都有一个对应的 Makefile,这些文件以 .mk 为扩展名。Makefile 分为许多不同的部分。

  • toolchain/ 目录包含了与交叉编译工具链相关的所有软件的 Makefile 和相关文件:如 binutils、gcc、gdb、kernel-headers 和 uClibc。
  • arch/ 目录包含了所有 Buildroot 支持的处理器架构的定义。
  • package/ 目录包含了所有用户空间工具和库的 Makefile 和相关文件,这些工具和库可以由 Buildroot 编译并添加到目标根文件系统中。每个软件包都有一个子目录。
  • linux/ 目录包含了 Linux 内核的 Makefile 和相关文件。
  • boot/ 目录包含了 Buildroot 支持的引导加载程序的 Makefile 和相关文件。
  • system/ 目录包含了系统集成的支持文件,例如目标文件系统框架和初始化系统的选择。
  • fs/ 目录包含了与生成目标根文件系统镜像相关的软件的 Makefile 和相关文件。

每个目录至少包含 2 个文件:

  • something.mk 是 Makefile,负责下载、配置、编译并安装名为 something 的软件包。
  • Config.in 是配置工具描述文件的一部分,描述了与该软件包相关的选项。

主 Makefile 在配置完成后执行以下步骤:

  1. 在输出目录(默认是 output/,可以使用 O= 指定其他值)中创建所有输出目录:如 staging、target、build 等。
  2. 生成工具链目标。如果使用的是内部工具链,这意味着生成交叉编译工具链。如果使用的是外部工具链,这意味着检查外部工具链的功能并将其导入 Buildroot 环境。
  3. 生成 TARGETS 变量中列出的所有目标。该变量由所有单独组件的 Makefile 填充。生成这些目标将触发用户空间软件包(库、程序)、内核、引导加载程序的编译以及根文件系统镜像的生成,这取决于配置。

4. 举例

ssc338q_fpv_openipc-urllc-aio_defconfig 目标OpenIPC AIO为例,定位底层实时传输代码wfb-ng,接下来我们看下如何集成该软件包。

Step 1: 配置使能wfb-ng软件包

OpenIPC/builder工程的devices/ssc338q_fpv_openipc-urllc-aio/br-ext-chip-sigmastar/configs/ssc338q_fpv_openipc-urllc-aio_defconfig.txt目标配置文件中配置使能软件包:

BR2_PACKAGE_WIFIBROADCAST=y

Step 2: 添加wfb-ng软件包

openipc/general/package/wifibroadcast/路径下,增加必要文件,包括:Config.inwifibroadcast.mk

openipc/general/package/wifibroadcast/
├── files
│   ├── drone.key
│   ├── gs.key
│   ├── htc_9271.fw.1
│   ├── htc_9271.fw.3
│   ├── setmcs
│   ├── wfb_drone.conf
│   ├── wfb_gs.conf
│   └── wifibroadcast
├── Config.in
└── wifibroadcast.mk

Step 3: 软件包版本配置

openipc/general/package/wifibroadcast/wifibroadcast.mk中配置版本信息:

WIFIBROADCAST_VERSION = 24.08

Step 4: 地面端配置OSD

./openipc/br-ext-chip-hisilicon/configs/hi3536dv100_fpv_defconfig中增加OSD配置项:

  • OpenIPC OSD is different from wfb_ng+wfb_ng_osd on ubuntu? #337
BR2_PACKAGE_VDEC_OPENIPC=y

5. 参考资料

【1】OpenIPC开源IPC之工程编译
【2】Ardupilot & OpenIPC & 基于WFB-NG构架分析和数据链路思考

这篇关于OpenIPC开源IPC之工程框架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1123701

相关文章

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization

无需邀请码!Manus复刻开源版OpenManus下载安装与体验

《无需邀请码!Manus复刻开源版OpenManus下载安装与体验》Manus的完美复刻开源版OpenManus安装与体验,无需邀请码,手把手教你如何在本地安装与配置Manus的开源版OpenManu... Manus是什么?Manus 是 Monica 团队推出的全球首款通用型 AI Agent。Man

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

Gin框架中的GET和POST表单处理的实现

《Gin框架中的GET和POST表单处理的实现》Gin框架提供了简单而强大的机制来处理GET和POST表单提交的数据,通过c.Query、c.PostForm、c.Bind和c.Request.For... 目录一、GET表单处理二、POST表单处理1. 使用c.PostForm获取表单字段:2. 绑定到结

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核