當前位置:
首頁 > 最新 > Alios-Things入坑記之rtl8710bn初體驗

Alios-Things入坑記之rtl8710bn初體驗

Alios-Things入坑記之rtl8710bn初體驗

一、概述

Alios-Things是一款由阿里巴巴開發的面向IoT領域的輕量級物聯網嵌入式操作系統,致力於搭建雲端一體化IoT基礎設備。具備極致性能,極簡開發、雲端一體、豐富組件、安全防護等關鍵能力,並支持中斷設備連接到阿里Link,可廣泛應用在智能家居、智慧城市、新出行等領域。

Alios-Things源碼目前託管在github上,地址為:https://github.com/alibaba/AliOS-Things,當前最新正式版為1.3.1,處於快速更新迭代中。

架構描述:

Alios-Things的架構可以適用於分層架構和組件化架構。從底部到頂部,Alios-Things包括:

l板級支持包(BSP):主要由Soc供應商開發和維護

l硬體抽象層(HAL):比如WiFi和Uart

l內核:包括Rhino實時操作系統內核、Yloop、VFS、KV存儲

l協議棧:包括TCP/IP協議棧(LwIP),uMesh網路協議棧

l安全:安全傳輸層協議(TLS)、可信服務框架(TFS)、可信運行環境(TEE)

lAOS API:提供可供應用軟體和中間件使用的API

l中間件:包括常見的物聯網組件和阿里巴巴增值服務中間件

l示例應用:阿里自主開發的示例代碼,以及通過了完備測試的應用程序(比如Alinkapp)

所有的模組都已經被組織成組件,且每個組件都有自己的.mk文件,用於描述它和其他組件間的依賴關係,方便應用開發者按需選用。

結構框圖:

文件夾結構:


編譯環境搭建

Alios-Things提供了基於Visual Studio Code插件的AliOS Studio集成開發環境(IDE),可提供編輯、編譯、調試等功能,不過我是在Linux下(Ubuntu16.04 64bit)開發。在Ubuntu上開發需要先搭建開發環境。

1.依賴軟體包安裝,在命令行下輸入:

sudo apt-get install -y python gcc-multilib libssl-dev libssl-dev:i386 libncurses5-dev libncurses5-dev:i386 libreadline-dev libreadline-dev:i386 python-pip minicom

2.安裝aos-cube,用python包管理器pip安裝aos-cube和相關依賴包

pip install setuptools wheel aos-cube

請確認pip環境是基於python 2.7的,如果遇到許可權問題,可能需要sudo來執行

3.下載源碼

git clonehttps://github.com/alibaba/AliOS-Things.git

Alios Things倉庫比較大,下載需要一些時間。

編譯

下載完成後,在命令行下,進入Alios-Things根目錄,執行編譯命令aos make。編譯採用的是example@board的模式,如example為example目錄下對應的應用helloworld,board則為對應的運行平台linuxhost。aos與aos make命令詳細指令如下:

laos

usage: aos [-h] [--version] ...

Code management tool for aos - https://code.aliyun.com/aos/aos

version 0.2.42

Use "aos -h|--help" for detailed help.

Online manual and guide available at https://code.aliyun.com/aos/aos-cube

optional arguments:

-h, --help show this help message and exit

--version print version number and exit

Commands:

new Create new aos program or component

ls List cube info, default components info

import Import program from URL

add Add component from AOS_SDK_PATH or URL

rm Remove component

deploy Find and add missing components and source codes

codes Import the optional component from the remote repository

publish Publish program or component

update Update to branch, tag, revision or latest

sync Synchronize aos component references

status Show version control status

make Make aos program/component

scons Make aos program/component by scons

makelib Compile static library

config Tool configuration

upload Upload aos image

monitor Serial port monitor

upgrade Upgrade aos-cube to latest

help This help screen

laos make

Usage: make [download] [run | debug] [JTAG=xxx] [total] [VERBOSE=1] [BINS=app/framework/kernel]

make run

One each of the following mandatory [and optional] components separated by "@"

* Application (apps in example)

