uevent 使用示例

2021-10-09 04:08:11 字數 2078 閱讀 5712

1.核心端

struct device *dev = null;

char * s_c[2];

static ssize_t send( struct device *dev, struct device_attribute *attr, const char *buf, size_t count )

static device_attr(s, s_irugo|s_iwusr, null, send);

static const struct attribute *song_event_attr = ;

static const struct attribute_group song_event_attr_group = ;

static struct class song_event_class = ;

static int __init song_uevent_init( void )        

dev = device_create(&song_event_class, null, mkdev(0, 0), null, "song_event");

if( dev )

}else

return 0;

}載入此模組將建立 /sys/devices/virtual/song_event/song_event

如何使用呢?就是怎麼讓核心傳送訊息出來?

echo 123 > s 

對此檔案進行寫操作 即可傳送制定訊息

直接看如下**:

#include

#include

#include

#include

#include

#include

#include

#define uevent_msg_len 2048

#define user_cooling_dev "/devices/virtual/thermal/cooling_device0"

struct cooling_device ;

static int open_uevent_socket(void);

static void parse_uevent(const char *msg, struct cooling_device *cdev);

int main_uevent( int argc __unused, char **ar** __unused ) 

} while(1);

}static int open_uevent_socket(void)

setsockopt(s, sol_socket, so_rcvbufforce, &sz, sizeof(sz));

if (bind(s, (struct sockaddr *) &addr, sizeof(addr)) < 0)

return s;

}static void parse_uevent(const char *msg, struct cooling_device *cdev)

else if (!strncmp(msg, "action=", 7)) else if (!strncmp(msg, "devpath=", 8)) else if (!strncmp(msg, "state=", 6)) else if (!strncmp(msg, "temp=", 5))

while(*msg++);

}debug_msg("event \n",

cdev->name,    cdev->action, cdev->path, cdev->state, cdev->temp);

if(!strncmp(cdev->path, user_cooling_dev, sizeof(user_cooling_dev)) && !strncmp(cdev->action, "change", 5))

debug_msg("event \n",

cdev->name,    cdev->action, cdev->path, cdev->state, cdev->temp);

}void *socket_uevent_test(void *arg)

return 0;

}ok,搞定!

uevent 驅動 uevent分析

1 kobject,ktype,kset kobject代表sysfs中的目錄。ktype代表kobject的型別,主要包含release函式和attr的讀寫函式。比如,所有的bus都有同乙個bus type 所有的class都有同乙個class type。kset包含了subsystem概念,ks...

安卓系統之uevent 機制

uevnet 介紹 uevent是android核心空間與使用者空間進行通訊的一種方式,其本質是通過netlink 通過socket 傳送訊息給使用者程序,使用場景 熱插拔 一uevent 程序的啟動流程 1.system core init init.cpp main if strcmp base...

Linux裝置模型分析之(五) uevent

linux裝置模型分析之 一 裝置模型核心 linux裝置模型分析之 二 裝置模型的基石 linux裝置模型分析之 三 sysfs linux裝置模型分析之 四 class linux裝置模型分析之 五 uevent uevent是kobject的一部分,用於在kobject狀態發生改變時,例如增加...