2024-07-24 buildroot c语言应用获取 kernel kobject_uevent_env 发送的消息,侦测USB口变化。

ops/2024/9/22 17:33:40/

一、kobject_uevent_env 是 Linux 内核中的一个函数,用于发送内核事件到用户空间。它主要用于生成和发送与内核对象(kobject)相关的事件通知,这些事件通常用于通知用户空间程序(如 udev)有关硬件的变化或其他系统状态变化。

二、用户空间程序可以通过使用 netlink 套接字来接收 kobject_uevent_env 发送的消息。

三、测试C语言代码

        3.1 kernel 使用kobject_uevent_env 发送信息。

        3.2 c语言app代码


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <linux/netlink.h>
#include <errno.h>#define UEVENT_BUFFER_SIZE 512
#define NETLINK_KOBJECT_UEVENT 15int main(void) {struct sockaddr_nl sa;int sock;char buf[UEVENT_BUFFER_SIZE];sock = socket(AF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT);//在较新的 Linux 内核版本中,NETLINK_KOBJECT_UEVENT 的值是 15if (sock < 0) {perror("socket");return -1;}memset(&sa, 0, sizeof(sa));sa.nl_family = AF_NETLINK;sa.nl_groups = 1;if (bind(sock, (struct sockaddr *)&sa, sizeof(sa)) < 0) {perror("bind");close(sock);return -1;}while (1) {printf("Waiting data............\n");int len = recv(sock, buf, sizeof(buf), 0);if (len < 0) {perror("recv");close(sock);return -1;}printf("Read len=%d\n",len);for (int i = 0; i < len; ) {char *event = buf + i;printf("DATA:%s \r\n",event);if (strncmp(event, "USB_STATE=DISCONNECTED",strlen("USB_STATE=DISCONNECTED")) == 0) {printf("USB device is disconnected!\n");} i += strlen(event) + 1;}}close(sock);return 0;
}

四、实例运行效果,当USB 口有变化的时候,会接收到消息。


http://www.ppmy.cn/ops/85825.html

相关文章

【物联网IoT基础】IoT的基本概念和架构

物联网IoT基础&#xff1a;IoT的基本概念和架构 目录 引言物联网的基本概念 什么是物联网物联网的发展历程 物联网的架构 感知层网络层平台层应用层 物联网的关键技术 传感技术通信技术数据处理与分析安全与隐私 物联网的应用场景 智能家居智慧城市工业物联网医疗健康农业物联…

【区块链+绿色低碳】雄韬智慧锂电储能管理系统 | FISCO BCOS应用案例

雄韬智慧锂电储能管理系统&#xff08;Energy Management System&#xff0c;以下简称 EMS&#xff09;是雄韬集团响应国家实现新型电力 系统建设&#xff0c;助力“碳达峰、碳中和”目标而自主开发的创新智慧锂电储能系统。 系统采用了 FISCO BCOS 联盟链&#xff0c;融合了物…

greenplum pg_stat_activity说明

视图pg_stat_activity每行详细显示服务器每个进程&#xff0c;其中包含有关相关用户会话和查询的详细信息。除非关闭了参数stats_command_string&#xff0c;否则报告当前查询数据的列是可用的。此外&#xff0c;只有当检查视图的用户是超级用户或与拥有所报告进程的用户相同时…

greenplum gpmetrics.gpcc_queries_history表各列的含义

在gp数据库中&#xff0c;经常会用到 gpmetrics.gpcc_queries_history 查询历史会话信息做审计用。 在该表中各个列的解释&#xff1a; ctime:行创建时间 tmid:time identifier,时间戳,所有与查询相关联的记录都将具有相同的tmid值 ssid:session id,所有与查询相关联的所有记…

Redis:创建集群——[ERR] Sorry, can‘t connect to node 192.168.X.X

解决办法&#xff1a;注释掉bind 127.0.0.1可以使所有的ip访问redis 若是想指定多个ip访问&#xff0c;但并不是全部的ip访问&#xff0c;可以bind 在Redis3.2之后&#xff0c;redis增加了protected-mode&#xff0c;在这个模式下&#xff0c;即使注释掉了bind 127.0.0.1&…

实变函数精解【10】

文章目录 点集基础理论逐点连续定义历史背景性质应用 充分条件和必要条件充分条件必要条件充要条件总结 参考文献 点集 基础 设 f ( x ) 定义在 R n 上&#xff0c;则 f ∈ C ( R n ) 的充要条件是对任意的 t ∈ R &#xff0c; 点集 E 1 { x ∈ R n : f ( x ) ≥ t } , E 2 …

正则采集器——前端搭建

前端使用有名的饿了么管理后台&#xff0c;vue3版本vue3-element-admin&#xff0c;首先从gitee中克隆一个vue3-element-admin模板代码vue3-element-admin: Vue3 Element Admin开箱即用的中后台管理系统前端解决方案&#xff0c;然后在此基础上进行开发。 1、修改vite.config.…

Git(分布式版本控制系统)(fourteen day)

一、分布式版本控制系统 1、Git概述 Git是一种分布式版本控制系统&#xff0c;用于跟踪和管理代码的变更&#xff0c;它由Linux、torvalds创建的&#xff0c;最初被设计用于Linux内核的开发。Git允许开发人员跟踪和管理代码的版本&#xff0c;并且可以在不同的开发人员之间进行…