* Board (cy8ckit-149 mk1101 gd32f4xx mk3080 mk3060 mk3239 stm32f429zi-nucleo xr871evb r5f565ne frdmkl27z stm32f769i-discovery lpcxpresso54102 rda8955 linuxhost uno-91h r5f100lea stm32l496g-discovery starterkit mk3165 atsame54-xpro eml3047 developerkit stm32l432kc-nucleo pca10056 esp32devkitc bk7231devkitc mk3166 esp8266 stm32l073rz-nucleo b_l475e rk1108 cb2201 amebaz_dev pca10040 bk7231udevkitc stm32l476rg-nucleo stm32l433rc-nucleo dh5021a_evb cy8ckit-062)

* [debug | release] Building for debug or release configurations

[download]

Download firmware image to target platform

[run]

Reset and run an application on the target hardware

[total]

Build all targets related to this application and board

[JTAG=xxx]

JTAG interface configuration file from the tools/OpenOCD dirctory

Default option is jlink_swd

[VERBOSE=1]

Shows the commands as they are being executed

[BINS=app/framework/kernel]

Build bins: app or framework or kernel

Notes

* Component names are case sensitive

* "rhino" and "debug" are reserved component names

* Component names MUST NOT include space or "@" characters

* Building for debug is assumed unless "@release" is appended to the target

Example Usage

Build for Debug

make helloworld@mk3060

Build, Download and Run using the default USB-JTAG programming interface

make helloworld@mk3060 download run

Build for Release

make helloworld@mk3060@release

Reset and run an application on the target hardware

make run

Clean output directory

make clean. Stop.

執行aos make helloworld@linuxhost,目標文件在根目錄out目錄下對應目錄下out/helloworld@linuxhost/binary。

運行


netmgrapp編譯

rtl8710bn是realtek最新推出的Cortex-M4F內核SOC WiFi,主頻125MHz,512KB ROM,RAM:256KB,支持128MBFlash,RSIP/RDP固件保護。2xUart/SPI Master/SPI Slave,2xI2C,I2S,RTC,6PWM,12bit ADC等眾多外設。

rtl8710bn在Alios-Things對應board名為amebaz_dev,example這次我們選擇的是netmgrapp,該example支持WiFi連接操作。

在命令行輸入netmgrapp@amebaz_dev開始編譯,aos將檢測交叉編譯器,如linux環境變數未發現對應的交叉編譯器,aos將自動下載對應的交叉編譯器。將rtl8710bn交叉編譯器gcc-arm-none-eabi下載至build/compiler/gcc-arm-none-eabi/Linux64目錄。交叉編譯器下載完成後,開始編譯:

vcall init auto_component

kernel_version:AOS-R-1.3.1

app_version:app-1.0.0-20180615.0148

app_version:app-1.0.0-20180615.0148

kernel_version:AOS-R-1.3.1

Build AOS Now

TOOLCHAIN_PATH=/home/share/samba/application/AliOS-Things/build/compiler/gcc-arm-none-eabi/Linux64/bin/

Compiling alicrypto

Compiling board_amebaz_dev

Compiling auto_component

Compiling cli

Compiling digest_algorithm

Compiling framework

Compiling hal

Compiling kernel_init

Compiling vfs_device

Compiling newlib_stub

Compiling log

Compiling kv

Compiling netmgr

Compiling netmgrapp

Compiling armv7m

Compiling rtl8710bn

Compiling rtl8710bn_Peripheral_Drivers

Compiling rtl8710bn_SDK

Compiling net

Compiling rhino

Compiling vcall

Compiling vfs

Compiling yloop

Making out/netmgrapp@amebaz_dev/libraries/alicrypto.a

Making out/netmgrapp@amebaz_dev/libraries/board_amebaz_dev.a

Making out/netmgrapp@amebaz_dev/libraries/auto_component.a

Making out/netmgrapp@amebaz_dev/libraries/cli.a

Making out/netmgrapp@amebaz_dev/libraries/digest_algorithm.a

Making out/netmgrapp@amebaz_dev/libraries/framework.a

Making out/netmgrapp@amebaz_dev/libraries/hal.a

Making out/netmgrapp@amebaz_dev/libraries/kernel_init.a

