LV01-01-AliOSThings-03-源码下载与使用

本文主要是AliOSThings源码下载与使用的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。

点击查看使用工具及版本
Windows版本 windows11
Ubuntu版本 Ubuntu22.04的64位版本
VMware® Workstation 16 Pro 16.2.3 build-19376536
终端软件 MobaXterm(Professional Edition v23.0 Build 5042 (license))
点击查看本文参考资料
分类 网址 说明
官方网站 阿里云 阿里云官网主页
阿里生活物联平台 生活物联网平台(飞燕平台)主页
AliGenie 天猫精灵开放平台AliGenie主页
阿里物联网平台 阿里物联网平台主页
Bluetooth 技术网站 蓝牙协议规范什么的可以来这里找
Telink Telink | Chips for a Smarter IoT (telink-semi.com)
Telink中文官网
开发手册 AliOS Things开发指南 AliOS Things开发指南,这里是最新版本,可以直接从官网找到
AliOS Things开发指南 AliOS Things应用开发指南,这里应该是3.3版本的完整开发文档
AliOS Things开发指南(3.0) AliOS Things应用开发指南,这里应该是3.0版本的完整开发文档
生活物联网平台开发文档 生活物联网平台(飞燕平台)开发文档
《设备端开发指南》
Wi-Fi IoT品类定义与功能开发 天猫精灵IoT开放平台——Wi-Fi IoT品类定义与功能开发
硬件平台 mk3080 WiFi开发板 WiFi开发板使用指南-阿里云开发者社区
esp8266开发板 一个教程:ESP8266-NodeMCU开发板详解-太极创客 (taichi-maker.com)
TLSR8258 Datasheet Datasheet for Telink BLE + IEEE802.15.4 MultiStandard Wireless SoC TLSR8258
参考资料 AliOS Things 3.0 应用开发指南 这个只是一篇参考文章,里面是一些环境搭建相关的,可以参考
IP知识百科 - 华为 (huawei.com) IP的一些相关知识点
点击查看相关文件下载
分类 网址 说明
蓝牙规范相关文档 Core Specification 5.2 核心规格 5.2,该规范定义了创建可互操作的Bluetooth 设备所需的技术。
《Core_v5.2.pdf》
Mesh Model(v1.1) 本Bluetooth 规范定义了模型(以及它们所需的状态和消息),这些模型用于在mesh 网络中的节点上执行基本功能,超出了Bluetooth Mesh 配置文件 规范中定义的基础模型。
本规范包括定义跨设备类型标准功能的通用模型,以及支持关键mesh 场景的模型,如照明控制、传感器、时间和场景。
《MshMDL_v1.1.pdf》
Mesh Profile(v1.0.1) 该Bluetooth 规范定义了基本要求,以实现可互操作的mesh 网络解决方案,用于Bluetooth 低能量无线技术。
《MshPRFv1.0.1.pdf》
Mesh Device Properties 本规范包含Bluetooth Mesh 配置文件 和Bluetooth Mesh 模型规范所要求的设备属性的定义。
但是跟之前的有些区别,我主要看的之前的版本:《MMeshDeviceProperties_v1.2.pdf》
GATT Specification Supplement GATT Specification Supplement | Bluetooth® Technology Website。
好像可以在线看:《GATT Specification Supplement》
Assigned Numbers GATT的一些类型定义可以在这里找。
AliOS Things alios-things/AliOS-Things Gitee上的AliOSThings SDK源码仓库
alibaba/AliOS-Things GitHub上的AliOSThings SDK源码仓库
天猫精灵蓝牙Mesh协议栈 alibaba-archive/genie-bt-mesh-stack GitHub上的天猫精灵蓝牙Mesh协议栈源码仓库。
之前是在alibaba/genie-bt-mesh-stack这个仓库。
写笔记的时候最新提交为faf523618a6a2560090fc423222b9db80984bb7a
蓝牙Mesh设备开发指南 阿里云生活服务平台开发手册——蓝牙设备开发一节中的内容

一、源码下载

1. 在哪找源码?

AliOS-Things的源码在Github的仓库地址为:alibaba/AliOS-Things

1
https://github.com/alibaba/AliOS-Things

在Gitee上的仓库地址为:AliOS-Things: AliOS Things物联网操作系统 (gitee.com)

1
https://gitee.com/alios-things-admin/AliOS-Things

怎么下载?

在源码仓库中这里边都会有大量的分支和版本,我们使用哪一个?我们使用这个3.1.0的这个版本:

image-20230813112104341

可以使用下边的命令下载源码:

1
git clone https://github.com/alibaba/AliOS-Things.git -b rel_3.1.0 AliOS-Things-SDK

执行后,就会将仓库下载到AliOS-Things-SDK目录下,当时下载的时候最新的提交记录为remove bk7231s usb related file. · alibaba/AliOS-Things@b1ea7e6 · GitHub,下载完成后如下图,好像超级大:

image-20231105150440564

然后我们就会得到源码:

image-20231105150505865

这些后面再学习。一开始不知道课程中使用的是哪一次提交下的源码,后来在git项目管理那部分课程中找到了,后面其实使用的是rel_3.1.0分支的3a3bf1628c8457575be3dfb99e3d6ea18448a1bf这一次提交,地址在AliOS-Things: rel_3.1.0分支的3a3bf1628c8457575be3dfb99e3d6ea18448a1bf但是吧,我尝试了一下,还是有报错,所以还是用课程中的吧,以后再折腾。

二、编译AliOS-Things

理论上来讲,通过下边的配置应该是可以编译成功的,但是吧我拉取的是3.1.0版本最新的,不清楚为什么会报错,但是并不影响后边我们创建自己的工程,然后编译,这里先这样写个编译流程,后边再知道原因了再说。

1. 清除编译配置

1
aos make distclean
image-20231105150543366

2. 配置例程

我们之前开发过linux和uboot所以这个环境我是直接装了相关的图形库的,我们直接执行下边的命令打开图形配置界面:

1
aos make menuconfig

然后正常的话,应该会打开一个图形界面,但是以前没做过ubuntu或者linux内核的图形配置的话,可能会报错,就是要装一个图形库,搜一下就可以了,这里就不再写了:

image-20231105150715066

然后我们来配置一下要编译的例子,我们配置例程为helloworld_demo:

image-20231105150843862

我们要先配置这个Select App为Builtin Examples :

1
2
3
Application Configuration  --->
Select App (Null) --->
(X) Builtin Examples

然后按Esc回到上一级的目录,我们这样选:

1
2
3
4
5
Application Configuration  --->
Select App (Builtin Examples) --->
Builtin Examples
Select example (Helloworld Demo) --->
Helloworld Demo (NEW)

我们选择这个Helloworld Demo即可,然后我们通过tab键将选项切换到save,然后保存配置,最后退出配置界面即可。

3. 配置目标板

然后我们需要配置目标板为Linuxhost:

image-20231105151035807
1
2
BSP         Configuration  ---> 
Board Selection (AABOARD_DEMO) --->

4. 编译SDK

然后我们在SDK目录下执行以下命令:

1
aos make

然后可能会报下边的错误:

image-20231105152108404

这是因为缺少了一个库,大概看一下会了解到,编译过程中会用到一些32位的相关库,但是我们用的linux系统是64位,可能就有些问题,所以我们执行以下命令安装缺少的库:

1
sudo apt-get install g++-multilib

安装完毕后重新编译即可。理论上来说应该是可以编译通过的,但是吧,报错了,由于还未学习,不是很懂,先放着,后边熟悉了再来解决(但是后边貌似发现了新的问题,就比如mk3080工程在编译的时候,一个脚本内有大量的合并冲突未解决,自己也学的不熟,就直接换掉了新的SDK,使用了课程中的),这里知道编译流程就行了。

image-20231105151433295

后来发现这里其实应该是有些组件重复了,它并不影响我们创建自己的工程然后进行编译开发。

三、创建工程

1. aos-cube工具

1.1 aos-cube概述

AliOS Things uCube是AliOS Things基于命令行的开发管理工具(命令简写为aos),主要功能包括:工程配置与编译、Image下载调试、应用开发框架、脚手架、组件安装管理、设备管理、代码审查、OTA工具功能以及与IDE集成功能。uCube 基于 Python(支持Py 2.7和3)语言开发,需要有Python开发环境。如开发环境中尚未安装aos-cube,需要通过pip install -U aos-cube进行安装(需确保先安装了python和pip工具)。

1585044151868-9ce9c3f5-9c72-4d57-bda6-842f23434987

1.2 构建和编译

什么是构建?构建就是创建一个自己的独立的工程源码文件。怎么理解编译?编译就是有了源码之后,需要生成可执行程序,最终在目标主机运行。

为什么要构建自己的工程源码文件?想象一下,在实际的工程开发过程中,我们可以在SDK源码内部进行开发,但是这是不是就很危险,因为我们直接改动了SDK源码目录下的文件,一旦出现什么问题,我们是很难处理和定位的,比如误删了SDK文件?这个时候我们的开发若是能独立于SDK,那我们随便修改自己的源码文件,而不会影响SDK的源码,这样就可以尽可能避免一些代码管理的问题。

