# 什么是 MXOS Cube?
mxos cube 是 MXCHIP 开发的 mxos 软件开发管理工具,脚本名称:mxos-cube。它用于管理基于mxos的完整开发流程,包括:代码库版本管理,维护代码依赖,发布代码,从远程代码仓库更新以及启动mxos编译系统实现编译,下载,调试等。
本文档包含 mxos cube 的安装和使用方法。
#写在前面
mxos cube 基本工作流程:
- 新建或者导入一个项目或组件,并为它创建一个版本库。无论新建还是导入,都会在项目中自动附带一个mxos os的版本库.
- 编译,下载和调试应用程序代码.
- 发布您的应用程序.
除了以上基本的工作流,mxos cube 针对长期的开发和维护,提供了额外的版本控制功能。它可以基于版本库进行选择性的升级,使得您的应用程序 在mxos OS和其他组件持续更新时,仍然能够维持开发时的版本,保障应用程序的可用性。
小窍门: 使用mxos --help
可以列出所有mxos cube所支持的指令,特定某一个指令的帮助可以使用mxos <command>--help
。
mxos cube 支持 Windows, Linux 和 macOS 三个平台 。
#安装 Python
- Python - mxos cube 是一个Python脚本,所以您需要在系统中安装Python。mxos cube 提供支持Python3 和Python2两个版本,其中Python2在Python version 2.7.13 (opens new window) 下开发和测试。 注意: Python的可执行文件目录(
Python
)需要添加到系统的PATH环境变量中,在Python安装时指定。 在终端上输入python
命令来验证Python是否正确安装:
$ python --version Python 3.9.7
#安装 Git
Git or Mercurial - mxos cube支持Git和Mercurial两种, 任选其一安装即可:
- Git (opens new window) - 版本 1.9.5 及以上。
- Mercurial (opens new window) - 版本 2.2.2 及以上。
注意: Git和Mercurial的可执行文件目录需要添加到系统的PATH环境变量中。
在终端上输入git --version
命令来验证是否正确安装:
git --version git version 2.11.0 (Apple Git-81)
#下载 MiCoder Toolchain 工具包
- MiCoder (opens new window) - mxos cube 调用 mxos OS 中的脚本来完成诸如编译,下载,调试等各项功能. 这些脚本的运行需要用到MiCoder 工具链,它包含了编译 mxos 应用程序所需要的工具链,根据各个 PC 平台提供相应版本。
#安装 mxos cube
安装mxos cube 需要使用Python中自带的pip安装工具,请在安装Python是,选择安装pip工具。
在macOS上,默认已经安装了python 2.7,可以通过下面的方法安装对应的pip工具。
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py python get-pip.py
您可以从执行 pip install mxos-cube3
命令来安装 mxos cube,如系统中安装的是Python 2,则执行 pip install mxos-cube
:
$ pip install mxos-cube3 Collecting mxos-cube3 Using cached mxos_cube3-0.1.2-py3-none-any.whl (30 kB) Installing collected packages: mxos-cube3 Successfully installed mxos-cube3-0.1.2
在 Linux 和 macOS 上, 需要加上 sudo
获得安装权限.
#升级 mxos cube
mxos cube安装完成后,可以通过pip install --upgrade mxos-cube
命令来升级mxos cube的版本。
$ pip install --upgrade mxos-cube Requirement already up-to-date: mxos-cube in /usr/local/lib/python2.7/site-packages (0.1.0)
在Linux和macOS上, 需要加上sudo
获得安装权限.
#了解工作交换区和项目根目录
mxos cube 和 Git,Mercurial 等其命令行工具一样,使用当前路径作为工作交换区。所以当您执行任何mxos cube的版本控制命令之前,需要首先将当前路径切换到包含需要操作的代码目录。
例如,如果您需要升级你的 mxos-example-program
项目中的 mxos os 的源代码:
$ cd mxos-example-program $ cd mxos $ mxos update master # This will update "mxos", not "mxos-example-program"
mxos os 也是包含版本管理的开源项目,允许各个开发者向 mxos os 贡献代码。
mxos 项目开发时,需要实现对整个项目以及包含的组件能够自由地切换版本,管理历史记录,与版本库同步,与其他开发者共享等等。因此需要一个基于版本控制 Git (opens new window) 或者 Mercurial (opens new window) 的项目根目录。此外,项目根目录下保存了项目的一些配置信息,所以在编译mxos项目时,应将路径切换到项目根目录下。使用mxos new
,mxos import
命令会自动将源代码根目录设置成项目根目录。而如果从Git仓库上直接下载的源代码,则应该进入源代码路径,并且执行mxos new .
将当前目录设置成项目根目录。
注意: mxos cube 在以.component
为后缀的文件(例如lib_name.component
)中保存依赖组件的链接信息; 以.code
为后缀的文件(例如name_src.codes
)中保存可选依赖组件的链接信息. 这些文件都是可读的文本文件,但是我们强烈建议不要手动修改文件的内容,而是使用mxos cube的相应命令来自动生成和修改,例如:$ mxos sync
。这些文件我们称之为依赖描述文件。
#创建和导入项目
mxos cube 可以创建和导入基于 mxos 的软件项目。
#创建一个新项目
每当你创建一个新项目,mxos cube 自动导入最新的 mxos sdk 每一个发布都包含了所有组件: 代码和编译调试脚本。
接下来让我们来创建一个新的项目 (命名为mxos-program
):
$ mxos new mxos-program [mxos] Creating new program "mxos-program" (git) [mxos] Adding component "mxos" from "https://code.aliyun.com/mxos/mxos.git" at latest revision in the current branch [mxos] Updating reference "mxos" -> "https://code.aliyun.com/mxos/mxos.git/#cdb0b3b8ab9aea947ea2a2972841237d1bf7276f"
Tips:若需要看到详细的项目创建过程 log 信息,可以在指令中加入 -v -vv 后缀,形如:
$ mxos new mxos-program -v -vv
这个命令创建了一个新的目录"mxos-os-program",初始化了一个新的版本库并且在项目中导入了一个最新版本的mxos-os依赖。
Tips: 使用参数--scm [name|none]
, 您能够选择版本库的格式,或者选择不初始化版本库。
使用mxos ls
列出项目中所有导入的组件
$ cd mxos-program $ mxos ls -a mxos-program (jenny_git/test2/mxos-program) `- mxos (https://code.aliyun.com/mxos/mxos.git#26acf1a9d635)
Note: 如果您从一个现有的空目录开始,可以使用mxos new .
命令来初始化mxos项目,并且在该文件夹中初始化版本仓库。
$ cd emptyfolder $ mxos new . [mxos] Creating new program "test2" (git) [mxos] Adding component "mxos" from "https://code.aliyun.com/mxos/mxos.git" at latest revision in the current branch no[mxos] Updating reference "mxos" -> "https://code.aliyun.com/mxos/mxos.git/#26acf1a9d6359e19e0039b8d97f53c61ecf5fbe9"
#创建不包含mxos os的新项目
你可以通过命令参数 --create-only
来创建一个不包含mxos os,也即 无包含 mxos 文件夹目录的空工程。
$ mxos new noos --creat-only [mxos] Creating new program "noos" (git) [mxos] Adding component "mxos" from "https://code.aliyun.com/mxos/mxos.git" at latest revision in the current branch [mxos] Updating reference "mxos" -> "https://code.aliyun.com/mxos/mxos.git/#26acf1a9d6359e19e0039b8d97f53c61ecf5fbe9"
#导入一个现有的项目
#导入第一个mxos应用程序demos
你可以使用 mxos import
命令从一个版本仓库克隆一个项目到本地,并且部署所有依赖项:
$ mxos import https://code.aliyun.com/mxos/demos.git [mxos] Importing program "demos" from "https://code.aliyun.com/mxos/demos.git" at latest revision in the current branch [mxos] Adding component "mxos" from "https://code.aliyun.com/mxos/mxos.git" at rev #576c9ee9fb7d
Tips:若需要看到详细的项目导入过程 log 信息,可以在指令中加入 -v -vv 后缀,形如:
$ mxos import https://code.aliyun.com/mxos/demos.git
-v -vv
说明:如果你在"import"命令中不指定完整的路径,mxos cube会自动加上默认的路径前缀 (https://code.aliyun.com/mxos (opens new window)) 。例如,以下命令:
$ mxos import demos
与这个命令等价
$ mxos import https://code.aliyun.com/mxos/demos.git
提示:更多的项目仓库地址可查看:mxos的项目和组件
获取到的项目开发包中的 mxos os 有可能不是最新版本,可通过进入 mxos 目录,查看最新版本并更新。指令如下:
$ cd mxos $ git tag 0.1 0.2 $ mxos update 0.2 [mxos] Updating library "mxos" to branch 0.2 [mxos] Adding component "platform/MCU/RTL8721D/sdk" from "https://code.aliyun.com/mico_inner_developer/ameba-d.git" at rev #a62178232ae1
#demos 是什么
demos 中包含了各单个功能的示例代码,如::外设,wifi无线,wifi_uart串口透传,安全算法,net网络通信,http通信等。
$ mxos import https://code.aliyun.com/mxos/mxos-demos.git [mxos] Importing program "mxos-demos" from "https://code.aliyun.com/mxos/mxos-demos.git" at latest revision in the current branch [mxos] Adding library "mxos-os" from "https://code.aliyun.com/mxos/mxos-os.git" at rev #dd36dc4228b5 $ cd mxos-demos
Tips:若需要看到详细的项目导入过程 log 信息,可以在指令中加入 -v -vv 后缀,形如:
$ mxos import https://code.aliyun.com/mxos/mxos-demos.git -v -vv
#从一个现有的 Git 仓库克隆导入
如果你在工作区中手动克隆了一个Git版本库,现有想要添加所有丢失的依赖组件。可以使用 deploy
命令:
$ mxos deploy [mxos] Updating component "mxos" to rev #3534b5cadeeb [mxos] Updating component "mxos/platform/MCU/RTL8721D/sdk" to rev #a62178232ae1
然后,不要忘了将当前项目路径设置为项目根目录:
$ mxos new .
#添加和移除组件
在编写mxos代码时,常常需要在应用程序中添加另一个组件(依赖),或者移除一个现有的组件。
mxos cube添加和删除功能不等同于hg
, git
版本管理软件的内置功能,而是针对mxos项目的特点进行了改造:
- 将新的组件添加到项目中不等同于从版本库中克隆一个仓库,所以不要使用
hg
或git
命令,而要使用mxos add
来添加组件。它可以保证所有的依赖(组件以及子组件)都能被同时生成出来。 - 移除一个组件也不仅仅是删除这个组件目录 - 依赖描述文件(
.component
)也需要删除和升级。使用mxos remove
命令来移除组件,而不要简单地使用rm
命令。
#添加组件
使用 mxos add
命令添加组件的最新版本:
$ mxos add https://code.aliyun.com/mxos/Lib_aws.git
可以使用URL#hash格式来添加一个组件的特定版本 format to add a library at a specific revision:
$ mxos add https://code.aliyun.com/mxos/Lib_aws.git/#e5a0dcb43ecc
#移除组件
如果不再需要一个组件,你能够使用 mxos remove
命令来删除这个组件:
$ mxos remove Lib_aws
#代码编译
#配置 MiCoder 路径
完成项目创建和导入后,你需要为 mxos cube 设置 MiCoder 工具链的路径,以便mxos cube调用这些工具来编译mxos项目。
你可以通过以下命令来设置 MiCoder 的路径(注意:路径中不可以包含空格,否则路径无效):
$ mxos config --global MICODER /Users/haiqin/jenny_tools/MiCoder [mxos] /Users/haiqin/jenny_tools/MiCoder now set as default MICODER in program "demos"
-G
或 --global
开关可以让mxos Cube设置一个全局的参数,而不是针对当前项目的私有参数。
你可以通过下面的命令查看 MiCoder 的配置路径:
$ mxos config --list [mxos] Global config: MICODER=/Users/haiqin/jenny_tools/MiCoder [mxos] Local config (/Users/haiqin/jenny_git/test/demos): MICODER=/Users/haiqin/jenny_tools/MiCoder
#编译项目
使用mxos make
命令来编译项目:
$ mxos make helloworld@MK3165 make helloworld@MK3165 Making config file for first time processing components: helloworld MK3165 FreeRTOS LwIP wolfSSL mxos mxos core based on pre-build library: ===mxos.3165.GCC.a=== Skipping building bootloader due to "total" is not set Compiling App_Helloworld Compiling Board_MK3165 Compiling FreeRTOS ... [SNIP] ... Making build/helloworld@MK3165/libraries/STM32F4xx_Peripheral_Libraries.a Making helloworld@MK3165.elf Making helloworld@MK3165.hex Making helloworld@MK3165.bin mxos MEMORY MAP |=================================================================| | MODULE | ROM | RAM | |=================================================================| | App_Helloworld | 141 | 0 | ... [SNIP] ... | STM32F4xx_Peripheral_Drivers | 9299 | 236 | | STM32F4xx_Peripheral_Libraries | 5948 | 16 | | *fill* | 253 | 926 | |=================================================================| | TOTAL (bytes) | 243524 | 34971 | |=================================================================| Build complete Making .gdbinit Making .openocd_cfg
make 编译命令格式:
<target>[download] [run | debug] [JTAG=xxx] [VERBOSE=1] [JOBS=<jobs>]
具体参数如下:
<target>
用于选择编译目标. 目标由参与编译的各个组件构成, 以下的每一个组件用'@'分割开来。Application
(项目中需要编译的应用程序组件,即应用程序在项目中的路径,并将/
替换成.
)Board
(mxos/board/*
中定义的硬件平台组件 )[RTOS]
(mxos/mxos/rtos/*
中定义的RTOS内核组件, 默认使用FreeRTOS
)[Network Stack]
(mxos/mxos/net/*
中定义的网络协议栈组件,默认使用LwIP
)[TLS]
(mxos/mxos/security/TLS/*
中定义的安全传输组件, 默认使用wolfSSL
)[debug | release_log | release]
( 编译选项默认使用release_log
)
[download]
通过调试器下载目标固件到硬件平台,。[run|debug]
通过调试器复位硬件并运行程序或者连接到目标处理器进行调试。[JTAG=xxx]
mxos/makefiles/OpenOCD/interface 中定义的JTAG接口配置文件。省略不写即默认使用jlink_swd
。[VERBOSE=1]
(可选) 显示编译过程中运行的命令。[JOBS=<jobs>]
(可选) 控制多线程编译,提高编译速度。默认值是 4。可以根据处理器核心的数量来设置这个参数,也可以使用JOBS=1
来执行单线程的顺序编译。
如:
- 编译基于 MiCOKit-3165 的 Helloworld 应用程序,使用命令:
mxos make helloworld@MK3165 JTAG=jlink_swd
- 编译基于 MiCOKit-3165 的 Helloworld 应用程序和其他固件,使用命令:
mxos make helloworld@MK3165 total
- 编译并且下载基于 MiCOKit-3031 的 Helloworld 应用程序和其他相关固件,使用命令:
mxos make helloworld@MK3031 total download JTAG=jlink_swd
- 编译并且下载基于 MXKit-3080B 的 Helloworld 应用程序和其他相关固件,使用命令:
mxos make helloworld@MK3080B total download JTAG=jlink_swd
注意:
- 编译生成的可执行文件,ELF文件,内存使用和链接数据可以在
build/<target>/binary
目录下找到。
#编译静态库
使用 mxos makelib
命令来将您自己的代码编译成静态库。
命令: mxos makelib --new source
参数:
[--new]
:用于生成静态库编译依赖.mk
文件。<source>
:源文件所在目录。
步骤:
- 使用
mxos makelib --new
命令生成静态库编译描述文件 .mk; - 打开 .mk 文件,添加编译静态库需要的编译参数、宏,搜索路径和源代码文件;
- 使用
mxos makelib
命令在上层文件夹中生成静态库文件。
案例:
假设项目根目录为 demos
,在demos/mxos/staticlib
下有需要编译成静态库的头文件mystaticlib.h
和源文件mystaticlib.c
。
- 进入mxos项目根目录
cd demos
。 - 运行
mxos makelib --new mxos/staticlib
。在 "staticlib" 目录下会自动生成 "staticlib_src.mk"。 - 修改文件
staticlib_src.mk
NAME := staticlib # Add compiler flags here $(NAME)_CFLAGS := # Add definations here $(NAME)_DEFINES := # Add includes path here, should be realtive path to current directory $(NAME)_INCLUDES := . # Add sources path here, should be realtive path to current directory $(NAME)_SOURCES := mystaticlib.c
- 运行
mxos makelib mxos-os/staticlib
命令,在目录 "demos/mxos" 下将会生成所编译的静态库文件。
$ mxos makelib mxos/staticlib Compiling mxos-os/mystaticlib/mystaticlib.c Make staticlib.Cortex-M3.GCC.release.a DONE Compiling mxos-os/mystaticlib/mystaticlib.c Make staticlib.Cortex-M4.GCC.release.a DONE Compiling mxos-os/mystaticlib/mystaticlib.c Make staticlib.Cortex-M4F.GCC.release.a DONE
#推送改动
#检查本地状态
在软件开发过程中,你总是会对你的代码或者是依赖的组件中的代码进行修改。通过运行 mxos status
命令,你可以递归地获得当前项目以及所有依赖组件的修改状态,如果版本库中有没有提交的修改,指令的运行结果会显示这些改动。
例如:
$ mxos status [mxos] Status for "demos": M mxos.component [mxos] Status for "mxos": M platform/MCU/STM32F4xx/platform_init.c
你可以提交或者丢弃这些改动。
#推送到远端仓库
使用 mxos publish
命令将本地的改动推送到远端。publish
是递归执行的,它首先推送树叶依赖项,然后更新上层的依赖描述文件,再推送上层.
下面举一个例子说明,假设我们的项目的依赖关系如下(使用 mxos ls
命令):
my-mxos-example (a5ac4bf2e468) |- mxos(5fea6e69ec1a) `- my-libs (e39199afa2da) |- my-libs/iot-client (571cfef17dd0) `- my-libs/test-framework (cd18b5a50df4)
我们假设在 iot-client
组件上作了修改。mxos publish
会执行以下操作:
- 检测树叶依赖项
iot-client
,并且询问你是否要提交改动。 - 检测父项
my-libs
。
- 更新
my-libs
的依赖描述文件(iot-client.component
文件),将描述文件中的链接地址更新到最新的iot-client
版本。 - 再询问您是否要提交
my-libs
的改动。
- 最终检查
my-mxos-os-example
项目,更新依赖描述文件并提交。
#发布本地项目或组件
当你新建一个新的(本地)基于版本控制的项目或者组件,他们的版本历史仅存在于本地,而没有远程仓库同步。你可以按照以下步骤将本地版本库推送到远端,而不丢失本地保存的历史版本:
- 首先在远程服务器上创建一个新的版本库,服务器可以是一个公共的代码管理服务( GitHub, Bitbucke,code.aliyun 等),你自己的私有服务,甚至是你本地系统上的另一个地址 (例如创建一个本地版本库
mxos-os-example/local-lib
)。 - 关联远程仓库。
- 使用Git命令
git remote add origin <url-or-paht-to-your-remote-repo>
.
- 运行
mxos publish
来发布您的改动。
在使用了嵌套的本地版本库,应先从叶子版本库开始。
#从原始仓库派生的工作流-Forking
Git支持非对称工作流:发布/推送的远端仓库和原始("origin")不同。这就使得新的版本存放在一个由原始仓库派生的版本仓库中的同时,又可以和原始的仓库保持同步。通过这种方式,在一个有没有权限的仓库派生的仓库中修改代码,完成版本的同步,最终向原始仓库提交推送请求。
为了实现这个功能,应首先导入一个mxos OS项目,组件或者mxos OS本身,然后设置他们的推送目标到一个由原始仓库派生("Fork")的远程仓库。例如:
$ git remote set-url --push origin https://code.aliyun.com/william/repo-fork.git
这样,每次你使用git
来提交或者推送,或是使用 mxos publish
,新的版本将会推送到你的派生仓库。你仍然可以从原始仓库中通过 mxos update
或 git pull
更新版本。如果你希望从你的衍生仓库拉取版本,可以使用git pull https://code.aliyun.com/william/repo-fork [branch]
。
通过上面描述的工作流,mxos cube 保持了与原始版本库(最终你会提交一个推送请求)的联系,并且记录了你推送到衍生版本库的版本记录。在原始仓库接受您的衍生仓库生成的推送请求( pull request )之前,所有记录的版本链接对于其他开发者都是无效的。一旦推送请求被接受,您的衍生仓库中的版本就变成了原始版本库的一部分,版本链接也就生效了。
#升级项目和组件
你可以从远程仓库中拉取改动到本地项目和组件。
在升级时,有两种主要的应用场景:
- 升级到 持续更新 版本, 例如一个分支的最新版本。
- 升级到 特定 版本,版本通过提交的哈希值或者标签名称来定义。
每一种场景又两种案例:
- 更新并保留本地的改动 - 污染 升级。
- 更新并删除本地的改动 - 干净 升级。
和其他的mxos cube命令一行,mxos update
命令使用当前目录作为工作交换区,所以在执行 mxos update
之前,应首先将当前的工作目录切换到需要更新的版本库目录。例如,如果你需要更新mxos-os,先使用 cd mxos-os
。
Tip: 同步组件链接: 在触发更新之前,你可能需要同步您之前对项目架构所做的改动,mxos sync
命令可以自动更新必须的组件依赖描述文件,并且删除无效的描述文件。
#防止覆盖本地改动
如果在执行升级时,如果本地的改动会被覆盖, update
命令会直接报错。这是mxos cube的设计初衷,可以防止任何本地未提交的改动被覆盖,从而丢失代码。所以在升级时如果出错,看一下本地的改动(提交改动,或者使用下面的选项),然后重新运行 update
。
#升级到远端版本
升级项目
要将你的项目升级到远程仓库的另一个版本,先进入项目的根目录,然后运行:
$ mxos update [branch|tag|revision]
该命令从远程仓库读取版本,将当前项目升级到指定的分支,标签和版本。如果都没有指定,则升级到当前分支的最新版本。该命令是递归执行的,新版本项目中的所有依赖和子依赖都同步更新。
升级组件
当你将当前工作目录切换到组件的目录下,执行 mxos update
可以升级组件和他的依赖项到另一个版本,而不是父项目中依赖描述文件中指定的版本。这个功能允许你使用非原本项目树中指定的版本来进行实验,而不需要去修改软件项目或是上级组件。
#升级示例
以下示例帮助你理解mxos cube的各种升级选项。
案例 1: 我要升级一个项目或者组件到指定的或当前分支的最新版本
我希望保留本地未提交的改动
运行 mxos update [branch]
。
如果本地有改动则命令会报错,除非你用版本控制工具(Git)将这些改动提交到一个分支 git commit
,或者储藏起来git stash
。
我需要一个干净的升级(丢弃所有本地未提交的改动)
运行 mxos update [branch] --clean
在 mxos update
命令中指定另一个远程分支,仅仅将这个分支check out出来,而不会合并或者fast-forward。你也可以使用 mxos update
命令,不加参数来获得远程仓库中的最新版本并与本地版本进行合并(fast-forward)。“mxos update”和git pull
等价。
Warning: --clean
告诉mxos Cube升级项目或者组件以及他们的依赖项,并且覆盖所有本地的改动。这个操纵无法复原,所以要谨慎执行。
案例 2: 我要升级一个项目或者组件到指定版本或者标签
我希望保留本地未提交的改动
运行 mxos update [branch]
。
如果本地有改动则命令会报错,除非你用版本控制工具(Git)将这些改动提交到一个分支 git commit
,或者储藏起来git stash
。
我需要一个干净的升级(丢弃所有本地未提交的改动)
运行 mxos update <tag_name|revision>--clean
当我有未发布的本地组件
这里有额外的三个选项来处理本地未发布的组件:
mxos update --clean-deps
- 升级当前项目和组件以及他们的依赖项,丢弃所有本地未发布的版本库。所以用这个参数需要谨慎,因为你的本地未发布的版本库是无法恢复的。mxos update --clean-files
- 升级当前项目和组件以及他们的依赖项,丢弃所有未提交的改动,删除所有未跟踪或者忽略的文件。所以用这个参数需要谨慎,因为你的本地未发布的版本库是无法恢复的。mxos update --ignore
- 升级当前项目和组件以及他们的依赖项,丢弃所有未提交的改动并且忽略所有本地未发布的版本库(这些版本库不会被删除或修改,仅仅是忽略了)。
合并升级选项
在以下场景中,升级选项可以合并起来使用:
mxos update --clean --clean-deps --clean-files
- 升级当前项目和组件以及他们的依赖项,丢弃所有本地未发布的版本库,丢弃所有未提交的改动,删除所有未跟踪或者忽略的文件。这个现象丢弃了所有你在本地项目和组件中所做的改动,恢复项目的布局。mxos update --clean --ignore
- 升级当前项目和组件以及他们的依赖项,但是忽略所有的本地未提交的版本库。mxos Cube尽可能地从远端公共仓库获取新的版本。
#MXOS IDE
MXOS 采用 Visual Studio Code 作为其图形化 IDE 集成开发环境,提高代码开发效率并提升调试的体验。
开发者也可以进一步在 VSCode 上添加额外的插件增强功能。VSCode 的功能非常强大,本文仅介绍其基本使用方法。
注意:使用 VSCode 编译调试 MXOS SDK 之前,请先完成安装mxos cube,完成 MXOS 项目的编译和下载。
#安装 Visual Studio Code
请从以下链接中获取您的 PC 系统类型对应的安装包,并根据提示完成安装: Visual Studio Code (opens new window)
#Visual Studio Code使用
- 打开软件
双击图标,打开 Visual Studio Code 软件:
- 导入MXOS项目SDK
打开 Visual Studio Code 软件,选择菜单栏:File-->open,选择:mxos sdk,如demos文件夹,点击 打开 。
- 编译与下载
(1) 选择菜单栏:View,选择:Terminal, 打开命令终端 功能区。
(2) 命令终端中输入 mxos make target 命令,如图:
这些Target的名称是 mxos cube 中的 mxos make
命令中的参数。
(3) 若编译中有错误,将自动报错,双击该报错处可自动跳至改行,进行修改调试。
#其它调试工具与驱动
#1.JTAG调试器使用
JTAG 调试器用于连接 PC 和目标硬件,将 PC 上编译的可执行文件下载到目标硬件上,并且可以对目标硬件进行调试。
PC == <USB线> == 调试器 == <JTAG线> == 目标硬件
注:如果目标硬件上已经包含了一个调试器,就只需要将PC和目标硬件用USB线连接起来即可。
在 MXOS 的开发中,可以使用以下调试器:JLink, STLink, DAPLink。有些调试器需要安装驱动程序(详见下文),此外,在编译应用程序时,应使用参数 JTAG=XXX 选择使用的调试器。
调试器 | 编译参数 |
JLink SWD接口(默认) | JTAG=jlink_swd |
JLink JTAG接口 | JTAG=jlink |
STLink | JTAG=stlink-v2或者stlink-v2-1 |
DAPLink | JTAG=cmsis-dap |
例如,在 MiCOKit-3165 板上外接不同的 JTAG 调试器来下载和调试 helloworld 应用,需首先编译命令如下:
mxos make helloworld@MK3165 download JTAG=jlink_swd 或 mxos make helloworld@MK3165 download JTAG=jlink 或 mxos make helloworld@MK3165 download JTAG=stlink-v2 或 mxos make helloworld@MK3165 download JTAG=stlink-v2-1
#在串口终端上进行调试
运行mxos的设备可以通过串口与主机输出调试信息,处理用户指令。在mxos系统启动时,通常会从串口上打印log信息。
传统串口通讯的硬件连接方式如下:
PC==<串口线>==目标硬件
由于现在的PC上通常不带串行端口,因此通常使用USB/串口转换器将串口的数据转换成USB的数据,并在PC上生成一个虚拟的串口,实现设备和PC的交互。
PC==<USB线>==USB/串口转换器==<串口线>==目标硬件
#FTDI系列
FTDI系列性能较好,点击: 线上购买链接 (opens new window)
FIDI串口转换器驱动程序:FTDI_D2XX Driver (opens new window)。
集成了FTDI系列串口转换器的开发板有:MXKit系列开发板。
#**CP2102串口转换器**
CP2102也是常用的串口转换器,对应的USB/串口转换线也可以买到: 驱动程序下载:CP2102 Driver (opens new window)
#串口调试终端
串口调试终端是在PC上运行的,通过图形化窗口向串口收发数据的软件。其中一些软件支持特定的文件传输协议,如 XModem,YModem等。
#**SecureCRT(建议安装)**
SecureCRT支持在Windows和macOS下运行,不仅支持串口交互,也支持文件传输协议。下载地址 (opens new window)
该软件还支持 “Ymodem 协议” ,可在 mxos 的 bootloader模式下进行固件更新等操作。点击了解Bootloader命令详情
#**格西烽火**
格西烽火 (opens new window)适用于针对 mxos AT 指令的开发与调试。
Tips:同时针对MXCHIP提供的AT指令,提供命令工程模版。
#第三方开发工具及驱动
以下是:基于 MXOS 系统二次开发物联网智能设备时,需要用到的第三方工具及驱动程序。
#串口转换工具 TTL转USB
当使用 mxos 用户串口进行开发调试时,通常需要外接 TTL转USB 模块,与 PC 连接进行调试,这里推荐使用:CP2102 USB Bridge Driver (opens new window)。
安装后,即可通过 PC 端串口调试软件,连接对应的 COM 端口,进行串口通信调试。
#micro usb串口驱动
mxosKit 开发板的 micro-usb 调试串口log信息查看,需要 PC 端安装驱动软件,可至:
FTDI_D2XX Driver (opens new window) 页面,根据您的 PC 系统类型下载。
#Socket 调试工具
mxos 为开发者提供的基本的 TCP、UDP通信服务接口,开发时通常要用到 Socket 通信调试工具,推荐一个soket 调试工具下载链接:TCPUDPDebug102_Setup.exe (opens new window)。
#MQTT 服务测试工具
mxos 设备连接的一些云服务支持 MQTT协议,开发者通常需要搭建一个 MQTT客户端进行测试,这里推荐一个 MQTT客户端测试工具下载链接:MQTT.fx (opens new window)。