🐝
蜂巢OPENAPI
  • 蜂巢TNest
  • 产品介绍
    • 产品概述
    • 产品功能
    • 产品优势
    • 应用场景
  • 快速入门
    • 入门概述
    • 部署
    • 快速接入
    • 应用开发及编译
    • 应用部署
  • API
    • 接口规范
    • 终端数据查询
      • 系统基本信息上报
      • 系统运行数据上报
        • 采样频率、上报频率设置
        • CPU温度定时上报
        • CPU使用率定时上报
        • 内存使用率定时上报
        • 磁盘使用率定时上报
        • 4G模组信息定时上报
        • 有线网卡流量信息定时上报
      • 容器数据上报
      • 微应用数据上报
      • 进程数据上报
      • 服务数据上报
      • 网络端口数据上报
      • 终端在线状态
      • 链路跟踪
    • 终端告警
      • 告警规则下发
      • CPU使用率告警
      • 内存使用率告警
      • 磁盘使用率告警
      • CPU温度告警
      • 证书过期告警
      • 证书修改告警
      • 插入网线告警
      • 网线拔出告警
      • 网络链路时延告警
      • 网络链路中断告警
      • 网络链路丢包率告警
    • 运行诊断
      • 网络诊断
      • 工况诊断
      • 系统诊断
      • 进程诊断
    • 容器管理
      • 下载容器
      • 安装容器
      • 启动容器
      • 停止容器
      • 替换容器
      • 卸载容器
      • 克隆容器
    • 应用管理
      • 下载微应用
      • 安装微应用
      • 启动微应用
      • 停止微应用
      • 卸载微应用
      • 使能微应用
      • 去使能微应用
      • 微应用升级
    • 设备管理
      • 物理接口管理
        • 网口管理
      • 终端校时
      • 终端重启
      • 命令行
      • 网络访问黑名单
      • 网络访问白名单
      • 网络接口封堵
    • 连接管理
      • 网络访问黑名单
      • 网络访问白名单
    • 系统更新
      • 下载固件
      • 固件升级
      • 下载补丁包
      • 安装补丁包
      • 下载配置文件
      • 部署配置文件
    • 日志管理
      • 日志提取
      • 日志监控
        • 监控规则下发
        • 监控日志上报
        • 系统操作日志上报(审计日志)
  • 用户指南
    • 蜂巢部署
    • 安全接入
    • 可观测性
      • 系统基本信息上报
      • 运行数据监控
      • 终端告警
      • 运行诊断
    • 设备管理
      • 网络接口封堵
      • 终端校时
      • 终端重启
      • 命令行
    • 日志管理
      • 日志提取
      • 监控日志上报
      • 系统操作日志审计
    • 连接管理
      • 访问黑名单
      • 访问白名单
    • 容器管理
      • 容器下载
      • 容器安装/卸载
      • 容器启动/停止
      • 容器替换
      • 容器克隆
    • 应用管理
      • 应用下载
      • 应用安装/卸载
      • 应用使能/去使能
      • 应用启动/停止
      • 应用升级
    • 系统更新
      • 固件升级
      • 补丁包安装
      • 配置更新
  • 常见问题
    • 蜂巢部署相关问题
    • 设备注册相关问题
    • API调用相关问题
    • 应用编译相关问题
由 GitBook 提供支持
在本页
  • 业务应用开发过程
  • 编译过程
  • Wasm开发环境
  • App build方式
  1. 快速入门

应用开发及编译

业务应用开发过程

1、 添加头文件:#include "wd_edge_x.h"添加头文件之后,就可以调用我们提供的open-api

2、编写业务代码

编译过程

1、编译,编译需要使用wasi-sdk提供的编译工具Wasi-sdk仓库地址: https://github.com/WebAssembly/wasi-sdk注:wasi-sdk是用来编译wasm应用程序的,可以直接在https://github.com/WebAssembly/wasi-sdk/releases 下载可用的wasi-sdk

2、编译过程还会用到wamr-sdk,地址:https://github.com/bytecodealliance/wasm-micro-runtime/tree/main/wamr-sdk

3、编写CMakeLists.txt, 示例:

# Copyright (C) 2019 Intel Corporation.  All rights reserved.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

cmake_minimum_required(VERSION 3.0)
project(wasm-app)

set (WAMR_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/..)

if (APPLE)
    set (HAVE_FLAG_SEARCH_PATHS_FIRST 0)
    set (CMAKE_C_LINK_FLAGS "")
    set (CMAKE_CXX_LINK_FLAGS "")
endif ()

set (CMAKE_SYSTEM_PROCESSOR wasm32)
set (CMAKE_SYSROOT                  ${WAMR_ROOT_DIR}/wamr-sdk/app/libc-builtin-sysroot)

if (NOT DEFINED WASI_SDK_DIR)
    set (WASI_SDK_DIR               "../../wasi-sdk-20.0")
