]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udevadm/info: also show driver subsystem and device ID 34123/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 26 Aug 2024 19:14:12 +0000 (04:14 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 27 Aug 2024 20:26:26 +0000 (05:26 +0900)
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.

man/udevadm.xml
src/udev/udevadm-info.c

index b515f3c79c05a0a42e17e9dd4a639addaadea072..556f845dceebd1919df44eaed01f3453a89dd430 100644 (file)
               <entry><literal>R:</literal></entry>
               <entry>Device number in <filename>/sys/</filename> (i.e. the numeric suffix of the last component of <literal>P:</literal>)</entry>
             </row>
+            <row>
+              <entry><literal>J:</literal></entry>
+              <entry>Device ID</entry>
+            </row>
             <row>
               <entry><literal>U:</literal></entry>
               <entry>Kernel subsystem</entry>
             </row>
+            <row>
+              <entry><literal>B:</literal></entry>
+              <entry>Driver subsystem</entry>
+            </row>
             <row>
               <entry><literal>T:</literal></entry>
               <entry>Kernel device type within subsystem</entry>
index 824b6fc72682cbe5019612112046a67000065e8d..0a1da3ed310e17c805524b033ae23fd96ef42879 100644 (file)
@@ -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)