activation有两个含义:
- 整个RokidOS交互环境,包含配网逻辑,语音交互,灯光显示,APP通信,OTA,用户埋点等服务,也就是这整个工程。本工程提供多个服务,不同的服务运行在独立进程中
- 所有服务中最主要的一个,会和其他服务通信,完成大多数的业务逻辑
目录结构
根目录
- bin 包含activation需要的可执行文件,运行时需要把这些文件放到PATH环境变量定义的某个目录中,比如
/usr/bin - tools 日常开发和调试使用的工具,不需要放入镜像
- lua5.3.4 activation使用的lua源码
- thirdparty 第三方开源代码
- src activation源码,包含lua运行时,执行程序和所有服务的lua源码
- doc 与activation代码相关的文档
- temp 开发或调试使用的临时目录,已经添加到.gitignore中,tools中的工具大多把临时文件放到这个目录
src目录
- rkluaruntime 封装后的lua运行时环境
- rklua 执行各个服务lua源码的可执行程序
- rklogger 实时打印日志工具
- lua 所有服务的lua源码
- lib 服务需要的bridge到lua的C/C++库,大多封装自BSP接口
lua目录
- core 核心模块,与activation无关的基础抽象
- env 运行环境模块,定义和处理运行的环境,比如是否debug模式,连接的后台环境(开发还是线上环境)
- comp 通用的组件,比如播放器,前端模块等
- network 网络请求相关模块,包括https,protobuf工具模块和具体的接口封装
- protocol activation中用到的protobuf定义和生成的lua代码
- test 单元测试代码
- applications 可以被rklua执行的独立应用,包括activation,light,ota,mqtt等
core,env,comp,network为应用提供通用的功能,其中不应该引用applications中的模块
运行应用
rklua作为应用的执行器,用法如下
rklua [options] app [arg1, [arg2, [...]]]
app是要执行的应用,rklua会把applications/${app}加到package.path最前面。这样在app内部需要require某个模块时,require路径只需要从app根目录开始,不需要关心app真正的完整路径。也可以添加-l和-c参数添加自定义路径,自定义路径会放在package.path和package.cpath最前面,可以覆盖/usr/lua中的lua文件。
rklua会从main.lua开始执行。正常情况这应该是app/main.lua,但是如果添加了-l选项,并且指定的目录中有main.lua文件,会从该文件开始执行。
如果添加了-n选项,main.lua执行完毕后进程就会结束;如果没有,则会开启runloop,进程在被kill或者运行出现异常后才会结束。
详细说明见 doc/modules/rklua,doc/modules/rkluaruntime。