image-20231105171535676

于是我们不能再SDK内部进行增删改,需要单独管理自己的项目源代码,只有在编译的时候才使用SDK的源码文件,这样就能保证在开发大型项目的时候,不会出现代码管理的问题。

1.3 工程创建命令

接下来我们来看一下如何创建自己的工程目录,我们可以使用以下命令:

1
2
3
4
5
6
7
8
9
10
11
hk@vm:~/AliOS-Things-SDK$ aos create project -h
Usage: aos create project [OPTIONS] [PROJECTNAME]

Create new project from template

Options:
-b, --board TEXT Board for creating project [required]
-d, --projectdir TEXT The project directory
-t, --templateapp TEXT Template application for creating project
-h, --help Show this message and exit.

该命令会在非AliOS Things仓库目录下运行,创建工作区,并下载指定的solution作为模板解决方案,进行二次开发。OPTION 选项含义如下:

  • -b 选项,指定开发板名称,也就是最终程序要运行在那一个板子上,如mk3080、linuxhost、esp8266。我们怎么知道现有的SDK源码支持哪些开发板?支持的开发板都在SDK源码目录的platform/board目录中。

  • -d 选项,指定工作区workspace目录,也就是我们自己的工程源码目录。

  • -t 选项,指定已有的解决方案名称,也就是demo名称,如http_demo。如果未设置,默认为helloworld_demo,注意这里使用的demo必须是SDK源码目录下application/example目录中存在的demo名称,否则就会报错。

一般工程创建命令格式如下:

1
aos create project -b 目标板名称 -t 模板名称  -d 我们自己的工作目录  我们自己的目录名

2. 创建工程

上边学习了aos create project命令,我们接下来创建一个运行在linuxhost主机中的工程源码,我们先看一下SDK源码目录本来可以支持哪些目标板:

1
2
cd ~/AliOS-Things-SDK
ls platform/board
image-20231105173043983

再来看一下支持哪些demo的创建:

1
2
cd ~/AliOS-Things-SDK
ls application/example
image-20231105173202561

所以我们最后创建自己的工程的命令为:

1
2
mkdir ~/6AliOS
aos create project -b linuxhost -t helloworld_demo -d ~/6AliOS helloworld_linuxhost

然后就会出现以下打印信息:

image-20231105173844862

这个时候我们进入/home/hk/6AliOS/helloworld_linuxhost目录中看一下

1
cd /home/hk/6AliOS/helloworld_linuxhost

会看到有如下文件:

image-20231105174007394

3. 配置环境变量

我们可以添加AOS_SDK_PATH系统环境变量,指向我们使用的AliOS-Things源码路径,然后aos-cube软件就会根据AOS_SDK_PATH环境变量来定位AliOS-Things源码。这样后边我们创建工程完,就可以正常进行编译,工程的编译会依赖于源码,这样不会出现找不到源码的情况:

image-20231105174152956

怎么添加环境变量?首先我们确定我们的AliOS-Things源码路径:

1
2
3
4
hk@vm:~$ cd ~/AliOS-Things-SDK/

hk@vm:~/AliOS-Things-SDK$ pwd
/home/hk/AliOS-Things-SDK

然后我们打开当前用户环境变量配置文件:

1
vim ~/.bashrc

在最后一行添加以下内容:

1
export AOS_SDK_PATH=/home/hk/AliOS-Things-SDK

然后保存退出,刷新一下当前环境变量,使其可以生效:

1
source ~/.bashrc

最后我们确认一下这个环境变量是否生效:

1
echo $AOS_SDK_PATH
image-20231105153020241

这样就表示环境变量已经生效。

4. 编译工程

上边已经创建好了工程,也配置了环境变量,我们接下来编译一下我们创建的demo:

1
aos make

然后就会开始编译程序:

image-20231105174420304

不出意外,编译完成会有如下提示:

image-20231105174507023

5. 运行程序

上边我们已经编译完了,成果物在哪?我们找到工程目录的out/helloworld_linuxhost@linuxhost/binary目录:

1
cd ~/6AliOS/helloworld_linuxhost/out/helloworld_linuxhost@linuxhost/binary

然后就会看到很多格式为文件:

image-20231105174731103

后边我们再详细学习,由于我们编译的是跑在linux主机上的程序,所以我们可以直接运行,我们执行这个elf文件,则会有以下打印信息:

image-20231105174848370

这就说明我们自己创建的工程已经编译成功,可以正常在linux主机上运行啦。