快速入门

更新时间:2024-04-28 07:24:13下载pdf

本文介绍如何快速基于类型开发包实现一个简单的 IPC demo 应用,包含编译构建、固件打包以及运行程序等步骤。

前置条件

在 Visual Studio Code 的 Wind IDE 上,以 TuyaOS SDK 开发模式 获取对应平台的开发框架与类型开发包。更多信息,参考 获取开发资料

确定开发方式

开发方式一(推荐):基于 TuyaOS 框架开发

基于 TuyaOS 框架开发产品具有多种好处,包括可以使用涂鸦 Wind IDE 开发工具提升效率,直接复用涂鸦编译打包调试等脚本和 makefile,直接使用涂鸦提供的芯片平台适配层接口等。

开发方式二:SDK 独立开发

如果您已经有自己完整的 IPC 代码框架,期望仅使用 lib 库文件和 .h 头文件,实现接入涂鸦平台的可执行程序,则可以考虑采用该开发方式。

基于 TuyaOS 框架开发

编译构建

TuyaOS 在 Tuya Wind IDE 上支持三种编译方式:

方式一:可视化界面(推荐)

在 Tuya Wind IDE 界面上选择 software/TuyaOS/apps/ 下的 demo 目录,鼠标右键单击,选择菜单 Build Project 一键编译。

快速入门

方式二:shell 脚本形式

software/TuyaOS/apps/ 目录下输入:

sh build_app.sh $1 $2 $3 $4

其中,

  • $1:应用工程路径,如 apps/tuyaos_demo_ipc
  • $2:生成的应用工程名,如 tuyaos_demo_ipc
  • $3:版本号,三段式格式 XX.XX.XX,如 1.0.0
  • $4:用户指令 (可选),如 clean

方式三:makefile 形式

software/TuyaOS/apps/ 目录下命令行输入 make,选择要编译的应用程序,并且版本默认为 1.0.0

固件打包

编译完成后,会自动调用 apps/tuyaos_demo_ipc/ty_pack.sh 脚本,生成 OTA 固件和生产固件。

打包过程主要分两步:

  1. 将所需要的文件(主要包括可执行程序 tycam、脚本文件、资源文件等)统一放到某个目录,再使用 mksquashfs 生成 app 分区镜像文件。

  2. app 分区镜像拷贝到 output/bsp/ 目录下,执行该目录下的 build 脚本,依照分区配置文件 partitions.json 生成固件。

    您可以通过 partitions.json 中的 need_ota 字段,来决定是否将该分区镜像打包到 OTA 固件上。

    产物存放在 output/platform_tuyaos/$version/firmware/out 路径下,分别是生产固件 xx_all.bin 和卡刷固件 xx_ota.bin

运行程序

  • 启动命令推荐

    ./output/platform_tuyaos-ipc/firmware/tuyaos_demo_ipc -c ./apps/tuyaos_demo_ipc/ -m 2 -t AYPVEWzz0omLW8
    
  • 参数解释

    • c:指定 tuya_device_cfg.json 配置文件路径,配置文件字段需要填写完整。

    • m:对应模式。

      typedef enum {
          PARING_MODE_WIFI_AP = 1,     //AP 配网
          PARING_MODE_DEBUG,         //用户传入 token,debug 模式,demo 体验使用
          PARING_MODE_WIRED,           //有线配网使用
          PARING_MODE_CONCURRENT    //FFS 配网使用
      } TUYA_IPC_PARING_MODE_E;
      
    • t:传入指定 Token。

    运行前,确保 tkl_wifi.c 已适配。

  • DEBUG 能力

    程序运行中,支持串口命令获取,参照 TUYA_IPC_simulation 接口。命令解释:

    cmd 说明
    md_start 移动侦测事件启动
    md_stop 移动侦测事件停止
    status 当前设备激活状态
    bell_press 模拟图片门铃按键呼叫
    bell_ac 模拟视频门铃呼叫和留言服务
    start_low_power 启动低功耗模式

vendor 目录说明

├── APPconfig ## 应用配置 tuyaos_adapter 入口
├── docs      ## BSP 一些通用文档
├── IoTOSconfig ## 应用配置 tuyaos_adapter 入口,兼容老版本
├── README.md ## vendor 独立编译说明文档
├── release   ## bsp 编译完成的固件资源
├── scripts   ## err_code 头文件路径和工具
├── toolchain ## 平台工具链
└── tuyaos    ## vendor 编译组目录
    ├── build ## vendor 编译入口
    ├── build_all.sh ## 编译脚本,调用 build.sh,给上层调用
    ├── build.conf   ## BSP 依赖的第三方库下载地址
    ├── build_path   ## 编译工具链路径指定
    ├── build.sh     ## vendor 编译入口
    ├── components   ## BSP 功能组件代码
    │   ├── base_bsp ## 第三方库编译入口
    │   ├── board_xxx   ## rootfs 制作
    │   ├── bsp_adapter ## BSP 专有 tuyaos_adapter
    │   ├── bsp_comm_loader ## uboot bsp 能力组件
    │   ├── bsp_cryptfs ## 文件系统加密
    │   ├── bsp_sign    ## OTA 加签组件
    │   ├── bsp_verify  ## OTA 验签组件
    │   ├── IoTOSconfig ## libtuyaos_adapter_custom.so 配置文件
    │   ├── linux_xxx   ## Linux 内核组件
    │   ├── local.mk    ## libtuyaos_adapter_custom.so 编译脚本
    │   ├── nvram_kernel_driver ## NVRam && NVRam lib && NVRam ko 组件
    │   ├── partition_config   ## 分区统一配置组件
    │   ├── swupgrade_pack ## OTA 打包组件
    │   ├── swupgrade_unpack ## OTA 解包组件
    │   ├── sys_log     ## 日志输出组件
    │   ├── tkl_gpio    ## GPIO 组件
    │   ├── tkl_media_xxx ## media 组件
    │   ├── tkl_system  ## Linux system 接口组件
    │   ├── tkl_test    ## TKL 接口测试组件
    │   ├── tkl_utils   ## TKL 基本功能组件
    │   ├── tkl_wifi    ## Wi-Fi 组件
    │   ├── tkl_wired   ## wired 组件
    │   └── uboot_xxx   ## uboot 组件
    ├── download        ## 第三方库下载路径
    ├── hwconfig        ## IO 统一配置文件
    ├── include         ## tuyao_iot_config.h 目录
    ├── IoTOSconfig     ## vendor 配置主入口
    ├── Makefile        ## vendor 编译 Makefile 主入口
    ├── platform.mk     ## vendor 传给应用的编译参数位置
    ├── scripts         ## 产生 libtuyaos_adapter_custom.so 的脚本
    ├── tuyaos_adapter  ## TKL 适配层
    └── tuyaos_kernel.config ## TKL 的能力支持配置

SDK 独立开发

提取 SDK 库与头文件

参考 编译构建,首先进行编译构建。然后在 software/TuyaOS/scripts 目录下命令行执行 extract_standalone_sdk.sh 脚本,一键提取独立 SDK 包。脚本会自动创建 software/sdk_a.b.c/ 目录,同时自动下载对应的 demo code。完成后,整体目录如下:

├── sdk_6.1.0 ## 独立 SDK 入口
    ├── sdk ## 库文件和头文件
    ├── build ## 编译所需的环境变量
    ├── demo_tuyaos_app   ## 应用 demo 演示代码
    ├── demo_tuyaos_adapter   ## 系统适配层标准适配代码,可按实际系统情况修改
    └── Makefile  ## 编译入口

编译参考

进入 software/sdk_6.1.0/ 目录,执行命令 make

运行程序

编译成功后的可执行程序位于 sdk_6.1.0/output/demo 目录下,运行方式参考上文 运行程序

移植参考

如果需要提取库文件到工程代码中,下面是需要提取的目录列表:

文件 补充说明
sdk/libs/libtuyaos.a 库文件
sdk/include/* 头文件,极简方式只提取 svc_api_ipc/include/ 头文件即可
demo_tuyaos_adapter 系统适配层标准代码,需要根据平台,检查对应实现是否符合

常见问题

编译成功后的可执行程序 tuyaos_demo_ipc 比较大,可能什么原因?

  • 为了方便演示,Demo 程序编译默认会将音视频素材文件,直接编译到可执行程序里面,导致可执行程序里有素材的二进制文件。具体信息,见 tuyaos-ipc/vendor/x86_64/tuyaos/tuyaos_adapter/include/media/tkl_media_demo_source.h。平台适配时,可关注素材是否已删除,按照平台音视频 TKL 接口进行封装即可。
  • 引用的 libtuyaos 库是否是 strip 过的版本 libtuyaos.a.stripped