From: Yu Watanabe Date: Mon, 26 Aug 2024 19:14:12 +0000 (+0900) Subject: udevadm/info: also show driver subsystem and device ID X-Git-Tag: v257-rc1~612^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F34123%2Fhead;p=thirdparty%2Fsystemd.git udevadm/info: also show driver subsystem and device ID This adds two more fields in 'udevadm info': - J for device ID, e.g. b128:1, c10:1, n1, and so on. - B for driver subsystem, e.g. pci, i2c, and so on. These, especially the device ID field may be useful to find udev database file under /run/udev/data for a device. --- diff --git a/man/udevadm.xml b/man/udevadm.xml index b515f3c79c0..556f845dcee 100644 --- a/man/udevadm.xml +++ b/man/udevadm.xml @@ -336,10 +336,18 @@ R: Device number in /sys/ (i.e. the numeric suffix of the last component of P:) + + J: + Device ID + U: Kernel subsystem + + B: + Driver subsystem + T: Kernel device type within subsystem diff --git a/src/udev/udevadm-info.c b/src/udev/udevadm-info.c index 824b6fc7268..0a1da3ed310 100644 --- a/src/udev/udevadm-info.c +++ b/src/udev/udevadm-info.c @@ -323,9 +323,15 @@ static int print_record(sd_device *device, const char *prefix) { if (sd_device_get_sysnum(device, &str) >= 0) printf("%sR: %s%s%s\n", prefix, ansi_highlight_white(), str, ansi_normal()); + if (sd_device_get_device_id(device, &str) >= 0) + printf("%sJ: %s%s%s\n", prefix, ansi_highlight_white(), str, ansi_normal()); + if (sd_device_get_subsystem(device, &subsys) >= 0) printf("%sU: %s%s%s\n", prefix, ansi_highlight_green(), subsys, ansi_normal()); + if (sd_device_get_driver_subsystem(device, &str) >= 0) + printf("%sB: %s%s%s\n", prefix, ansi_highlight_green(), str, ansi_normal()); + if (sd_device_get_devtype(device, &str) >= 0) printf("%sT: %s%s%s\n", prefix, ansi_highlight_green(), str, ansi_normal()); @@ -376,8 +382,9 @@ static int record_to_json(sd_device *device, sd_json_variant **ret) { assert(device); assert(ret); - /* We don't show any shorthand fields here as done in print_record() except for SYSNAME and SYSNUM as - * all the other ones have a matching property which will already be included. */ + /* We don't show any shorthand fields here as done in print_record() except for SYSNAME, SYSNUM, + * DRIVER_SUBSYSTEM, and DEVICE_ID, as all the other ones have a matching property which will already + * be included. */ if (sd_device_get_sysname(device, &str) >= 0) { r = sd_json_variant_set_field_string(&v, "SYSNAME", str); @@ -391,6 +398,18 @@ static int record_to_json(sd_device *device, sd_json_variant **ret) { return r; } + if (sd_device_get_driver_subsystem(device, &str) >= 0) { + r = sd_json_variant_set_field_string(&v, "DRIVER_SUBSYSTEM", str); + if (r < 0) + return r; + } + + if (sd_device_get_device_id(device, &str) >= 0) { + r = sd_json_variant_set_field_string(&v, "DEVICE_ID", str); + if (r < 0) + return r; + } + FOREACH_DEVICE_PROPERTY(device, key, val) { r = sd_json_variant_set_field_string(&v, key, val); if (r < 0)