核心目录结构与功能

vela-opensource/
├── apps/               # 应用层代码,包含用户级应用程序
├── build.sh            # 编译脚本,用于构建整个系统
├── docs/               # 项目文档,包含开发指南和API文档
├── emulator.sh         # 模拟器启动脚本,用于在PC上测试系统
├── external/           # 外部依赖库,如lwIP、mbedTLS等
├── frameworks/         # 框架层,提供核心服务和抽象
├── manifest.xml        # 代码仓库清单,用于repo工具管理
├── nuttx/              # NuttX内核源码,包含OS核心组件
├── packages/           # 软件包管理器,包含可复用组件
├── prebuilts/          # 预编译工具链和二进制文件
├── tests/              # 单元测试和集成测试代码
└── vendor/             # 厂商特定代码,如驱动和配置

核心目录详解

1. apps/ - 应用层

此目录用于存放用户级应用程序,采用模块化设计,能够依据具体需求进行选择性编译。

  • 核心子目录
    • examples/:提供基础示例,像hello_worldgpio_demo这类,可供开发者学习使用。
    • system/:包含系统必备应用,例如shell(命令行解释器)、ota(空中下载更新)。
    • services/:存放后台服务,如netd(网络管理服务)、sensorsd(传感器服务)。
    • ui/:包含图形界面应用,基于 LVGL 或 SDL 实现。
  • 开发要点
    • 每个应用都配有独立的Makefile或者CMakeLists.txt文件。
    • 通过CONFIG_APP_XXX选项来控制应用是否编译。
2. build.sh - 编译脚本

该脚本是整个系统的编译入口,具备配置检查、依赖解析以及多架构支持等功能。

  • 主要参数
    • --board:用于指定目标硬件平台,例如stm32f4discovery
    • --app:指定要编译的应用程序,例如mqtt_client
    • --config:选择配置文件,如release或者debug
  • 工作流程

    bash

    # 编译示例
    ./build.sh --board=esp32-devkitc --app=wifi_scan --config=release
    
3. docs/ - 项目文档

这里涵盖了开发过程中所需的各种文档资源。

  • 关键文档
    • getting_started/:新手入门指南,介绍环境搭建和基础开发流程。
    • api_reference/:API 参考手册,包含系统调用和库函数的详细说明。
    • architecture/:架构文档,对系统设计和组件交互进行解释。
    • porting_guide/:移植指南,指导如何将系统适配到新的硬件平台。
4. emulator.sh - 模拟器脚本

借助 QEMU 或 nSIM 等工具,该脚本可在 PC 上模拟运行 OpenVela 系统。

  • 支持的平台
    • qemu-arm:ARM 架构模拟器。
    • qemu-riscv32:RISC-V 32 位模拟器。
  • 使用方法

    bash

    # 在QEMU上运行
    ./emulator.sh --board=qemu-arm --app=shell
    
5. external/ - 外部依赖

此目录整合了第三方开源组件,采用 Git 子模块进行管理。

  • 核心组件
    • lwIP/:轻量级 TCP/IP 协议栈。
    • mbedTLS/:嵌入式 TLS 加密库。
    • FreeRTOS-Plus/:额外的 FreeRTOS 组件(部分功能会被 NuttX 替代)。
    • CMSIS/:ARM Cortex-M 系列的硬件抽象层。
6. frameworks/ - 框架层

框架层提供了系统级服务和抽象,采用分层设计。

  • 核心子目录
    • base/:基础框架,包含:
      • utils/:通用工具类,如字符串处理、日志系统。
      • ipc/:进程间通信机制,例如消息队列、共享内存。
      • system/:系统服务,如电源管理、事件循环。
    • hardware/:硬件抽象层 (HAL),包含:
      • interfaces/:定义硬件接口规范,如camera.hdisplay.h
      • implementations/:具体硬件的实现代码。
    • middleware/:中间件组件,如多媒体框架、AI 推理引擎。
7. manifest.xml - 代码清单

该文件用于repo工具管理多仓库代码,具备版本控制功能。

  • 关键内容

    xml

    <!-- 示例片段 -->
    <project name="openvela/nuttx" path="nuttx" revision="master" />
    <project name="openvela/apps" path="apps" revision="release-1.0" />
    
  • 使用方法

    bash

    # 初始化仓库
    repo init -u https://github.com/openvela/manifest.git -b master
    # 同步代码
    repo sync
    
8. nuttx/ - NuttX 内核

这是系统的核心部分,采用微内核架构。

  • 核心子目录
    • arch/:硬件架构相关代码,如:
      • arm/:ARM Cortex-M 系列处理器支持。
      • riscv/:RISC-V 架构支持。
    • fs/:文件系统,支持FATLittleFSROMFS等。
    • net/:网络协议栈,基于 lwIP 扩展实现。
    • drivers/:硬件驱动,包括:
      • char/:字符设备驱动,如 UART、SPI。
      • block/:块设备驱动,如 SD 卡、eMMC。
      • video/:显示设备驱动。
    • kernel/:内核核心,包含调度器、内存管理、中断处理等功能。
9. packages/ - 软件包管理器

此目录包含可复用的组件,采用模块化设计。

  • 核心组件
    • networking/:网络相关组件,如 MQTT 客户端、HTTP 服务器。
    • storage/:存储相关组件,如数据库、文件系统工具。
    • security/:安全相关组件,如加密、认证。
  • 使用方法
    通过menuconfig选择需要的软件包。
10. prebuilts/ - 预编译资源

该目录存放预编译的工具链和二进制文件。

  • 主要内容
    • toolchain/:不同架构的交叉编译工具链,如 ARM GCC、RISC-V GCC。
    • firmware/:预编译的固件,如 bootloader、WiFi 固件。
    • libs/:预编译的库文件,如标准 C 库、数学库。
11. tests/ - 测试框架

这里包含单元测试和集成测试代码,采用自动化测试框架。

  • 测试框架
    • unity/:单元测试框架。
    • cmock/:模拟对象框架。
    • integration/:集成测试,验证组件间的交互。
  • 运行测试

    bash

    # 运行所有单元测试
    ./build.sh --test=all
    # 运行特定测试
    ./build.sh --test=net
    
12. vendor/ - 厂商特定代码

该目录包含特定硬件平台的驱动和配置。

  • 核心子目录
    • board/:开发板配置,如引脚定义、外设配置。
    • chip/:芯片厂商驱动,如 ST、ESP、Nordic。
    • configs/:特定产品的配置文件。
Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