最近,在Apache软件基金会(ASF, Apache Software Foundation)发起了一个开源的社区项目Mynewt,其最新的稳定版本1.0.0-b1刚刚发布。Mynewt是一个专注于物联网(IoT,Internet of Things)应用的实时操作系统,包括低功耗蓝牙(BLE4.2)无线传输协议栈NimBLE。
Mynewt支持丰富的实时操作系统特征,可以在不同的硬件平台上运行,包括ARM Cortex M0-M4微控制器,以及基于MIPS和RISC-V架构的处理器。有许多现有的微控制器开发板可以直接运行Mynewt,使得在其上进一步开发应用程序就非常容易。其完整的特性介绍和支持的开发板列表可以在Mynewt的网页上找到。
对于物联网应用的开发人员来说,使用Mynewt可以得到两个方面显而易见的好处。首先,应用开发变得很简单,那些复杂的和底层硬件打交道的工作都交给了实时操作系统。应用Mynewt的硬件抽象层(HAL, Hardware Abstraction Layer),开发板支持包(BSP, Board Support Packages),以及Mynewt操作系统的任务调度和管理系统,开发人员不需要像传统的嵌入式应用的开发那样去照顾应用程序的方方面面。特别是对于那些需要多个不同优先级任务的复杂应用程序,就可以很方便的进行开发。其次,应用开发变得很自由。由于是开放源代码系统,应用开发人员可以根据需要自由裁剪整个操作系统包括无线通信协议栈。这对于硬件资源有限的物联网应用来说非常重要,那些不需要的模块就可以在应用程序的编译中不包括,从而节省了宝贵的系统资源。
下面以Nordic的nRF52832开发板PCA10040为例来介绍如何开始使用Mynewt实时操作系统,并且如何在PCA10040上运行其开源的蓝牙低功耗协议栈NimBLE。NimBLE协议栈遵从于BLE 4.2标准,支持BLE 4.2的新特征如长数据包传输等。Mynewt使用入门介绍包括三个方面的内容:
本节内容介绍开发环境的设置,包括硬件和软件方面的设置。
一台笔记本电脑,一个nRF52832开发板PCA10040,以及连接电脑和PCA0040开发板的USB连接线,这就是需要的全部硬件。下面以苹果电脑的macOS系统为例介绍软件开发环境的设置,Linux系统类似。
按照如下步骤安装好newt工具:
1.安装macOS的套件管理器Homebrew。如果macOS系统没有安装好Homebrew,打开一个命令行终端控制台,使用如下命令进行安装。安装提示需要用户密码时,输入sudo密码
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install\
/master/install)"
例如,在命令行终端的安装输出结果如下
==> This script will install:
/usr/local/bin/brew
/usr/local/share/doc/homebrew
/usr/local/share/man/man1/brew.1
/usr/local/share/zsh/site-functions/_brew
/usr/local/etc/bash_completion.d/brew
/usr/local/Homebrew
Press RETURN to continue or any other key to abort
==> /usr/bin/sudo /bin/mkdir -p /Library/Caches/Homebrew
Password:
==> /usr/bin/sudo /bin/chmod g+rwx /Library/Caches/Homebrew
==> /usr/bin/sudo /usr/sbin/chown jiachengwang /Library/Caches/Homebrew
==> Downloading and installing Homebrew...
remote: Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
HEAD is now at b6f3399 Merge pull request #1930 from vitorgalvao
/set-permissions-sudo
==> Cleaning up /Library/Caches/Homebrew...
==> Migrating /Library/Caches/Homebrew to
/Users/jiachengwang/Library/Caches/Homebrew...
==> Deleting /Library/Caches/Homebrew...
Already up-to-date.
==> Installation successful!
==> Homebrew has enabled anonymous aggregate user behaviour analytics.
Read the analytics documentation (and how to opt-out) here:
https://git.io/brew-analytics
==> Next steps:
- Run `brew help` to get started
- Further documentation:
https://git.io/brew-docs
当然,也可以用其它的方式进行安装,例如直接提取Homebrew的安装包(或者git clone),并拷贝到/usr/local目录。
2.安装Go编程语言。Go语言需要专门的目录作为其工作空间,其中包含有三个目录src,pkg 和bin。从其名字就可以知道,src目录是Go的源代码目录,在其中的一个子目录就是一个源代码包,pkg目录是源代码包相应的目标文件,bin目录中包含一些可执行的命令文件。环境变量GOPATH决定了工作目录,因此需要设置好GOPATH环境变量。为此,创建一个dev目录并在其中进一步创建go目录,并把GOPATH环境变量设置为这个目录。这样,就可以把newt工具的repo克隆到本地的这个目录。
$ cd $HOME
$ mkdir -p dev/go
$ cd dev/go
$ export GOPATH=`pwd`
可以把环境变量GOPATH的设置加入到~/.bash_profile 文件中,这样就可以在以后启动一个新的命令行终端控制台时,自动应用环境变量GOPATH。
$ vi ~/.bash_profile
...
export GOPATH=~/dev/go
...
$ source ~/.bash_profile
现在,就可以应用brew安装Go了。安装好后,Go就为开发者提供了一个开发环境,编译Go代码,构建Go包,从github上载入Go代码。接下来,就可以应用Go命令把newt的repo载入到本地的Go开发环境中
$ brew install go
==> Downloading https://homebrew.bintray.com/bottles/go-1.7.5.sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring go-1.7.5.sierra.bottle.tar.gz
==> Caveats
As of go 1.2, a valid GOPATH is required to use the `go get` command:
https://golang.org/doc/code.html#GOPATH
You may wish to add the GOROOT-based install location to your PATH:
export PATH=$PATH:/usr/local/opt/go/libexec/bin
==> Summary
/usr/local/Cellar/go/1.7.5: 6,440 files, 250.8M
当然,也可以直接从https://golang.org/dl/下载Go的安装包,并安装在/usr/local目录
3.创建本地的repo。应用Go命令把newt拷贝到本地,请耐心等待,需要花费几分钟。在等待过程中,可以检查安装的目录以确认安装在进行