tuyaopen 采用 platform_config.yaml
文件管理 platform。platform/platform_config.yaml
文件包含了已经实现了通用接口的 platform 仓库信息。可在项目目录下的 project_build.ini
文件中配置 platform
及 chip
(如当前 platform 支持多个芯片,则需配置芯片信息),运行 tos 编译后,目标 platform 会自动下载对应的 platform 仓库,关联到 tuyaopen
项目中。
如果你希望将tuyaopen
移植到自己的芯片上,则需要进行移植适配。
- 下载并进入
tuyaopen
目录,并设置环境变量:
$ cd tuyaopen
$ export PATH=$PATH:$PWD
或将 tuyaopen 路径添加到系统环境变量中。
tuyaopen 通过 tos 命令进行编译、调试等操作,tos 命令会根据环境变量中设置的路径查找 tuyaopen 仓库,并执行对应操作。
tos 命令的详细使用方法,请参考 tos 命令。
- 通过以下命令,生成一个新的
platform
子目录:
$ tos new_platform <new-platform-name>
命令在创建新 platform
时,会自动弹出一个 menuconfig
对话框
$ tos new_platform <new-platform-name>
(1.0.0) PROJECT_VERSION (NEW)
configure tuyaopen --->
configure tuya cloud service --->
configure enable/disable liblwip --->
configure enable/disable libtflm --->
configure mbedtls --->
configure system parameter --->
configure board <your-board-name> --->
OPERATING_SYSTEM (RTOS) --->
ENDIAN (LITTLE_ENDIAN) --->
[ ] ENABLE_FILE_SYSTEM --- support filesystem (NEW)
[ ] ENABLE_WIFI --- support wifi (NEW)
[*] ENABLE_WIRED --- support wired (NEW)
[ ] ENABLE_BLUETOOTH --- support BLE (NEW) ----
[ ] ENABLE_RTC --- support rtc (NEW)
[ ] ENABLE_WATCHDOG --- support watchdog (NEW)
[*] ENABLE_UART --- support uart (NEW)
[*] ENABLE_FLASH --- support flash (NEW) --->
[ ] ENABLE_ADC --- support adc (NEW)
[ ] ENABLE_PWM --- support pwm (NEW)
[*] ENABLE_GPIO --- support gpio (NEW)
[ ] ENABLE_I2C --- support i2c (NEW)
[ ] ENABLE_SPI --- support spi (NEW)
[ ] ENABLE_TIMER --- support hw timer (NEW)
[ ] ENABLE_DISPLAY --- support GUI display (NEW)
[ ] ENABLE_MEDIA --- support media (NEW)
[ ] ENABLE_PM --- support power manager (NEW)
[ ] ENABLE_STORAGE --- support storage such as SDCard (NEW)
[ ] ENABLE_DAC --- support dac (NEW)
[ ] ENABLE_I2S --- support i2s (NEW)
[ ] ENABLE_WAKEUP --- support lowpower wakeup (NEW)
[ ] ENABLE_REGISTER --- support register (NEW)
[ ] ENABLE_PINMUX --- support pinmux (NEW)
[ ] ENABLE_PLATFORM_AES --- support hw AES (NEW)
[ ] ENABLE_PLATFORM_SHA256 --- support hw sha256 (NEW)
[ ] ENABLE_PLATFORM_MD5 --- support hw md5 (NEW)
[ ] ENABLE_PLATFORM_SHA1 --- support hw sha1 (NEW)
[ ] ENABLE_PLATFORM_RSA --- support hw rsa (NEW)
[ ] ENABLE_PLATFORM_ECC --- support hw ecc (NEW)
- 在
tuyaopen
中根据新添加 platform 支持软件功能配置进行 tuyaopen 默认软件功能配置。 - 在
configure board <your-board-name>
中根据新添加 platform 支持的硬件功能进行默认硬件功能配置。
在完成配置之后,保存配置【快捷键S
】、退出【快捷键Q
】,将自动生成默认的功能配置 default.config
。
- 生成新 platform 目录
tos new_platform
命令会根据配置生成新 platform 目录,并根据 menuconfig
中配置自动生成 tkl
接口层相关代码。
过程中有如下日志输出:
..............
make ability: system
new file: tkl_sleep.c
new file: tkl_memory.c
new file: tkl_output.c
new file: tkl_semaphore.c
new file: tkl_queue.c
new file: tkl_system.c
new file: tkl_fs.c
new file: tkl_ota.c
new file: tkl_thread.c
new file: tkl_mutex.c
make ability: uart
new file: tkl_uart.c
make ability: security
generate code finished!
看到 generate code finished!
就说明模版已生成成功。
注: 配置功能不同,日志会稍有差异,供参考。
完成生成之后,会在 platform 下得到一个如下的新目录:
- platform
+ t2
+ ubuntu
- <new-platform-name>
+ <new-platform-sdk> # 需要自行创建,存放芯片相关 SDK
+ toolchain # 需要自行创建,存放工具链
+ tuyaos # 存放 tuyaos 适配层
- tuyaos_adapter # 存放 tuyaos 适配层接口源代码
- include
- src
- Kconfig # 期望支持的可配置项,可以修改
- default.config # platform 默认支持的功能,可以修改
- platform_config.cmake # 适配层源码路径
- toolchain_file.cmake # tuyaopen 编译工具路径和编译选项
- build_example.sh # 编译脚本
完成模版生成之后,可以按照需要对模版进行一些修改,并完成一些脚本的实现,确保编译流程能够正常进行。
Kconfig 文件中定义了新 platform 支持的功能,请根据当前新增 platform 名称,修改首次生成的 Kconfig 文件中 menu
中的 <your-board-name>
名称。同事也可以根据实际硬件情况新增/删除相关配置。
menu "configure board <your-board-name>"
...
endmenu
该文件为 tuyaopen 编译依赖 platform 相关适配文件及头文件路径,一般不需要修改。
list_subdirectories(PLATFORM_PUBINC ${PLATFORM_PATH}/tuyaos/tuyaos_adapter)
tuyaopen 采用 cmake 编译,list_subdirectories
函数会将指定目录下所有子目录添加到 PLATFORM_PUBINC 变量中,供 tuyaopen 编译时使用。
如需要添加其他路径,可参考如下方式:
list_subdirectories(PLATFORM_PUBINC_1 ${PLATFORM_PATH}/tuyaos/tuyaos_adapter)
set(PLATFORM_PUBINC_2
${PLATFORM_PATH}/tuyaopen/build/config
)
set(PLATFORM_PUBINC
${PLATFORM_PUBINC_1}
${PLATFORM_PUBINC_2})
- 设置编译工具路径及 toolchain 前缀,可以参考现有的
t2
和ubuntu
目录下的文件。
set(TOOLCHAIN_DIR "${PLATFORM_PATH}/toolchain/<your-toolchain-name>")
set(TOOLCHAIN_PRE "<your-toolchain-prefix>")
- 根据新增 platform 编译参数,正确设置 tuyaopen 编译选项。
set(CMAKE_C_FLAGS "<your-compiler-c-flags>")
- build_example.sh
需要在这里完成原厂 SDK 的编译以及链接生成各种用途的固件,可以参考现有的
t2
和ubuntu
目录下的文件。(注意,注释掉的那行,在linux
系统下可以直接打开,配合默认的Makefile
可以直接编译可执行文件。)
在 platform/platform_config.yaml
文件中新增一个 <new-platform-name>
。如当前项目是本地项目,可无需填写repo
和commit
,如该项目通过 git
管理,则可以按实际情况填写
格式如下:
- name: t3
repo: https://github.com/tuya/tuyaopen-platform-t3
commit: master
如新增 platform 支持多 chip ,则可按如下格式填写:
- name: new_platform
repo: https://github.com/xxxx/new_platform
commit: master
chip:
- chip1
- chip2
- chip3
按照 README_zh.md 文档的指引,在待编译测试的项目中 project_build.ini 修改/新增当前 platform 的名称,并进行一次编译。
[project:sample_project_<new-platform-name>]
platform = <new-platform-name>
推荐 project 名为 当前项目名_platform名
或 当前项目名_chip名
。
$ cd examples/get-started/sample_project
$ tos build
正常情况下,完成编译适配后,可直接编译通过。未编译成功请根据错误提示进行适配修改。
default.config 是生成移植模版的时候,根据选择生成的默认配置,用于项目首次编译默认配置,。
default.config 和 Kconfig 一起配合组成 tuyaopen 菜单化配置功能,并自动生成 using.config
、using.cmake
、 tuya_kconfig.h
文件,在 tuyaopen 编译和源代码中被使用。
如需修改默认配置,请在对应项目目录下执行 make menuconfig
修改功能配置,并将相关修改手工合并至 default.config。
生成移植模版的时候,在 tuyaos/tuyaos_adapter/src/
目录下生成了一些空函数,需要对这些空函数进行实现,才能保证功能正常运行。
因为tuyaopen
使用的和 TuyaOS
完全一致的底层接口,可以按照 TuyaOS
移植的方式进行,也可以参考现有的 t2
和 ubuntu
目录下的文件。
具体接口的介绍请参考 tuyaopen
目录./tools/porting/docs/
目录下的文档。
注意1:外设的接口不是必须要适配的,开发者完全可以使用原厂的接口;为方便开发者使用更多 tuyaopen 相关的功能,建议适配。
注意2:网络相关的接口,如果是外接网卡结构的,需要自行实现网卡驱动,实现 socket 相关操作以及相关
wifi
、wired
操作:
完成适配之后,可以结合示例程序进行编译、调试。tuyaopen
提供了丰富的示例程序,可以通过 tos
命令进行、编译,通过自己的烧录工具烧录、运行,调试功能。
$ tuyaopen
├── ai
│ └── llm_demo
│ └── tflm
│ └── hello_world
│ └── micro_speech
│ └── person_detection
├── ble
│ ├── ble_central
│ └── ble_peripher
├── get-started
│ └── sample_project
├── peripherals
│ ├── adc
│ ├── gpio
│ ├── i2c
│ ├── pwm
│ ├── spi
│ ├── timer
│ └── watchdog
├── protocols
│ ├── http_client
│ ├── mqtt
│ ├── tcp_client
│ └── tcp_server
├── system
│ ├── os_event
│ ├── os_kv
│ ├── os_mutex
│ ├── os_queue
│ ├── os_semaphore
│ ├── os_sw_timer
│ └── os_thread
└── wifi
├── ap
├── low_power
├── scan
└── sta
请按照以下测试用例测试,同时根据自己产品的功能进行全覆盖的功能、性能测试。 https://drive.weixin.qq.com/s?k=AGQAugfWAAkb5lIvFsAEgAwQZJALE
完成适配并通过测试后,欢迎提交 Push Requests 提交代码,将新适配的 platform 对应的 platform_config.yaml
提交至 https://github.com/tuya/tuyaopen 仓库,方便其他开发者使用。