4_1_AliOS Things 操作系统网络篇之 netmgr|学习笔记

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习4_1_AliOS Things 操作系统网络篇之 netmgr。

开发者学堂课程【HaaS 物联网应用开发课程4_1_AliOS Things 操作系统网络篇之 netmgr】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/801/detail/13835


4_1_AliOS Things 操作系统网络篇之 netmgr

 

内容介绍:

一、Netmgr 基本介绍

二、Netmgr 使用方法

三、Netmgr 分析手段

 

一、Netmgr 基本介绍

1. Netmgr 简介

image.png

网络连接能力是万物互联的最重要的基础能力之一。AliOS Things 从诞生演进到今天,网络相关有两个模块至关重要,一个是提供配网连接能力的 Netmgr 模块,另一个是提供数据通信能力的 LwIP 模块。其中 Netmgr 是负责控制链路,LwIP 是负责数据链路。

本次主要介绍 Netmgr 模块,接入 Wi-Fi 网络,是大部分 loT 设备联网的第一步。接入 Wi-Fi 一般需要经历配网和连网两个阶段。 Netmgr 模块将Wi-Fi驱动的连网能力抽象提取出来,方便 loT 设备快速入网连云。Netmgr是一个网络管理模块,提供了网络相关的 API 以及命令,方便进行网络管理。

2. Netmgr 架构图

Netmgr 将 Wi-Fi 具体的操作进行统一封装,对应用层提供接口,方便的对 Wi-Fi 网络进行管理。如下是 Netgmr 在主要架构。

image.png

中间包含很多模块,提供将APP对于网络的需求最后对应到底层 Wi-Fi 驱动的控制。其中白色部分可重点关注 WiFi,初始化的 WiFi init,WiFi Enable,WiFi Connect,DHCP,SNTP 模块。Trigger Event Cb 关于回调,可参见之后详细介绍。


二、Netmgr 使用方法

1. Netmgr 命令介绍

支持使用命令的方式对 Wi-Fi 连网相关的操作,如,对存储的连接信息的读/写删除,打印当前网络内的所有AP的信息,连接 AP,断开 AP 的连接,查询网络状态等。

命令行

说明

netmgr -t wifi -i

初始化

netmgr -t wifi -a [0/1]

设置是否自动重连0,不自动重连;1,自动重连。

netmgr -t wifi -b [0/1]

是否保存历史连接记录。0,不保存历史连接记录。1,保存历史连接记录。

netmgr -t wifi -c [ssid][password]

使用 ssid password 连网

netmgr -t wifi -e

断开Wi-Fi连接

netmgr -t wifi -w [wifi_config]

写Wi-Fi配置文件。wifi_config 格式,如,network={\\nssid=\ "aos\"\\npassword=\"123456\"\\nchannel=\"0\"\\n}\\n

netmgr -t wifi -r

读Wi-Fi配置文件

netmgr -t wifi -d

删除Wi-Fi配置文件

netmgr -t wifi -p

打印当前网络状态

netmgr -t wifi -s

打印当前网络上的AP的信息

其中 netmgr -t wifi -inetmgr -t wifi -c [ssid][password]使用最多,netmgr -t wifi -c [ssid][password] 后期会大量使用,需要明确其参数和作用。

 SSID  "aos",密码是 "123456"的 AP:netmgr -t wifi -i

netmgr -t wifi -c aos 123456

2. Netmgr API 介绍

Netmgr 提供了一组 API 支持方便用户快速接入 AP。并且能在代码前面灵活控制网络连接。

API

作用

参数

int netmgr_init(void);

初始化 netmgr模块

-

void netmgr_deinit(void);

反初始化 netmgr

-

int netmgr_start(bool autoconfig);

启动 netmgr

Autoconfig:是否自动连接网络

int32_t netmgr_connect(const char *ssid, const uint8_t*password, uint32_t timeout);

连接网络

Ssid : wifi的ssid

Password : wifi的密码

Timeout :连接超时时间,单位ms

void netmgr_stats(int32_t interface, netmgr_stats_t *stats);

获取网络统计信息,主要是IP地址

Interface : 网卡名字,如INTERFACE_WIFI

Stats :网卡统计信息

注意:

netmgr_start 函数当参数 autoconfig  true 时,使能自动连接 Wi-Fi 功能。如果设备有过成功连接 AP 的记录,会自动去连成功链接过的 AP 记录里的 SSID  Password。如果设备没有成功连接 AP 的记录,就不会自动去发起连网动作。当参数 autoconfig  false 时,关闭自动连接 AP 的功能,也不会去连 AP。

3. Netmgr 编译使用

Config.in 里增加︰"select AOS_COMP_NETMGR if !AOS_CREATE_PROJECT”比如如下 demo 中需要 netmgr 组件,就添加该行

config AOS_APP_HELLOWORLD_DEMO

bool "Helloworld Demo"

select AOS_COMP_OSAL_AOS if !A0S_CREATE PROJECT

select A0S_COMP_NETMGR if !A0S CREATE PROJECT

这里使用 select 之后,当编译实验 project 的时候就会自动编译

netmgr 组件,如下图所示,在执行 aosmake 的时候能够看到 

netmgr。具体编译方式 Config.in 其他修改可以参考编译环境章节。

image.png

4. Netmgr 使用介绍

#include "netmgr.h"

#include "aos/yloop. h"

static void wifi_service_event(input_event_t *event,void *priv_data)

{

if ( event->type != EV_WIFI){

return;

}

if ( event->code != CODE_WIFI_ON_GOT_IP){

return;

}

// add application start logic here

}

void start_netmgr( void) {

netmgr_init( );

aos_register_event_filter(EV_WIFI,wifi_service_event,NULL);netmgr_start(false) ;

netmgr_connect( "Test_wiFi",“123456”,10 * 1000);

}

使用检索提到的几个重要接口,有 netmgr_initnetmgr_start 指定 true 或 false,false 指进来后不会进行自动重连,如果需要进行自动重连,则设置为 true,还有进行网络连接的自动指令,即  netmgr_connect,其中第一部分为WiFi名字,第二部分为WiFi密码,第三部分为指定连接的超时时间,单位为毫秒,如果超时则自动退出自动连接的流程。

注册了一个 wifi_service_event 事件来监听事件,当收到 type 

EV_WIFl,code  CODE_WIFI_ON_GOT_IP,表示成功获取到了IP地址。

 

三、Netmgr 分析手段

1.Netmgr 关键事件介绍

Netmgr 关键事件主要主要产生于 Wi-Fi 的连接过程,具体包括∶

关键事件

说明

CODE_WIFI_CMD_RECONNECT

重连事件

cODE_WIFI_ON_CONNECTED

连接完成事件

CODE_WIFI_ON_DISCONNECT

断开连接事件

CODE_WIFI_ON_GOT_IP

获取到IP地址事件

这四个事件分别对应到 Netmgr 在控制网络连接过程中的多个事件,这些事件会对分析和调试有重要帮助,能清楚地知道当前处于哪一个阶段。

关键事件是在 Netmgr 初始化时调用 aos_register_event_filter(EV_WIFI, netmgr_events_executor,NULL);注册了关注重要事件。

如果有兴趣查看 Netmgr 内部事件流程,可以参考代码︰

components/network/netmgr/src/netmgr_wifi.c 中的

netmgr_events_executor 函数。

2.Netmgr 关键日志分析

Netmgr 关键日志主要是为了方便根据串口日志识别当前设备的网络状态,具体包括:

关键日志

说明

NETMGR_CONN conn_connecting

表示Wi-Fi连接中

NETMGR_CONN conn_connected

表示Wi-Fi连接成功

NETMGR_CONN conn_obtaining_ip

表示正在获取IP地址

wifi_dhcp_start:1763 start dhcp

表示启动 DHCP client 访问IP

netmgr_ip_got_event

表示获取到IP地址事件

start sntp task.

表示启动了 sntp 服务器

[sntp] OK: sec 739241320 usec 1612343811

表示 sntp 成功获取到时间

举例:

在串口日志中看到如下信息,就表示 sntp 已经成功获取到网络时间。比如可以根据此时判断 Wi-Fi 已经连接成功,并且设备能够访问广域网数据。

image.png

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
Ubuntu 网络安全 图形学
Ubuntu学习笔记(二):ubuntu20.04解决右上角网络图标激活失败或者消失,无法连接有线问题。
在Ubuntu 20.04系统中解决网络图标消失和无法连接有线网络问题的方法,其中第三种方法通过检查并确保Windows防火墙中相关服务开启后成功恢复了网络连接。
782 0
Ubuntu学习笔记(二):ubuntu20.04解决右上角网络图标激活失败或者消失,无法连接有线问题。
|
1月前
|
安全 Linux 网络安全
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息。本文分三部分介绍 nmap:基本原理、使用方法及技巧、实际应用及案例分析。通过学习 nmap,您可以更好地了解网络拓扑和安全状况,提升网络安全管理和渗透测试能力。
132 5
|
6月前
|
存储 算法 网络虚拟化
【计算机网络】学习笔记,第三篇:数据链路层
现在的光纤宽带接入 FTTx 都要使用 PPPoE 的方式进行接入。在 PPPoE 弹出的窗口中键入在网络运营商购买的用户名和密码,就可以进行宽带上网了 利用 ADSL 进行宽带上网时,从用户个人电脑到家中的 ADSL 调制解调器之间,也是使用 RJ-45 和 5 类线(即以太网使用的网线)进行连接的,并且也是使用 PPPoE 弹出的窗口进行拨号连接的
90 5
|
2月前
|
机器学习/深度学习 数据可视化 Linux
Seaborn可视化学习笔记(一):可视化神经网络权重分布情况
这篇文章是关于如何使用Seaborn库来可视化神经网络权重分布的教程,包括函数信息、测试代码和实际应用示例。
64 0
|
4月前
|
算法 安全 网络安全
探索操作系统核心:进程调度的奥秘网络安全的盾牌与剑——漏洞防御与加密技术
【8月更文挑战第30天】在数字世界的每一次点击和命令背后,都隐藏着一个不为人知的英雄——进程调度器。它默默无闻地在后台工作,确保我们的命令得以流畅执行。本文将揭开这位幕后英雄的面纱,带你了解进程调度的原理、重要性以及它是如何在操作系统中发挥作用的。无论你是编程新手还是资深开发者,理解进程调度都能帮你更好地掌握计算机的运作原理。准备好深入操作系统的核心,一探究竟了吗?让我们开始吧!
|
4月前
|
缓存 网络协议 算法
这些年背过的面试题——网络和操作系统基础篇
本文是技术人面试系列网络和操作系统基础篇,面试中关于网络和操作系统基础都需要了解哪些内容?一文带你详细了解,欢迎收藏!
|
4月前
|
机器学习/深度学习 自然语言处理 并行计算
【深度学习+面经】Transformer 网络学习笔记
Transformer模型的核心概念、优缺点以及在多个领域的应用,并提供了针对Transformer架构的面试问题及答案。
195 2
|
4月前
|
机器学习/深度学习 网络安全 TensorFlow
探索操作系统的心脏:内核与用户空间的奥秘云计算与网络安全:技术挑战与未来趋势深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【8月更文挑战第29天】在数字世界的每一次点击与滑动背后,都隐藏着一个不为人知的故事。这个故事关于操作系统——计算机的灵魂,它如何协调硬件与软件,管理资源,并确保一切运行得井井有条。本文将带你走进操作系统的核心,揭示内核与用户空间的秘密,展现它们如何共同编织出我们日常数字生活的底层结构。通过深入浅出的讲解和代码示例,我们将一同解锁操作系统的神秘面纱,理解其对现代计算的重要性。 【8月更文挑战第29天】本文将深入探讨卷积神经网络(CNN)的基本原理和结构,以及它们如何被广泛应用于图像识别任务中。我们将通过代码示例来展示如何使用Python和TensorFlow库构建一个简单的CNN模型,并训练
|
4月前
|
安全 网络安全 调度
云计算与网络安全:云服务、网络安全、信息安全等技术领域深入理解操作系统:进程调度的奥秘
【8月更文挑战第27天】本文将探讨云计算与网络安全之间的关联,包括云服务、网络安全、信息安全等技术领域。我们将通过代码示例来展示如何保护云计算环境中的数据和应用程序。最后,我们将讨论如何应对云计算环境中的网络安全挑战,以保护数据和应用程序免受攻击。
|
5月前
|
Python
智能卡系统工程是一个涉及多个方面的复杂系统,包括硬件(如读卡器、智能卡)、软件(如读卡器驱动程序、智能卡操作系统和应用软件)以及网络通信等。
智能卡系统工程是一个涉及多个方面的复杂系统,包括硬件(如读卡器、智能卡)、软件(如读卡器驱动程序、智能卡操作系统和应用软件)以及网络通信等。