一、概述

为了保障厂商代码的隔离和隐私安全,在 openvela 代码中,可以通过 vendor 目录为厂商代码创建独立的存放目录。具体的目录名称采用厂商的缩写作为标识。

二、目录结构

1、顶层目录

代码下载完成后,整体目录结构如下:

djz:vela$ tree -L 1
.
├── apps
├── build.sh -> nuttx/tools/build.sh
├── external
├── frameworks
├── nuttx
├── prebuilts
├── tests
└── vendor

7 directories, 1 file

 

  • nuttx 、apps 包括 nuttx 内核、网络、文件系统、示例代码、系统服务、nsh(NuttShell CLI)等内容。
  • external 存放 openvela 系统支持的第三方库,这些库以源码形式提供。
  • prebuilts 包含代码编译所需要的工具链(toolchain)。
  • tests 存放由 openvela 发布的测试集,覆盖网络、文件系统以及系统调用等 API 测试内容。
  • frameworks 提供 openvela 框架的导出头文件,以 .a 库文件形式提供。
  • build.sh 用于代码编译的脚本文件,可通过附加编译参数生成 nuttx.bin 文件。

2、vendor 目录结构

vendor 目录用于存放厂商的相关代码和配置。其目录内容布局如下:

djz:vendor$ tree -L 1
.
├── vendor_name
├── Make.defs
├── Makefile
├── sim
└── xiaomi

3 directories, 2 files

 

  • vendor_name 厂商代码存放的根目录,厂商的所有代码均应存放于此处。
  • sim 包含启动 openvela Simulator 仿真环境所需的配置和源码。
  • xiaomi 存放小米(Xiaomi)提供的库文件,例如蓝牙 bluelet 等相关代码库。

三、Vendor 目录和文件

厂商初次获取代码时,vendor_name 目录的布局如下:

//目录位置
djz:vendor_name$ pwd
/home/djz/workspace/velaos/vendor/vendor_name

//目录layout
djz:vendor_name$ tree -l
├── boards
│   └── chip_name
│       └── board_name
│           ├── configs
│           │   └── nsh
│           │       └── defconfig
│           ├── include
│           │   ├── board.h
│           │   └── nsh_romfsimg.h
│           ├── Kconfig
│           ├── scripts
│           │   ├── ld.script
│           │   └── Make.defs
│           └── src
│               ├── board_name.h
│               ├── etc
│               │   ├── group
│               │   ├── init.d
│               │   │   ├── rcS
│               │   │   └── rc.sysinit
│               │   └── passwd
│               ├── Makefile
│               ├── vendor_name_appinit.c
│               ├── vendor_name_boot.c
│               └── vendor_name_bringup.c
├── chips
│   └── chip_name
│       ├── chip.h
│       ├── include
│       │   ├── chip.h
│       │   └── irq.h
│       ├── Kconfig
│       ├── Make.defs
│       ├── vendor_name_irq.c
│       ├── vendor_name_irq.h
│       ├── vendor_name_lowputc.c
│       ├── vendor_name_lowputc.h
│       ├── vendor_name_start.c
│       ├── vendor_name_start.h
│       └── vendor_name_timeisr.c

 

1. boards 目录

boards 目录主要存放和板级硬件相关的所有代码。 每块板的代码组织在 boards/chip_name/board_name 路径下,其中:

  • chip_name:芯片名称。
  • board_name:板的名称。

boards/chip_name/board_name 目录

  • configs 存放该板的所有配置文件。默认包含 nsh(NuttShell CLI)的配置,提供基础操作系统功能。厂商可基于 nsh 配置点亮 openvela,并逐步添加更多功能。
  • include 包含与板相关的头文件:
    • board.h:声明适用于该板的宏和函数,厂商可根据需求修改。
    • nsh_romfsimg.h:提供系统文件的 ROM 文件系统镜像(romfs bin),无需厂商修改。
  • Kconfig 定义与板相关的配置项,包括功能开关和外设选择,厂商需要根据实际需求调整。
  • scripts 包含与构建流程相关的脚本和配置文件:
    • ld.script:板的链接脚本。
    • Make.defs:定义编译流程和文件规则,需厂商根据要求修改。
  • src 包括板级启动和初始化相关的源代码和配置文件。
    • etc:
      • 保存操作系统和应用的启动脚本:
        • rc.sysinit:核心应用启动和文件系统挂载。
        • rcS:应用程序启动脚本。
      • 系统账户文件:
        • group 和 passwd:默认提供示例文件,实际使用时厂商需重新定义。
    • vendor_name_*.c 文件: 包括必要的板级启动代码,如外设初始化文件(vendor_name_appinit.c、vendor_name_boot.c 等),用于初始化外设和板级配置,厂商可根据需求扩展这些文件。
    • Makefile:用于构建编译的源文件以及加入 etc 目录的目标文件。

2. chips 目录

chips 目录存放与芯片启动及内部组件(如 UART 驱动、DMA 驱动)相关的代码。 每颗芯片代码组织在 chips/chip_name 路径下。

chips/chip_name 子目录说明

  • include 芯片相关的头文件:
    • chip.h:存放芯片通用的宏定义和函数声明。
    • irq.h:中断相关内容。
  • Kconfig 定义与芯片相关的配置项,包括芯片型号、功能选择和模块配置。
  • Make.defs 定义芯片代码的构建流程,列出参与编译的 C 文件。
  • vendor_name_*.c 文件: 包含芯片启动所需的默认实现代码,例如:
    • UART 驱动(vendor_name_lowputc.c)。
    • 中断处理(vendor_name_irq.c 和 vendor_name_irq.h)。
    • 系统启动代码(vendor_name_start.c 和 vendor_name_timeisr.c)。 厂商可根据芯片和硬件需求补充其他模块代码。
Logo

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

更多推荐