chiark / gitweb /
udevadm: add info option --device-id-of-file=<file>
authorKay Sievers <kay.sievers@vrfy.org>
Fri, 9 Nov 2007 09:22:30 +0000 (10:22 +0100)
committerKay Sievers <kay.sievers@vrfy.org>
Fri, 9 Nov 2007 09:22:30 +0000 (10:22 +0100)
Now, that udevinfo is no longer in /usr, we can add this:

  $ udevadm info --device-id-of-file=/
  8 5

to create a dynamic rule to provide /dev/root.

udevadm.8
udevadm.xml
udevinfo.c

index 23502215ecdca24d5f5e3cbd5062f1e00bc6f2ec..c07e7c60f02687e7fad7c8a139bbce6999e3931a 100644 (file)
--- a/udevadm.8
+++ b/udevadm.8
@@ -31,7 +31,7 @@ udevadm - udev management tool
 \fBudevadm help\fR
 .SH "DESCRIPTION"
 .PP
-udevadm expects a command and command specific options\. It controls the runtime behavior of udev, request kernel events, manages the event queue, and provides simple debugging mechanisms\.
+udevadm expects a command and command specific options\. It controls the runtime behavior of udev, requests kernel events, manages the event queue, and provides simple debugging mechanisms\.
 .SH "OPTIONS"
 .SS "udevadm info"
 .PP
@@ -56,7 +56,7 @@ to identify the specified device\. Valid queries are:
 The devpath of the device to query\.
 .RE
 .PP
-\fB\-\-name=\fR\fB\fInode\fR\fR
+\fB\-\-name=\fR\fB\fIfile\fR\fR
 .RS 4
 The name of the device node or a symlink to query
 .RE
@@ -76,6 +76,11 @@ query, the query returns the absolute path including the root directory\.
 Print all sysfs properties of the specified device that can be used in udev rules to match the specified device\. It prints all devices along the chain, up to the root of sysfs that can be used in udev rules\.
 .RE
 .PP
+\fB\-\-device\-id\-of\-file=\fR\fB\fIfile\fR\fR
+.RS 4
+Print major/minor numbers of the underlying device, where the file lives on\.
+.RE
+.PP
 \fB\-\-export\-db\fR
 .RS 4
 Export the content of the udev database\.
index 0518c3ba1a334751e84442559b3eaf99469b2754..14bc897c11388ba031717ccaa43dcb9389e6b605 100644 (file)
@@ -80,7 +80,7 @@
               </listitem>
             </varlistentry>
             <varlistentry>
-              <term><option>--name=<replaceable>node</replaceable></option></term>
+              <term><option>--name=<replaceable>file</replaceable></option></term>
               <listitem>
                 <para>The name of the device node or a symlink to query</para>
               </listitem>
                 along the chain, up to the root of sysfs that can be used in udev rules.</para>
               </listitem>
             </varlistentry>
+            <varlistentry>
+              <term><option>--device-id-of-file=<replaceable>file</replaceable></option></term>
+              <listitem>
+                <para>Print major/minor numbers of the underlying device, where the file
+                lives on.</para>
+              </listitem>
+            </varlistentry>
             <varlistentry>
               <term><option>--export-db</option></term>
               <listitem>
index fc45f7565d192e778173b15bc9d293c69ce62dd8..3fc40faf143231952f4ae8ac4d57d9346660e542 100644 (file)
@@ -206,6 +206,20 @@ out:
        return rc;
 }
 
+static int stat_device(const char *name)
+{
+       struct stat statbuf;
+
+       if (stat(name, &statbuf) != 0)
+               return -1;
+
+       if (major(statbuf.st_dev) == 0)
+               return -1;
+
+       printf("%d %d\n", major(statbuf.st_dev), minor(statbuf.st_dev));
+       return 0;
+}
+
 int udevinfo(int argc, char *argv[], char *envp[])
 {
        int option;
@@ -219,6 +233,7 @@ int udevinfo(int argc, char *argv[], char *envp[])
                { "attribute-walk", 0, NULL, 'a' },
                { "export-db", 0, NULL, 'e' },
                { "root", 0, NULL, 'r' },
+               { "device-id-of-file", 1, NULL, 'd' },
                { "version", 0, NULL, 1 }, /* -V outputs braindead format */
                { "help", 0, NULL, 'h' },
                {}
@@ -229,6 +244,7 @@ int udevinfo(int argc, char *argv[], char *envp[])
                ACTION_QUERY,
                ACTION_ATTRIBUTE_WALK,
                ACTION_ROOT,
+               ACTION_DEVICE_ID_FILE,
        } action = ACTION_NONE;
 
        enum query_type {
@@ -256,7 +272,7 @@ int udevinfo(int argc, char *argv[], char *envp[])
        }
 
        while (1) {
-               option = getopt_long(argc, argv, "aen:p:q:rVh", options, NULL);
+               option = getopt_long(argc, argv, "aed:n:p:q:rVh", options, NULL);
                if (option == -1)
                        break;
 
@@ -308,6 +324,10 @@ int udevinfo(int argc, char *argv[], char *envp[])
                                action = ACTION_ROOT;
                        root = 1;
                        break;
+               case 'd':
+                       action = ACTION_DEVICE_ID_FILE;
+                       strlcpy(name, optarg, sizeof(name));
+                       break;
                case 'a':
                        action = ACTION_ATTRIBUTE_WALK;
                        break;
@@ -322,20 +342,20 @@ int udevinfo(int argc, char *argv[], char *envp[])
                        goto exit;
                case 'h':
                        printf("Usage: udevadm info OPTIONS\n"
-                              "  --query=<type>    query database for the specified value:\n"
-                              "    name            name of device node\n"
-                              "    symlink         pointing to node\n"
-                              "    path            sysfs device path\n"
-                              "    env             the device related imported environment\n"
-                              "    all             all values\n"
-                              "\n"
-                              "  --path=<devpath>  sysfs device path used for query or chain\n"
-                              "  --name=<name>     node or symlink name used for query\n"
-                              "\n"
-                              "  --root            prepend to query result or print udev_root\n"
-                              "  --attribute-walk  print all SYSFS_attributes along the device chain\n"
-                              "  --export-db       export the content of the udev database\n"
-                              "  --help            print this text\n"
+                              "  --query=<type>             query database for the specified value:\n"
+                              "      name                     name of device node\n"
+                              "      symlink                  pointing to node\n"
+                              "      path                     sysfs device path\n"
+                              "      env                      the device related imported environment\n"
+                              "      all                      all values\n"
+                              "  --path=<devpath>           sysfs device path used for query or chain\n"
+                              "  --name=<name>              node or symlink name used for query\n"
+                              "  --root                     prepend to query result or print udev_root\n"
+                              "  --attribute-walk           print all key matches while walking along chain\n"
+                              "                             of parent devices\n"
+                              "  --device-id-of-file=<file> print major/minor of underlying device\n"
+                              "  --export-db                export the content of the udev database\n"
+                              "  --help                     print this text\n"
                               "\n");
                        goto exit;
                default:
@@ -421,6 +441,10 @@ int udevinfo(int argc, char *argv[], char *envp[])
                        goto exit;
                }
                break;
+       case ACTION_DEVICE_ID_FILE:
+               if (stat_device(name) != 0)
+                       rc = 6;
+               break;
        case ACTION_ROOT:
                printf("%s\n", udev_root);
                break;