QuecOpen® 快速入门指南

引言

移远通信FC41D、FCMxx0D和FLMx40D模块支持QuecOpen®方案。QuecOpen®是基于RTOS系统的嵌入式开发平台,可简化IoT应用的软件设计和开发过程。

本文档适用于SDK构建环境的QuecOpen®方案,主要介绍移远通信FC41D、FCMxx0D和FLMx40D模块的SDK目录结构、编译环境搭建、应用程序开发、编译流程、固件烧录及Linux下常见编译报错。

适用模块

适用模块:

模块系列 模块
FC41D
FCMxx0D FCM100D
FCM740D
FLMx40D FLM040D
FLM140D
FLM240D
FLM340D

SDK目录结构

移远通信发布的QuecOpen SDK中,不同版本的SDK目录可能略有差异,但作用无差异。Windows和Linux操作系统下QuecOpen SDK目录(示例)如下表所示。

SDK目录结构:

目录名称 描述
ql_application 存放示例文件和用户的应用工程代码
ql_build 存放和编译相关的脚本文件
ql_components 存放组件,包括第三方组件以及移远通信API组件
ql_kernel 存放与芯片相关的代码以及代码库,包括对RTOS的支持(目前仅支持FreeRTOS)
ql_out 工程编译输出的用于烧录的文件,包括.bin、map文件以及编译日志等
ql_tools 编译过程中需使用的工具链

搭建项目编译环境

模块的项目编译工具链为gcc-arm-none-eabi,即ARM裸机系统的GCC工具链,支持在Linux或Windows操作系统下编译项目。SDK包在ql_tools目录下集成了gcc-arm-none-eabi工具链、CMake以及MinGW(MinGW仅在Windows操作系统下编译项目时需要)并支持自动解压以供使用。推荐使用的操作系统为Ubuntu 16.04及以上版本或Windows 10及以上版本,另需安装Python 3及以上版本并将其添加至系统环境变量中。

在Linux操作系统下编译项目时,仅支持使用SDK中集成的gcc-arm-none-eabi工具链,不支持使用Linux操作系统自动安装的gcc-arm-none-eabi工具链。

若SDK包中集成的gcc-arm-none-eabi工具链自动解压安装失败,则可在SDK包对应目录手动解压安装,可参考如下步骤。

  1. 打开Linux命令终端,进入ql_tools目录文件夹下,执行tar -vxf gcc-arm-none-eabi-5_4- 2016q3.tar.bz2解压工具链(如已解压,忽略此步骤)。

    解压工具链

  2. 执行sudo vim ~/.bashrc打开环境变量配置文件。

    打开环境变量配置文件

  3. 在环境变量配置文件的最后一行添加环境变量(文件路径按照实际路径添加,下述路径仅供参考:export PATH=\$PATH:/home/xxx/F01DR01A01_C_SDKV01/ql_tools/gcc-arm-no ne-eabi-5_4-2016q3/bin)。

    添加环境变量

  4. 保存并关闭配置文件。此时环境变量添加完成,即项目编译环境搭建完成。

开发应用程序

创建应用程序目录

  1. 在QuecOpenSDK的ql_application目录下创建所需的用户文件夹,例如创建存放源文件和头文件的文件夹。以创建user_code为例,如下所示。

    创建文件夹user_code

  2. user_code文件夹中新建文件user_code.cuser_code.h

    新建文件user_code.c和user_code.h

应用程序示例说明

QuecOpen SDK中提供应用程序示例,用户可参考SDK中ql_application/quectel_demo目录下的示例进行应用程序的开发。

QuecOpen SDK中的ql_application/目录下的ql_app.c文件中包含应用程序示例入口,即ql_demo_main()。在该函数中启动一个初始化线程,然后在该初始化线程中调用各个功能组件的初始化接口。各个功能组件按照文件夹划分,用户可参考如下程序逻辑编写代码。

启动初始化进程示例

添加用户应用程序

创建应用线程

  1. 新建并编写文件user_code.cuser_code.h,存放在user_code目录下。编写user_code.c文件的示例如下:

    编写user_code.c文件示例

    上图中序号对应的含义如下:

    1. 用户自定义添加所需的头文件
    2. 初始化配置
    3. 任务处理代码
    4. 任务创建函数
  2. ql_demo_main()函数中添加test_thread_creat()即可在程序中创建task_thread任务。

    创建task_thread任务

