GHOST系统之家 - Windows系统光盘下载网站!
当前位置:GHOST系统之家>系统教程 > OpenHarmony 资源调度之智能感知调度源码分析

OpenHarmony 资源调度之智能感知调度源码分析

来源:Ghost系统之家浏览:时间:2023-04-26 16:44:48

想了解更多关于开源的内容,请访问:

51CTO开源基础软件社区

https://ost.51cto.com

1、WPA_supplicant简介

WPA是WiFi Protected Access的缩写,中文含义为“WiFi网络安全存取”。WPA是一种基于标准的可互操作的WLAN安全性增强解决方案,可大大增强现有以及未来无线局域网络的数据保护和访问控制水平。

wpa_supplicant是开源项目源码,支持Linux,Windows以及很多嵌入式系统。它是WPA的应用层认证客户端,负责完成认证相关的登录、加密等工作。wpa_supplicant是一个独立运行的 守护进程,其核心是一个消息循环,在消息循环中处理WPA状态机、控制命令、驱动事件、配置信息等。

经过编译后的 wpa_supplicant源程序可以看到两个主要的可执行工具:wpa_supplicant 和 wpa_cli。wpa_supplicant是核心程序,它和wpa_cli的关系就是服务和客户端的关系:后台运行wpa_supplicant,使用wpa_cli来搜索、设置、和连接网络。wpa_supplicant与上层还是wpa_supplicant与驱动都采用socket通讯, 与驱动交互上报数据给用户,而用户可以通过socket发送命令给wpa_supplicant调动驱动来对WiFi芯片操作,如图1所示:

OpenHarmony 资源调度之智能感知调度源码分析-开源基础软件社区

图 1wpa_supplicant框架

2、AF_INET与AF_UNIX socket

Wpa_supplicant支持AF_INET和AF_UNIX socket两种通信方式:AF_INET socket、AF_UNIX socket。

AF_INET socket通信方式类似于网络socket通信,发送方、接收方依赖IP:Port来标识,即将本地的socket绑定到对应的IP端口上,发送数据时,指定对方的IP端口,经过Internet,可以根据此IP端口最终找到接收方;接收数据时,可以从数据包中获取到发送方的IP端口。发送方通过系统调用send()将原始数据发送到操作系统内核缓冲区中。内核缓冲区从上到下依次经过TCP层、IP层、链路层的编码,分别添加对应的头部信息,经过网卡将一个数据包发送到网络中。经过网络路由到接收方的网卡。网卡通过系统中断将数据包通知到接收方的操作系统,再沿着发送方编码的反方向进行解码,即依次经过链路层、IP层、TCP层去除头部、检查校验等,最终将原始数据上报到接收方进程,通信过程如下图所示:

OpenHarmony 资源调度之智能感知调度源码分析-开源基础软件社区

图 2AF_INET socket通信过程

AF_UNIX socket通信是典型的本地IPC,类似于管道,依赖路径名标识发送方和接收方。即发送数据时,指定接收方绑定的路径名,操作系统根据该路径名可以直接找到对应的接收方,并将原始数据直接拷贝到接收方的内核缓冲区中,并上报给接收方进程进行处理。同样的接收方可以从收到的数据包中获取到发送方的路径名,并通过此路径名向其发送数据。

OpenHarmony 资源调度之智能感知调度源码分析-开源基础软件社区

图 3AF_UNIX socket通信过程

他们的相同点:操作系统提供的接口socket(),bind(),connect(),accept(),send(),recv(),以及用来对其进行多路复用事件检测的select(),poll(),epoll()都是完全相同的。收发数据的过程中,上层应用感知不到底层的差别。

不同点:

建立socket传递的地址域,及bind()的地址结构稍有区别:socket() 分别传递不同的域AF_INET和AF_UNIX bind()的地址结构分别为sockaddr_in(制定IP端口)和sockaddr_un(指定路径名)AF_INET需经过多个协议层的编解码,消耗系统cpu,并且数据传输需要经过网卡,受到网卡带宽的限制。AF_UNIX数据到达内核缓冲区后,由内核根据指定路径名找到接收方socket对应的内核缓冲区,直接将数据拷贝过去,不经过协议层编解码,节省系统cpu,并且不经过网卡,因此不受网卡带宽的限制。AF_UNIX的传输速率远远大于AF_INETAF_INET不仅可以用作本机的跨进程通信,同样的可以用于不同机器之间的通信,其就是为了在不同机器之间进行网络互联传递数据而生。而AF_UNIX则只能用于本机内进程之间的通信。

3、WPA_supplicant在OpenHarmony中的应用

(1)WPA_supplicant的位置

