本文介紹無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設備配網適配開發