activation有两个含义:

  1. 整个RokidOS交互环境,包含配网逻辑,语音交互,灯光显示,APP通信,OTA,用户埋点等服务,也就是这整个工程。本工程提供多个服务,不同的服务运行在独立进程中
  2. 所有服务中最主要的一个,会和其他服务通信,完成大多数的业务逻辑

目录结构

根目录

  • 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。

results matching ""

    No results matching ""