Making out/netmgrapp@amebaz_dev/libraries/vfs_device.a

Making out/netmgrapp@amebaz_dev/libraries/newlib_stub.a

Making out/netmgrapp@amebaz_dev/libraries/log.a

Making out/netmgrapp@amebaz_dev/libraries/kv.a

Making out/netmgrapp@amebaz_dev/libraries/netmgr.a

Making out/netmgrapp@amebaz_dev/libraries/netmgrapp.a

Making out/netmgrapp@amebaz_dev/libraries/armv7m.a

Making out/netmgrapp@amebaz_dev/libraries/rtl8710bn.a

Making out/netmgrapp@amebaz_dev/libraries/rtl8710bn_Peripheral_Drivers.a

Making out/netmgrapp@amebaz_dev/libraries/rtl8710bn_SDK.a

Making out/netmgrapp@amebaz_dev/libraries/net.a

Making out/netmgrapp@amebaz_dev/libraries/rhino.a

Making out/netmgrapp@amebaz_dev/libraries/vfs.a

Making out/netmgrapp@amebaz_dev/libraries/yloop.a

Making out/netmgrapp@amebaz_dev/libraries/vcall.a

Making netmgrapp@amebaz_dev.elf

Making netmgrapp@amebaz_dev.xip2.elf

Making netmgrapp@amebaz_dev.hex

Making netmgrapp@amebaz_dev.bin

Can"t parse memory configure, memory info get fail!

Making netmgrapp@amebaz_dev.xip2.bin

Linux64 /home/share/samba/application/AliOS-Things netmgrapp amebaz_dev /home/share/samba/application/AliOS-Things/build/compiler/gcc-arm-none-eabi/Linux64/bin/

Generate Standard Flash Images: out/netmgrapp@amebaz_dev/binary/netmgrapp@amebaz_dev.all.bin

Build complete

Making .gdbinit

由上可見,默認編譯顯示編譯信息較精簡,可通過執行aos make VERBOSE=1 netmgrapp@amebaz_dev來查看詳細的編譯過程。

編譯完成後,我們可以在out/netmgrapp@amebaz_dev/binary/

其中:

boot_all.bin是amebaz的Boot

image2_all_ota1.bin是amebaz的OTA1區固件;image2_all_ota2.bin是amebaz的OTA2區固件

netmgrapp@amebaz_dev.all.bin是以上3個固件的合併固件。

其中boot只需要下載1次,不需要每次都下載。調試代碼時可只下ota1,可節省下載時間。

運行

重新上電後,可通過串口看到正常啟動log。

#為Alios-Things命令行cli提示符,在命令行下輸入:help查詢當前支持的cli命令

rtl8710bn網路連接

netmgr為Alios-Things下的WiFi網路管理組件,支持start/clear/connect等功能。使用netmgr connect 360usbwifi 1234567890,連接路由器,ssid為360usbwifi,密碼為1234567890。可看到連接成功log。


laos:aos初始化及啟動

larch:晶元相關.h及lwip配置文件

lbin:boot_all.bin文件

lhal:hal適配文件

llib:庫文件

lperipherals:外設驅動庫

lscript:編譯鏈接腳本

lsdk:晶元SDK

ltools:bin文件合成工具

入口

rtl8710bn應用入口在platform->mcu->rtl8710bn->aos目錄下,其中main()位於aos.c中。

void main(void)

{

aos_init();

krhino_task_dyn_create(&g_aos_init, "aos-init", 0, AOS_DEFAULT_APP_PRI , 0, AOS_START_STACK, (task_entry_t)sys_init_func, 1);

SysTick_Config(SystemCoreClock/RHINO_CONFIG_TICKS_PER_SECOND);

aos_start();

return;

}

運行流程

1.調用aos_init()->krhino_init()完成krhion初始化。

2.在sys_init_func任務內完成hal初始化及啟動、wlan初始化及啟動、aos_kernel_init()完成各種組件初始化,並調用application()函數,完成netmgrapp初始化及啟動。

3.初始化systick定時器

4.調用aos_start(),啟動Alios-Things


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 燕十三的物聯網之旅 的精彩文章:

TAG:燕十三的物聯網之旅 |