endif ()

set (CMAKE_C_FLAGS                  "-nostdlib")
set (CMAKE_C_COMPILER_TARGET        "wasm32")
set (CMAKE_C_COMPILER               "${WASI_SDK_DIR}/bin/clang")

set (CMAKE_EXE_LINKER_FLAGS
    "-Wl,--max-memory=131072 -z stack-size=8192   \
     -Wl,--no-entry,--strip-all                   \
     -Wl,--export=__main_argc_argv                \
     -Wl,--export=__heap_base,--export=__data_end \
     -Wl,--allow-undefined"
)

add_executable(demo1.wasm main.c)
target_link_libraries(demo1.wasm)

4、编译打包脚本:打包脚本:build_and_pack.sh

#!/bin/zsh

# 获取参数个数
num_args=$#
# 检查参数个数是否为零
if [ $num_args -eq 0 ]; then
    echo "参数不存在!请提供app_name参数。"
    exit 1
fi

# 获取第一个参数
APP_NAME=$1
# 判断文件夹是否存在
directory="build"
if [ ! -d "$directory" ]; then
    echo "$directory 目录不存在, 需要先将程序编译"
    mkdir -p $directory
    cd $directory
    cmake ..
    make
else
    echo "目录已存在:$directory"
    cd $directory
    make
fi


# 创建临时工作目录
if [ ! -d "$APP_NAME" ]; then
  mkdir -p "$APP_NAME"
fi

WASM_NAME="$APP_NAME.wasm"
#复制二进制文件到应用目录
cp "$WASM_NAME" "$APP_NAME"

# 创建安装脚本 install.sh
cat <<EOL >"$APP_NAME/install.sh"
#!/bin/sh
# 获取当前用户的home目录  
folder_path=/root/wd_edge/runtime/wasm-app
# 判断如果文件夹不存在则创建
if [ ! -d "\$folder_path" ]; then
  mkdir \$folder_path 
fi
mv $WASM_NAME \$folder_path
EOL

# 创建启动脚本 start.sh
cat <<EOL >"$APP_NAME/start.sh"
#!/bin/sh
APPNAME=$WASM_NAME
APP_PID=\`ps -ef |grep \$APPNAME |grep -v "grep" |awk '{printf "%s ",\$2}'\`
if [ "\$APP_PID" ]; then
  echo "\$APNAME already started..."
else
  folder_path=/root/wd_edge/runtime
  cd \$folder_path
  ./iwasm --native-lib=./libwd_edge_x.so wasm-app/\$APPNAME
fi
EOL

# 创建停止脚本 stop.sh
cat <<EOL >"$APP_NAME/stop.sh"
APPNAME=$WASM_NAME
APP_PID=\`ps -ef |grep \$APPNAME |grep -v "grep" |awk '{printf "%s ",\$2}'\`
if [ "\$APP_PID" ]; then
    kill -9 \$APP_PID
fi
EOL


# 创建卸载脚本 uninstall.sh
cat <<EOL >"$APP_NAME/uninstall.sh"
#!/bin/sh
rm -rf /root/wd_edge/runtime/wasm-app/$WASM_NAME
EOL

chmod a+x "$APP_NAME/install.sh"
chmod a+x "$APP_NAME/start.sh"
chmod a+x "$APP_NAME/stop.sh"
chmod a+x "$APP_NAME/uninstall.sh"


# 使用tar命令创建安装包
OUTPUT_FILE="$APP_NAME.tar.gz"
tar -zcvf "$APP_NAME.tar.gz" "$APP_NAME"
# 输出安装包文件路径
echo "安装包已创建:$APP_NAME.tar.gz"
# 输出安装包md5值
# 计算tar文件的md5值  
tar_md5=$(md5 $OUTPUT_FILE | awk '{print $4}')
echo "MD5值为: $tar_md5"
# 清理临时工作目录
rm -rf "$APP_NAME"
scp $OUTPUT_FILE wudun@172.16.24.119:/home/wudun/snet-test-0621

所有的业务代码及编译需要的工具全部放在/root/projects/wasm-micro-runtime/demo

因为可能有多个业务应用demo,为了互不干扰,分别放在了demo1、demo2等文件夹下。

Wasm开发环境

Ubuntu x86_64:

地址:172.16.30.101 root/wdroot

路径:/root/projects/wasm-micro-runtime/demo

app路径: /root/projects/wasm-micro-runtime/demo/demo1/build/wasm-app

App build方式

cd /root/projects/wasm-micro-runtime/demo/demo1/
rm -rf ./build
mkdir build && cd build
cmake -DWAMR_BUILD_PLATFORM=linux -DWAMR_BUILD_TARGET=AARCH64 ..
make

Build app产物: build/wasm-app/demo1.wasm

编译的产出物的文件名是在CMakeLists.txt 最后两行指定的

上一页快速接入下一页应用部署

最后更新于1年前