OpenHarmony的WIFI子系统使用WPA_supplicant实现调动驱动操作WIFI芯片,驱动数据上报给框架层的功能,WPA_supplicant在WIFI子系统的位置如下图的WIFI架构图所示:

OpenHarmony 资源调度之智能感知调度源码分析-开源基础软件社区

图 4WIFI子系统架构图

WPA Supplicant包含libwpa、libwpa_client库和wpa_cli、wpa_supplicant、hostapd可执行程序。

libwpa是一个包含了wpa_suppliant和hostapd具体实现的库。wpa_supplicant是wpa的认证客户端,负责完成认证相关的登录、加密等工作。hostapd包含了IEEE802.11接入点管理、IEEE802.1X/WPA/WPA2认证、EAP服务器以及Radius鉴权服务器功能。libwpa_client是一个给客户端连接和调用的库,提供创建与wpa_supplicant或hostapd通信控制接口的能力。wpa_cli和wpa_supplicant是客户端和服务器的关系,通过wpa_cli可以向wpa_supplicant发送命令,进行扫描、连接等做操作,可用来进行Wifi功能的验证。

Wifi HAL层作为硬件适配层,承上启下,对上层框架屏蔽底层硬件差别,为上层提供一致的接口。对下则负责拉起WPAS,即fork进程wifi_hal_service的子进程,在子进程中加载libwpa库,执行wpa_supplicant或hostapd的入口函数, 作为unix socket通信的服务端. Wifi HAL的wifi_hal_service进程是unix socket通信的客户端,通过命令消息下发给wpa_supplicant或hostapd。

(2)Wifi HAL与wpa_supplicant的unix socket机制

Wifi HAL拉起wpa_supplicant或hostapd并建立unix socket连接过程如下图所示:

OpenHarmony 资源调度之智能感知调度源码分析-开源基础软件社区

图 5Wifi HAL与wpa_supplicant unix socket建立过程

其中HAL拉起wpas的主要实现函数为StartModuleInternal,代码主干如下