添加编译文件

将源文件和头文件添加到编译脚本中才能正常使用,否则编译时会提示找不到文件。操作步骤如下:

  1. 打开ql_application/quectel_demo文件夹,打开其中的CMakeLists.txt

    打开CMakeLists.txt文件

  2. 定位到"list(APPEND ql_demo_include_files"并在该位置添加用户的头文件所在的路径,如下图红框中内容所示:

    添加头文件目录

  3. 定位到"list(APPEND ql_demo_source_files"并在该位置添加用户的源文件,如下图红框中内容所示:

    添加源文件

编译应用程序

编译说明

模块支持在Windows或Linux操作系统下编译应用程序。

Linux操作系统

打开Linux命令终端,进入SDK根目录,执行 ./build.sh 查看编译选项,再执行相应的编译选项编译应用程序。例如,执行 ./build.sh new FC41D your_firmware_versionyour_firmware_version表示当前模块使用的版本号)表示编译FC41D当前固件版本,如下图所示。

编译应用程序(Linux操作系统)

Windows操作系统

打开Windows命令终端,进入SDK根目录,执行build.bat查看编译选项,再执行相应的编译选项编译应用程序。例如,执行 build new FC41D your_firmware_versionyour_firmware_version表示当前模块使用的版本号)表示编译FC41D当前固件版本,如下图所示。

编译应用程序(Windows操作系统)

编译成功的界面如下图所示。

编译成功

编译结果

编译生成的文件存放于ql_out目录下。ql_out文件夹的内容如下图所示。

编译结果

ql_out 文件夹中,以下文件分别为:

  • all_2M.1220.bin:生成的完整程序固件,该固件通过串口进行烧录;

  • bootloader_bk7231n_uart2_v1.0.6.bin:Bootloader文件;

  • FC41D.bin:OTA升级时的打包固件;

  • FC41D.elf:Linux下生成的可执行目标文件;

  • FC41D.map:程序map文件;

  • FC41D_uart_2M.1220.bin:生成的实际固件(即完整固件除去boot部分)。

清除编译文件

每次编译时会自动清除上次生成的文件。

固件烧录

  1. 联系移远通信技术支持获取BKFIL开发工具及工具相关使用信息。

  2. 打开BKFIL工具,点击工具主界面的"选择串口"按钮,选择主串口进行固件烧录

  3. 点击"Bin文件路径"后的icon图标,选择ql_out/all_2M.1220.bin文件。

    BKFIL工具界面

  4. 点击 "烧录"选项后,再按下模块上的复位键,进行固件烧录。

  5. 烧录完成后,"实时状态"区域显示"done"表示烧录成功。重启模块,选择模块通讯端口,使用串口工具连接模块串口。

    模块开机log如下图所示:

    开机启动Log

Linux下常见编译报错

  1. Error message: "arm-none-eabi-gcc: Command not found"

    该错误提示表示未安装gcc-arm-none-eabi工具链到环境变量中或者缺少依赖组件。
    可通过如下方法解决:

    • 需先安装gcc-arm-none-eabi工具链到环境变量中,详细步骤请参考搭建项目编译环境

    • 若安装工具链完成后仍有错误提示,则表示缺少依赖组件,可执行如下命令安装依赖组件:

      apt install libc6-i386 lsb-core
      apt-get install lib32z1
      apt-get install lib32stdc++6
      apt-get install libstdc++6

    未安装gcc-arm-none-eabi工具链或缺失依赖组件

  2. Error message " arm-none-eabi-gcc: fatal error: -fuse-linker-plugin, but liblto_plugin.so not found"

    此错误提示表示未找到liblto_plugin.so文件。
    可通过如下方法解决:

    • 此时将toolchain/gcc-arm-none-eabi-5_4-2016q3/lib/gcc/arm-none-eabi/5.4.1/目录下的liblto_plugin.so.0.0.0文件名称修改为liblto_plugin.so即可。

    未找到liblto_plugin.so文件

附录 术语缩写

术语缩写:

缩写 英文全称 中文全称
API Application Programming Interface 应用程序接口
APP Application 应用程序
ARM Advanced RISC Machine 高阶RISC机器
GCC GNU Compiler Collection GNU编译器套件
IoT Internet of Things 物联网
OTA Over-the-air programming 空中编程
RTOS Real-Time Operating System 实时操作系统
SDK Software Development Kit 软件开发工具包