mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-23 17:34:00 +03:00
udevadm trigger: allow matching by device name
This makes udevadm trigger mirror udevadm info, except that multiple device names can be specified. Instructions in 60-keyboard.hwdb should now actually work. udevadm(8) is updated, but it could use a bit more polishing. https://bugs.freedesktop.org/show_bug.cgi?id=82311
This commit is contained in:
parent
d6170d27b2
commit
80877656a5
@ -66,7 +66,7 @@
|
||||
the event queue, and provides simple debugging mechanisms.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1><title>OPTIONS</title>
|
||||
<refsect1><title>Options</title>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><option>--debug</option></term>
|
||||
@ -89,7 +89,11 @@
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<refsect2><title>udevadm info <optional><replaceable>OPTIONS</replaceable></optional> <optional><replaceable>DEVPATH</replaceable>|<replaceable>FILE</replaceable></optional></title>
|
||||
<refsect2><title>udevadm info
|
||||
<arg choice="opt"><replaceable>options</replaceable></arg>
|
||||
<arg choice="opt"><replaceable>devpath</replaceable>|<replaceable>file</replaceable></arg>
|
||||
</title>
|
||||
|
||||
<para>Queries the udev database for device information
|
||||
stored in the udev database. It can also query the properties
|
||||
of a device from its sysfs representation to help creating udev
|
||||
@ -201,9 +205,16 @@
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<para>In addition an optional positional argument can be used
|
||||
to specify a device name or a sys path. It must start with
|
||||
<filename>/dev</filename> or <filename>/sys</filename>
|
||||
respectively.</para>
|
||||
</refsect2>
|
||||
|
||||
<refsect2><title>udevadm trigger <optional>options</optional></title>
|
||||
<refsect2><title>udevadm trigger
|
||||
<arg choice="opt"><replaceable>options</replaceable></arg>
|
||||
<arg choice="opt" rep="repeat"><replaceable>devpath</replaceable>|<replaceable>file</replaceable></arg></title>
|
||||
<para>Request device events from the kernel. Primarily used to replay events at system coldplug time.</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
@ -299,13 +310,21 @@
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>-y</option></term>
|
||||
<term><option>--sysname-match=<replaceable>NAME</replaceable></option></term>
|
||||
<term><option>--sysname-match=<replaceable>PATH</replaceable></option></term>
|
||||
<listitem>
|
||||
<para>Trigger events for devices with a matching sys
|
||||
device name. This option can be specified multiple times
|
||||
device path. This option can be specified multiple times
|
||||
and supports shell style pattern matching.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>--name-match=<replaceable>NAME</replaceable></option></term>
|
||||
<listitem>
|
||||
<para>Trigger events for devices with a matching
|
||||
device path. This options can be specified multiple
|
||||
times.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><option>-b</option></term>
|
||||
<term><option>--parent-match=<replaceable>SYSPATH</replaceable></option></term>
|
||||
@ -322,9 +341,16 @@
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<para>In addition optional positional arguments can be used
|
||||
to specify device names or sys paths. They must start with
|
||||
<filename>/dev</filename> or <filename>/sys</filename>
|
||||
respectively.</para>
|
||||
</refsect2>
|
||||
|
||||
<refsect2><title>udevadm settle <optional>options</optional></title>
|
||||
<refsect2><title>udevadm settle
|
||||
<arg choice="opt"><replaceable>options</replaceable></arg>
|
||||
</title>
|
||||
<para>Watches the udev event queue, and exits if all current events are handled.</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
@ -433,7 +459,9 @@
|
||||
</variablelist>
|
||||
</refsect2>
|
||||
|
||||
<refsect2><title>udevadm monitor <optional>options</optional></title>
|
||||
<refsect2><title>udevadm monitor
|
||||
<arg choice="opt"><replaceable>options</replaceable></arg>
|
||||
</title>
|
||||
<para>Listens to the kernel uevents and events sent out by a udev rule
|
||||
and prints the devpath of the event to the console. It can be used to analyze the
|
||||
event timing, by comparing the timestamps of the kernel uevent and the udev event.
|
||||
@ -484,7 +512,9 @@
|
||||
</variablelist>
|
||||
</refsect2>
|
||||
|
||||
<refsect2><title>udevadm hwdb <optional>options</optional></title>
|
||||
<refsect2><title>udevadm hwdb
|
||||
<arg choice="opt"><replaceable>options</replaceable></arg>
|
||||
</title>
|
||||
<para>Maintain the hardware database index in <filename>/etc/udev/hwdb.bin</filename>.</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
@ -532,7 +562,10 @@
|
||||
</variablelist>
|
||||
</refsect2>
|
||||
|
||||
<refsect2><title>udevadm test <optional>options</optional> <replaceable>devpath</replaceable></title>
|
||||
<refsect2><title>udevadm test
|
||||
<arg choice="opt"><replaceable>options</replaceable></arg>
|
||||
<arg><replaceable>devpath</replaceable></arg>
|
||||
</title>
|
||||
<para>Simulate a udev event run for the given device, and print debug output.</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
@ -565,7 +598,11 @@
|
||||
</variablelist>
|
||||
</refsect2>
|
||||
|
||||
<refsect2><title>udevadm test-builtin <optional>options</optional> <replaceable>COMMAND</replaceable> <replaceable>DEVPATH</replaceable></title>
|
||||
<refsect2><title>udevadm test-builtin
|
||||
<arg choice="opt"><replaceable>options</replaceable></arg>
|
||||
<arg><replaceable>command</replaceable></arg>
|
||||
<arg><replaceable>devpath</replaceable></arg>
|
||||
</title>
|
||||
<para>Run a built-in command <replaceable>COMMAND</replaceable>
|
||||
for device <replaceable>DEVPATH</replaceable>, and print debug
|
||||
output.</para>
|
||||
|
@ -86,26 +86,32 @@ static void help(void) {
|
||||
" -A,--attr-nomatch=<file[=<value>]> exclude devices with a matching attribute\n"
|
||||
" -p,--property-match=<key>=<value> trigger devices with a matching property\n"
|
||||
" -g,--tag-match=<key>=<value> trigger devices with a matching property\n"
|
||||
" -y,--sysname-match=<name> trigger devices with a matching name\n"
|
||||
" -y,--sysname-match=<name> trigger devices with this /sys path\n"
|
||||
" --name-match=<name> trigger devices with this /dev name\n"
|
||||
" -b,--parent-match=<name> trigger devices with that parent device\n"
|
||||
" -h,--help\n\n");
|
||||
}
|
||||
|
||||
static int adm_trigger(struct udev *udev, int argc, char *argv[]) {
|
||||
enum {
|
||||
ARG_NAME = 0x100,
|
||||
};
|
||||
|
||||
static const struct option options[] = {
|
||||
{ "verbose", no_argument, NULL, 'v' },
|
||||
{ "dry-run", no_argument, NULL, 'n' },
|
||||
{ "type", required_argument, NULL, 't' },
|
||||
{ "action", required_argument, NULL, 'c' },
|
||||
{ "subsystem-match", required_argument, NULL, 's' },
|
||||
{ "subsystem-nomatch", required_argument, NULL, 'S' },
|
||||
{ "attr-match", required_argument, NULL, 'a' },
|
||||
{ "attr-nomatch", required_argument, NULL, 'A' },
|
||||
{ "property-match", required_argument, NULL, 'p' },
|
||||
{ "tag-match", required_argument, NULL, 'g' },
|
||||
{ "sysname-match", required_argument, NULL, 'y' },
|
||||
{ "parent-match", required_argument, NULL, 'b' },
|
||||
{ "help", no_argument, NULL, 'h' },
|
||||
{ "verbose", no_argument, NULL, 'v' },
|
||||
{ "dry-run", no_argument, NULL, 'n' },
|
||||
{ "type", required_argument, NULL, 't' },
|
||||
{ "action", required_argument, NULL, 'c' },
|
||||
{ "subsystem-match", required_argument, NULL, 's' },
|
||||
{ "subsystem-nomatch", required_argument, NULL, 'S' },
|
||||
{ "attr-match", required_argument, NULL, 'a' },
|
||||
{ "attr-nomatch", required_argument, NULL, 'A' },
|
||||
{ "property-match", required_argument, NULL, 'p' },
|
||||
{ "tag-match", required_argument, NULL, 'g' },
|
||||
{ "sysname-match", required_argument, NULL, 'y' },
|
||||
{ "name-match", required_argument, NULL, ARG_NAME },
|
||||
{ "parent-match", required_argument, NULL, 'b' },
|
||||
{ "help", no_argument, NULL, 'h' },
|
||||
{}
|
||||
};
|
||||
enum {
|
||||
@ -187,6 +193,19 @@ static int adm_trigger(struct udev *udev, int argc, char *argv[]) {
|
||||
break;
|
||||
}
|
||||
|
||||
case ARG_NAME: {
|
||||
_cleanup_udev_device_unref_ struct udev_device *dev;
|
||||
|
||||
dev = find_device(udev, optarg, "/dev/");
|
||||
if (dev == NULL) {
|
||||
log_error("unable to open the device '%s'", optarg);
|
||||
return 2;
|
||||
}
|
||||
|
||||
udev_enumerate_add_match_parent(udev_enumerate, dev);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'h':
|
||||
help();
|
||||
return 0;
|
||||
@ -197,9 +216,16 @@ static int adm_trigger(struct udev *udev, int argc, char *argv[]) {
|
||||
}
|
||||
}
|
||||
|
||||
if (optind < argc) {
|
||||
fprintf(stderr, "Extraneous argument: '%s'\n", argv[optind]);
|
||||
return 1;
|
||||
for (; optind < argc; optind++) {
|
||||
_cleanup_udev_device_unref_ struct udev_device *dev;
|
||||
|
||||
dev = find_device(udev, argv[optind], NULL);
|
||||
if (dev == NULL) {
|
||||
log_error("unable to open the device '%s'", argv[optind]);
|
||||
return 2;
|
||||
}
|
||||
|
||||
udev_enumerate_add_match_parent(udev_enumerate, dev);
|
||||
}
|
||||
|
||||
switch (device_type) {
|
||||
|
Loading…
Reference in New Issue
Block a user