温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何为iotjs开发原生模块

发布时间:2021-12-29 10:12:47 来源:亿速云 阅读:227 作者:iii 栏目:互联网科技

这篇文章主要介绍“ 如何为iotjs开发原生模块”,在日常操作中,相信很多人在 如何为iotjs开发原生模块问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答” 如何为iotjs开发原生模块”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

为 iotjs 开发原生模块

iotjs 是三星开源的 javascript 物联网开发平台。它为 javascript 应用程序提供了访问硬件、网络、文件系统和异步化的能力,功能类似于 nodejs,但无论是代码体积还是内存需求,iotjs 都要小很多,是用 javascript 开发 iot 设备应用程序的首选。

AWTK 全称 Toolkit AnyWhere,是 ZLG 开发的开源 GUI 引擎,旨在为嵌入式系统、WEB、各种小程序、手机和 PC 打造的通用 GUI 引擎,为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。

一、修改模块的名称

如果模块的名称使用 mymodule 是没有问题的,但是 mymodule 是一个无意义的名称,无法表达实际模块的真实功能。我这里需要把模块改名为 awtk,可以按下列方式来做:

  • 目录名使用 awtk-module

mkdir awtk-module
  • 将 C 代码的源文件改名为 awtk_module.c,并将初始化函数改名 InitAwtkNativeModule。

  • 创建 awtk-module/modules.json

{
  "modules": {
    "awtk": {
      "native_files": ["awtk_module.c"],
      "init": "InitAwtkNativeModule",
      "external_libs":["awtk-jerryscript", "jerryscript", "awtk", "assets", "glad", "gpinyin", "linebreak", "nanovg"], 
      "platforms": {
        "linux": {
          "external_libs":["SDL2", "gtk-3", "gdk-3", "sndio", "Xext", "X11", "stdc++", "dl", "m"]
        }   
      }   
    }
  }
}
  • 修改编译脚本参数

tools/build.py --external-modules=awtk-module --cmake-param=-DENABLE_MODULE_AWTK=ON

ENABLE_MODULE_ 一定要写实际模块的名称,如果忘记将 MYMODULE 修改成实际模块的名称,出现的错误让你完全不知道是什么情况。

二、编译参数

自己的模块免不了使用外部库,但是 modules.json 里可以指定库的名称,却不能指定库的路径和头文件的路径。做了尝试始终没有成功,后来只好自己写了一个 cmake 文件,在 iotjs 的 CMakeLists.txt 引用了。

awtk.cmake 的内容如下:

GET_FILENAME_COMPONENT(PROJ_ROOT "${CMAKE_CURRENT_LIST_DIR}/../../" ABSOLUTE)

SET(AWTK_ROOT ${PROJ_ROOT}/awtk)
SET(AWTK_JS_ROOT ${PROJ_ROOT}/awtk-js)
SET(APP_ASSETS_ROOT ${AWTK_ROOT}/demos)
SET(AWTK_JS_FILE ${AWTK_JS_ROOT}/src/awtk.js)

MESSAGE("AWTK_ROOT=${AWTK_ROOT}")
MESSAGE("AWTK_JS_ROOT=${AWTK_JS_ROOT}")
MESSAGE("AWTK_JS_ROOT=${CMAKE_CURRENT_LIST_DIR}")

SET( CMAKE_VERBOSE_MAKEFILE ON )
ADD_COMPILE_OPTIONS("-DAWTK_JS_FILE=\"${AWTK_JS_FILE}\"")
ADD_COMPILE_OPTIONS("-DAPP_ASSETS_ROOT=\"${APP_ASSETS_ROOT}\"")

LINK_DIRECTORIES("${AWTK_ROOT}/lib" "${AWTK_JS_ROOT}/lib")
INCLUDE_DIRECTORIES("${AWTK_ROOT}/src/" "${AWTK_ROOT}/src/ext_widgets/" "${AWTK_JS_ROOT}/src/jerryscript")

使用下面这行代码开启 verbose 模式,可以看到大量调试信息,有助于快速定位问题所在:

SET( CMAKE_VERBOSE_MAKEFILE ON )

然后在 CMakeLists.txt 里引用:

include(../awtk-iotjs/awtk-module/awtk.cmake)
include(cmake/iotjs.cmake)

一定要放在 iotjs.cmake 之前引用,否则无效。

三、放在独立的目录

将模块放在独立的目录中,管理起来方便一些,awtk-iotjs 是为 iotjs 写的模块,它依赖与 awtk 和 awtk-js,将在几个模块放在同级的目录。

  • awtk

  • awtk-js

  • iotjs

  • awtk-iotjs

编译脚本改为:

${iotjs_ROOT}/tools/build.py --external-modules=${CWD}/awtk-module --cmake-param=-DENABLE_MODULE_AWTK=ON

运行脚本改为:

if [ "$1" == "" ]; then
  JS_FILE="demos/button.js"
else
  JS_FILE="$1"
fi

${iotjs_ROOT}/build/x86_64-linux/debug/bin/iotjs "$JS_FILE"

到此,关于“ 如何为iotjs开发原生模块”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI