本文介绍无AliOS Things的SDK适配过程。

适配流程

整体流程如下图所示,其中HAL和TLS建议以源文件的形式在用户工程进行编译,以避免在工程中编译产生头文件的依赖问题。

C-SDK适配流程

移植步骤

以无AliOS Things的SDK的V1.6.0版本为例。

  1. 下载无AliOS Things的SDK的V1.6.0版本。请参见获取SDK
  2. 编译无AliOS Things的SDK。
    1. 配置交叉编译器路径。

      文件build-rules/settings.mk中修改TOOLCHAIN_DLDIR := /home/mytoolchain 配置编译器的文件夹所在的路径,然后修改build-rules/funcs.mk里面的函数Relative_TcPath增加编译器的相对路径,如以下代码所示。

      define 
      ( \
          case $(1) in \
              xtensa-lx106-elf-gcc ) \
                  echo "gcc-xtensa-lx106-linux/main/bin" ;; \
              arm-none-eabi-gcc ) \
                  echo "gcc-arm-none-eabi-linux/main/bin" ;; \
              nds32le-elf-gcc ) \
                  echo "bin" ;; \
          esac \
      )
      endef
    2. 增加config文件。

      参考src/board/目录下增加一个新的config配置文件,以ESP8266芯片上适配FreeRTOS系统为例,可以增加一个config.freertos.esp8266文件,示例代码如下。

      #添加芯片平台相关的配置
      CONFIG_ENV_CFLAGS += \
          -DBOARD_ESP8266 -u call_user_start \
          -fno-inline-functions \
          -ffunction-sections \
          -fdata-sections \
          -mlongcalls \
          -Wl,-static
      
      #配置编译器选项
      CONFIG_ENV_CFLAGS += -Os
      
      #配置不需要编译的子模块
      CONFIG_src/ref-impl/tls         :=
      CONFIG_src/ref-impl/hal         :=
      CONFIG_examples                 :=
      CONFIG_tests                    :=
      CONFIG_src/tools/linkkit_tsl_convert :=
      
      #交叉编译器的前缀,这里不要带路径
      CROSS_PREFIX := xtensa-lx106-elf-
    3. 编译库文件。
      1. 配置SDK的功能。

        您可以选择以下任一方式:

        • 直接编辑根目录下面的make.settings文件。
        • 执行make menuconfig命令配置。
      2. 执行make clean命令。
      3. 执行make reconfig选择配置。

        如下图输入数字2就是选择config.freertos.esp8266配置。

        config.freertos.esp8266配置
      4. 执行make命令。

        如果没有编译错误,生成的库文件libiot_sdk.aoutput/release/lib目录下面。

    说明 建议您直接在自己的工程中编译HAL和TLS的代码。如果一定要在SDK工程中编译hal,需要先注释掉config.freertos.esp8266中的CONFIG_src/ref-impl/hal :=,同时将hal源文件放在文件夹src/ref-impl/hal/os/freertos文件夹中,依赖的头文件放到prebuild/freertos/include文件夹中。无AliOS Things的SDK V1.6.0之前的版本头文件依赖有个问题,需要修改根目录下面的project.mk文件中的IMPORT_DIR的值,修改为IMPORT_DIR := $(TOP_DIR)/prebuilt
  3. 链接库文件到用户工程。
    1. 将库文件output/release/lib/libiot_sdk.a链接到自己的工程中。
    2. 将目录output/release/include下面的头文件放置到自己的工程中,并配置头文件路径。
    3. 在用户的应用程序中添加头文件include "iot_import.h"

      该头文件会包含SDK的其他头文件。

    4. (可选)如果直接在您自己的工程中编译HAL和TLS的代码,还需在config.freertos.esp8266文件中增加以下代码,并执行make reconfig生效。
      CONFIG_src/ref-impl/tls         :=
      CONFIG_src/ref-impl/hal         :=
      //表示不生成TSL和HAL的库
      说明 每次修改了config.freertos.esp8266文件,都需要执行make reconfig才能生效。
    5. example/linkkit/living_platform下面的文件放到用户的工程中编译,然后启动一个任务执行living_platform_main就可将整个SDK运行起来。
    说明 SDK运行起来后,即可以调试适配的运行错误,例如coap出错可检查HAL_UDP_xxx.c是否适配好。

make相关命令说明

命令 解释
make distclean 清除一切构建过程产生的中间文件,使当前目录仿佛和刚刚clone下来一样。
make 使用默认的或已选中的平台配置文件平台配置文件开始编译。
make env 显示当前编译配置,非常有用,例如可显示交叉编译链,编译CFLAGS等。
make reconfig 弹出多平台选择菜单,用户可按数字键选择,然后根据相应的硬件平台配置开始编译。
make config 显示当前被选择的平台配置文件。
make menuconfig 以图形化的方式编辑和生成功能配置文件make.settings,直接编辑make.settings文件也是有效的。
make help 打印帮助文本。

用户适配HAL的说明

  • 如果是Linux系统,可以直接参考src/ref-impl/hal/os/ubuntu目录下面的C文件,大部分文件可以直接使用。
  • 如果不是Linux的系统,例如FreeRTOS系统,可以参考src/ref-impl/hal/os/ubuntu目录下面的文件实现各个HAL函数的功能。
  • 配网相关的HAL函数比较多,详细介绍请参考文档Wi-Fi设备配网适配开发