int StartModuleInternal(const char *moduleName, const char *startCmd, pid_t *pProcessId){...pid_t pid = fork();// fork子进程if (pid < 0) {LOGE("Create wpa process failed!");return HAL_FAILURE;}if (pid == 0) { prctl(PR_SET_PDEATHSIG, SIGKILL);pthread_t tid;int ret = pthread_create(&tid, NULL, WpaThreadMain, (void *)startCmd); // 子进程中创建主线程,线程入口函数WpaThreadMain ...} else {...}return HAL_SUCCESS;}

子进程的主线程入口函数WpaThreadMain中,加载libwpa动态库,执行主函数wpa_main或ap_main,参数由创建线程时传入的startcmd解析而来。对于Sta和P2p业务,有两个参数分别是配置文件路径、全局控制路径;对于hostapd业务,传入一个参数,即hostapd配置文件路径。

static void *WpaThreadMain(void *p){ ...// 加载动态库libwpa#ifdef OHOS_ARCH_LITEvoid *handleLibWpa = dlopen("libwpa.so", RTLD_NOW | RTLD_LOCAL);#else#ifdef __aarch64__void *handleLibWpa = dlopen("/system/lib64/libwpa.z.so", RTLD_NOW | RTLD_LOCAL | RTLD_NODELETE);#elsevoid *handleLibWpa = dlopen("/system/lib/libwpa.z.so", RTLD_NOW | RTLD_LOCAL | RTLD_NODELETE);#endif#endif...if (strcmp(param.argv[0], "wpa_supplicant") == 0) {func = (int (*)(int, char **))dlsym(handleLibWpa, "wpa_main");} else {func = (int (*)(int, char **))dlsym(handleLibWpa, "ap_main");}...// 执行主函数int ret = func(param.argc, tmpArgv);LOGD("run wpa_main ret:%{public}d.\n", ret);if (dlclose(handleLibWpa) != 0) {LOGE("dlclose libwpa failed.");return NULL;}return NULL;}

Wifi HAL作为客户端建立unix socket连接的主要实现函数WpaCliConnect,通过调用wpa client的函数wpa_ctrl_open建立socket连接,其参数ifname为“/data/service/el1/public/wifi/sockets/wpa/wlan0”。

static int WpaCliConnect(WifiWpaInterface *p){...int count = WPA_TRY_CONNECT_TIMES;while (count-- > 0) {int ret = InitWpaCtrl(&p->wpaCtrl, WPA_CTRL_OPEN_IFNAME);if (ret == 0) {LOGI("Global wpa interface connect successfully!");break;} else {LOGE("Init wpaCtrl failed: %{public}d", ret);}usleep(WPA_TRY_CONNECT_SLEEP_TIME);}if (count <= 0) {return -1;}p->threadRunFlag = 1;if (pthread_create(&p->tid, NULL, WpaReceiveCallback, p) != 0) {p->threadRunFlag = 0;ReleaseWpaCtrl(&p->wpaCtrl);LOGE("Create monitor thread failed!");return -1;}LOGI("Wpa connect finish.");return 0;}int InitWpaCtrl(WpaCtrl *pCtrl, const char *ifname){...do {#ifdef WPA_CTRL_IFACE_UNIXpCtrl->pRecv = wpa_ctrl_open(ifname);#elsepCtrl->pRecv = wpa_ctrl_open("global");#endifif (pCtrl->pRecv == NULL) {LOGE("open wpa control recv interface failed!");break;}if (wpa_ctrl_attach(pCtrl->pRecv) != 0) {LOGE("attach monitor interface failed!");break;}#ifdef WPA_CTRL_IFACE_UNIXpCtrl->pSend = wpa_ctrl_open(ifname);#elsepCtrl->pSend = wpa_ctrl_open("global");#endifif (pCtrl->pSend == NULL) {LOGE("open wpa control send interface failed!");break;}flag += 1;} while (0);...return 0;}

总结

本文主要介绍了WPA_supplicant基础及其在分布式软总线子系统WIFI模块的应用 ,着重分析了HAL层与WPA_supplicant之间的unix socket通信机制并贴出主要入口代码,为开发人员维护和扩展功能提供参考。

想了解更多关于开源的内容,请访问:

51CTO开源基础软件社区

https://ost.51cto.com

标签:鸿蒙WPA

推荐系统

  • 电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载

    电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载

    语言:中文版系统大小:2.98GB系统类型:Win8

    电脑公司Ghost Win8.1x32位纯净版V2022年7月版本集成了自2022流行的各种硬件驱动,首次进入系统即全部硬件已安装完毕。电脑公司Ghost Win8.1x32位纯净版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,精心挑选的系统维护工具,加上绿茶独有

  • 微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载

    微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载

    语言:中文版系统大小:5.13GB系统类型:Win11

    微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Win11 64位 Office办公版(免费)优化  1、保留 Edge浏览器。  2、隐藏“操作中心”托盘图标。  3、保留常用组件(微软商店,计算器,图片查看器等)。  5、关闭天气资讯。 

  • Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载

    Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载

    语言:中文版系统大小:4.75GB系统类型:Win11

    Ghost Win11 21H2是微软在系统方面技术积累雄厚深耕多年,Ghost Win11 21H2系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Ghost Win11 21H2是微软最新发布的KB5019961补丁升级而来的最新版的21H2系统,以Windows 11 21H2 22000 1219 专业版为基础进行优化,保持原汁原味,系统流畅稳定,保留常用组件

  • windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载

    windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载

    语言:中文版系统大小:5.31GB系统类型:Win11

    windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载,微软win11发布快大半年了,其中做了很多次补丁和修复一些BUG,比之前的版本有一些功能上的调整,目前已经升级到最新版本的镜像系统,并且优化了自动激活,永久使用。windows11中文版镜像国内镜像下载地址微软windows11正式版镜像 介绍:1、对函数算法进行了一定程度的简化和优化

  • 微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载

    微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载

    语言:中文版系统大小:5.31GB系统类型:Win11

    微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载,微软2022年正式推出了win11系统,很多人迫不及待的要体验,本站提供了最新版的微软Windows11正式版系统下载,微软windows11正式版镜像 是一款功能超级强大的装机系统,是微软方面全新推出的装机系统,这款系统可以通过pe直接的完成安装,对此系统感兴趣,想要使用的用户们就快来下载

  • 微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件

    微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件

    语言:中文版系统大小:0MB系统类型:Win11

    微软Ghost win11 正式版镜像文件是一款由微软方面推出的优秀全新装机系统,这款系统的新功能非常多,用户们能够在这里体验到最富有人性化的设计等,且全新的柔软界面,看起来非常的舒服~微软Ghost win11 正式版镜像文件介绍:1、与各种硬件设备兼容。 更好地完成用户安装并有效地使用。2、稳定使用蓝屏,系统不再兼容,更能享受无缝的系统服务。3、为

  • 雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载

    雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载

    语言:中文版系统大小:4.75GB系统类型:

    雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的雨林木风品牌,其系统口碑得到许多人认可,积累了广大的用户群体,雨林木风是一款稳定流畅的系统,一直以来都以用户为中心,是由雨林木风团队推出的Windows11国内镜像版,基于国内用户的习惯,做了系统性能的优化,采用了新的系统

  • 雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO

    雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO

    语言:中文版系统大小:5.91GB系统类型:Win7

    雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO在系统方面技术积累雄厚深耕多年,加固了系统安全策略,雨林木风win7旗舰版系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。win7 32位旗舰装机版 v2019 05能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户