本文介绍如何搭建开发环境和基于各版本的SDK编译固件。

准备开发环境

  1. 搭建SDK的开发环境。

    建议您在64位Ubuntu下搭建设备端SDK的开发环境,并使用vim编辑代码。该部分的操作请自行查阅网络相关文档完成。

    说明 暂不支持在Windows系统(含Windows子系统)下编译生活物联网平台SDK。
  2. 安装Ubuntu(版本16.04 X64)程序运行时库。

    请您按顺序逐条执行命令。

    sudo apt-get update
    sudo apt-get -y install libssl-dev:i386
    sudo apt-get -y install libncurses-dev:i386
    sudo apt-get -y install libreadline-dev:i386
  3. 安装Ubuntu(版本16.04 X64)依赖软件包。

    请您按顺序逐条执行命令。

    sudo apt-get update
    sudo apt-get -y install git wget make flex bison gperf unzip
    sudo apt-get -y install gcc-multilib
    sudo apt-get -y install libssl-dev
    sudo apt-get -y install libncurses-dev
    sudo apt-get -y install libreadline-dev
    sudo apt-get -y install python python-pip
  4. 安装Python依赖包。

    请您按顺序逐条执行命令。

    python -m pip install setuptools
    python -m pip install wheel
    python -m pip install aos-cube
    python -m pip install esptool
    python -m pip install pyserial
    python -m pip install scons
    说明 安装完成后,请您使用aos-cube --version查看aos-cube的版本号,需确保aos-cube的版本号大于等于0.5.11

    如果在安装过程中遇到网络问题,可使用国内镜像文件。

    ### 安装/升级 pip
    python -m pip install --trusted-host=mirrors.aliyun.com -i https://mirrors.aliyun.com/pypi/simple/ --upgrade pip
    ### 基于pip依次安装第三方包和aos-cube
    pip install --trusted-host=mirrors.aliyun.com -i https://mirrors.aliyun.com/pypi/simple/   setuptools
    pip install --trusted-host=mirrors.aliyun.com -i https://mirrors.aliyun.com/pypi/simple/   wheel
    pip install --trusted-host=mirrors.aliyun.com -i https://mirrors.aliyun.com/pypi/simple/   aos-cube

编译含AliOS Things的SDK(V1.3.0及以上版本)

如果您基于含AliOS Things的SDK(V1.3.0及以上版本)来开发设备固件,请根据以下步骤来编译SDK。

  1. 在开发环境中解压下载的SDK压缩包。
    如果您通过git命令的方式下载SDK,则无需解压。
  2. 将开发的业务代码存放到SDK相应的目录下。

    如果您基于V1.3.0以上版本开发设备固件,可以将开发的代码存放到Products/品类目录/应用名/…下(例如Products/example/smart_outlet为单路智能插座参考实现)。

    SDK V1.3.0及以上版本的详细目录结构如下图所示。

    ali-smartliving-device-alios-things
    ├── build.sh
    ├── LICENSE
    ├── Living_SDK
    │   ├── 3rdparty
    │   ├── app
    │   ├── board
    │   ├── build
    │   ├── device
    │   ├── doc
    │   ├── example
    │   ├── framework
    │   ├── gen_firmware.sh -> example/smart_led_strip/gen_firmware.sh
    │   ├── include
    │   ├── kernel
    │   ├── LICENSE
    │   ├── NOTICE
    │   ├── platform
    │   ├── projects
    │   ├── README.md
    │   ├── security
    │   ├── site_scons
    │   ├── test
    │   ├── tools
    │   ├── ucube.py
    │   └── utility
    ├── Products
    │   ├── example
    │   ├── Smart_lighting
    │   └── Smart_outlet
    ├── README.md
    ├── Service
    │   └── version
    └── tools
        ├── 5981a.sh
        ├── amebaz_dev
        ├── amebaz_dev.sh
        ├── asr5501
        ├── asr5501.sh
        ├── bk7231u
        ├── bk7231udevkitc.sh
        ├── cmd
        ├── mk3060.sh
        ├── mk3080.sh
        ├── moc108
        ├── mx1270.sh
        ├── rda5981
        ├── rtl8710bn
        └── scripts
  3. 编译SDK。
    1. 在SDK根目录,执行vim build.sh命令打开build.sh文件。
    2. 根据硬件使用的模组型号和要编译的应用,修改文件中的如下参数。
      default_type="example"      //配置产品类型
      default_app="smart_outlet"  //配置编译的应用名称
      default_board="uno-91h"     //配置编译的模组型号
      default_region=SINGAPORE    //配置设备的连云区域:
      //V1.5.0及以下版本:设备在中国内地激活配置为MAINLAND,其余地区激活配置为SINGAPORE
      //V1.6.0及以上版本:配置为MAINLAND或SINGAPORE都可以,设备可以全球范围内激活
      default_env=ONLINE      //配置连云环境
      Debug log:default_debug=0
      default_args=""         //配置其他编译参数
      
      //更多介绍请参见README.md
    3. 执行./build.sh命令。

      以基于uno-91h模组编译smart_outlet应用为例,编译完成后,在out\smart_outlet@uno-91h目录下会生成smart_outlet@uno-91h_all.bin文件。该文件为需要烧录到真实设备中的固件。

      说明 : build.sh脚本会自动判断指定模组的toolchain(交叉编译工具链)是否已经安装,如果没有安装,脚本会自动安装。

      编译该版本SDK时,如果出现头文件、静态库缺失等错误,请参见常见问题

编译含AliOS Things的SDK(V1.1.0及以下版本)

如果您基于含AliOS Things的SDK V1.1.0或者V1.0.0版本(原天猫精灵Wi-Fi SDK)来开发设备固件,请根据以下步骤来编译SDK。

  1. 在开发环境中解压下载的SDK压缩包。
    如果您通过git命令的方式下载SDK,则无需解压。
  2. 将开发的业务代码存放到SDK相应的目录下。

    可以将开发的代码存放到example/应用名下,如您基于linkkitapp开发,即把新增加的代码合入example/linkkitapp目录。

    SDK V1.1.0之前版本与SDK V1.3.0及以上版本的目录对比如下。

    目录机构对比
  3. 编译SDK。
    1. 以mk3060模组为例,如果是第一次编译,在SDK根目录,执行编译如下命令,会自动安装指定模组的toolchain。
      aos make helloworld@mk3060
    2. 如已经安装toolchain,在SDK根目录,执行编译如下命令。
      aos make linkkitapp@mk3060

      编译完成后,在out\linkkitapp@mk3060\binary目录下会生成linkkitapp@mk3060_crc.bin文件。该文件为需要烧录到真实设备中的固件。

      如果编译失败且提示头文件或静态库缺失的错误,请参见常见问题

编译无AliOS Things的SDK

如果您基于无AliOS Things的SDK来开发设备固件,请根据以下步骤来编译SDK(无AliOS Things SDK各版本的编译操作一致)。

  1. 在开发环境中解压下载的SDK压缩包。
    如果您通过git命令的方式下载SDK,则无需解压。
  2. 将开发的业务代码存放到SDK相应的目录下。

    不含AliOS Things的SDK目录结构如下所示。

    ali-smartliving-device-sdk-c
    ├── build-rules
    │   ├── docs
    │   ├── funcs.mk
    │   ├── hooks
    │   ├── misc
    │   ├── pre-build.sh
    │   ├── _rules-complib.mk
    │   ├── _rules-coverage.mk
    │   ├── _rules-dist.mk
    │   ├── _rules-flat.mk
    │   ├── _rules-kmod.mk
    │   ├── _rules-libs.mk
    │   ├── rules.mk
    │   ├── _rules-modinfo.mk
    │   ├── _rules-origin.mk
    │   ├── _rules-prefix.mk
    │   ├── _rules-prog.mk
    │   ├── _rules-repo.mk
    │   ├── _rules-submods.mk
    │   ├── _rules-top.mk
    │   ├── scripts
    │   └── settings.mk
    ├── CMakeLists.txt
    ├── components
    │   ├── tick_notify
    │   └── timer_service
    ├── Config.in
    ├── Config.linkkit
    ├── docs
    │   ├── 智能生活C-SDK适配FreeRTOS帮助文档.pdf
    │   ├── 智能生活SDK复位功能介绍.pdf
    │   └── 智能生活设备配网绑定问题分析参考.pdf
    ├── examples
    │   ├── cJSON.c
    │   ├── cJSON.h
    │   ├── iot.mk
    │   └── linkkit
    ├── include
    │   ├── exports
    │   ├── imports
    │   ├── iot_export.h
    │   └── iot_import.h
    ├── lib
    │   ├── ANDES_N10
    │   ├── ARM968E-S
    │   ├── Cortex-M4
    │   ├── linux
    │   └── xtensa
    ├── LICENSE
    ├── linkkit_kv.bin
    ├── makefile
    ├── make.settings
    ├── output
    │   └── release
    ├── prebuilt
    │   ├── extra
    │   ├── mdm9206
    │   ├── ubuntu
    │   └── win7
    ├── project.mk
    ├── README.md
    ├── sdk-c.mk
    └── src
        ├── board
        ├── infra
        ├── protocol
        ├── ref-impl
        ├── sdk-impl
        ├── security
        ├── services
        └── tools
  3. 编译SDK。
    1. 在SDK根目录,执行vim make.settings命令打开make.settings文件。
    2. 根据硬件使用的模组型号和要编译的应用,修改文件中的如下参数。

      其中详细的参数解释请参见基于非认证的模组开发

      #=========Basic Features==========
      FEATURE_SRCPATH="."
      FEATURE_MQTT_COMM_ENABLED=y
      FEATURE_MQTT_AUTO_SUBSCRIBE=y
      FEATURE_DEVICE_MODEL_ENABLED=y
      FEATURE_OTA_ENABLED=y
      FEATURE_DEV_BIND_ENABLED=y
      FEATURE_SUPPORT_TLS=y
      #Support unified service post
      FEATURE_DM_UNIFIED_SERVICE_POST=y
      #=========Basic Features==========
      
      #=========User Config Features==========
      FEATURE_ALCS_ENABLED=y
      
      # FEATURE_DEVICE_MODEL_GATEWAY=n
      
      #
      # AWSS Configurations
      #
      FEATURE_WIFI_PROVISION_ENABLED=y
      
      FEATURE_AWSS_SUPPORT_SMARTCONFIG=y
      FEATURE_AWSS_SUPPORT_ZEROCONFIG=y
      FEATURE_AWSS_SUPPORT_DEV_AP=y
    3. 执行make distclean命令。
    4. 执行make reconfig命令,并在出现以下提示后,输入选项对应的序号。

      请根据要编译的目标平台(即board)来选择。如果您编译demo,则选择7

      SELECT A CONFIGURATION:
      
      1) config.esp8266.aos       6) config.rhino.make
      2) config.freertos.esp8266  7) config.ubuntu.x86
      3) config.macos.x86         8) config.win7.mingw32
      4) config.mk3060.aos        9) config.xboard.make
      5) config.mk3080.aos
    5. 执行make命令。

      以编译config.ubuntu.x86为例,编译完成后,在output/release/bin目录下会生成living_platform文件为demo。如果您编译真实固件请参见无AliOS Things的SDK适配指南