From 496c5f3ac4766baa4b67928d889e3808c24051b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=8B=E4=BD=B3=E4=BC=9F?= Date: Mon, 4 Aug 2025 15:27:32 +0800 Subject: [PATCH] =?UTF-8?q?Description:uevent=E5=A2=9E=E5=8A=A0=E7=BB=B4?= =?UTF-8?q?=E6=B5=8B=20IssueNo:https://gitee.com/openharmony/startup=5Fini?= =?UTF-8?q?t/issues/ICQY2K=20Binary=20Source:No=20Signed-off-by:=20songjia?= =?UTF-8?q?wei9=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ueventd/ueventd_device_handler.c | 43 +++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/ueventd/ueventd_device_handler.c b/ueventd/ueventd_device_handler.c index ec63752d6..c0f6c795b 100644 --- a/ueventd/ueventd_device_handler.c +++ b/ueventd/ueventd_device_handler.c @@ -505,6 +505,29 @@ void HandleBlockDeviceEvent(const struct Uevent *uevent) HandleDeviceNode(uevent, deviceNode, isBlock); } +static int SplitUsbDeviceNode(const struct Uevent *uevent, char *deviceNode) +{ + if (uevent->deviceName != NULL) { + if (snprintf_s(deviceNode, DEVICE_FILE_SIZE, DEVICE_FILE_SIZE - 1, "/dev/%s", uevent->deviceName) == -1) { + INIT_LOGE("Make device file for device [%d : %d]", uevent->major, uevent->minor); + return -1; + } + return 0; + } else { + if (uevent->busNum < 0 || uevent->devNum < 0) { + // usb device should always report bus number and device number. + INIT_LOGE("usb device with invalid bus number or device number"); + return -1; + } + if (snprintf_s(deviceNode, DEVICE_FILE_SIZE, DEVICE_FILE_SIZE - 1, + "/dev/bus/usb/%03d/%03d", uevent->busNum, uevent->devNum) == -1) { + INIT_LOGE("Make usb device node for device [%d : %d]", uevent->busNum, uevent->devNum); + return 0; + } + return 0; + } +} + void HandleOtherDeviceEvent(const struct Uevent *uevent) { if (uevent == NULL || uevent->subsystem == NULL || uevent->syspath == NULL) { @@ -529,27 +552,17 @@ void HandleOtherDeviceEvent(const struct Uevent *uevent) INIT_LOGE("Cannot get device path or device name"); return; } + if (strcmp(devPath, "/dev/input") == 0) { + INIT_LOGI("HandleOtherDeviceEvent, devPath = %s, devName = %s", devPath, devName); + } INIT_LOGV("HandleOtherDeviceEvent, devPath = %s, devName = %s", devPath, devName); // For usb devices, should take care of it specially. // if usb devices report DEVNAME, just create device node. // otherwise, create deviceNode with bus number and device number. if (STRINGEQUAL(uevent->subsystem, "usb")) { - if (uevent->deviceName != NULL) { - if (snprintf_s(deviceNode, DEVICE_FILE_SIZE, DEVICE_FILE_SIZE - 1, "/dev/%s", uevent->deviceName) == -1) { - INIT_LOGE("Make device file for device [%d : %d]", uevent->major, uevent->minor); - return; - } - } else { - if (uevent->busNum < 0 || uevent->devNum < 0) { - // usb device should always report bus number and device number. - INIT_LOGE("usb device with invalid bus number or device number"); - return; - } - if (snprintf_s(deviceNode, DEVICE_FILE_SIZE, DEVICE_FILE_SIZE - 1, - "/dev/bus/usb/%03d/%03d", uevent->busNum, uevent->devNum) == -1) { - INIT_LOGE("Make usb device node for device [%d : %d]", uevent->busNum, uevent->devNum); - } + if (SplitUsbDeviceNode(uevent, deviceNode) != 0) { + return; } } else if (STARTSWITH(uevent->subsystem, "usb")) { // Other usb devies, do not handle it. -- Gitee