OpenIPC开源IPC之工程框架

95 篇文章 44 订阅

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配置项:

BR2_PACKAGE_VDEC_OPENIPC=y

5. 参考资料

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

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值