All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kay Sievers <kay.sievers@vrfy.org>
To: linux-hotplug@vger.kernel.org
Subject: [PATCH] udev - program to query all device attributes to build a rule
Date: Sun, 18 Jan 2004 06:30:50 +0000	[thread overview]
Message-ID: <20040118063050.GA22137@vrfy.org> (raw)

[-- Attachment #1: Type: text/plain, Size: 1739 bytes --]

Hi,
here is a small program to query all attributes of a device and
print these in the udev key format. It may help to get the keys to
define a rule.

thanks,
Kay


USB Flash Reader:

    kay@pim:~/src/udev.kay/extras/udevinfo$ ./udevinfo /sys/block/sda/sda3
    device '/sys/block/sda/sda3' has major:minor 8:3

    looking at class device '/sys/block/sda/sda3':
      SYSFS_dev="8:3"
      SYSFS_start="384"
      SYSFS_size="192"
      SYSFS_stat="       0        0        0        0"

    follow class device's "device" link '/sys/block/sda':
      BUS="scsi"
      ID="56:0:0:0"
      SYSFS_dev="8:0"
      SYSFS_range="16"
      SYSFS_size="31360"
      SYSFS_stat="      12        0       96       88        0        0 0        0        0       88       88"


Or the USB Webcam:

    kay@pim:~/src/udev.kay/extras/udevinfo$ ./udevinfo /sys/class/video4linux/video0/
    device '/sys/class/video4linux/video0' has major:minor 81:0

    looking at class device '/sys/class/video4linux/video0':
      SYSFS_dev="81:0"
      SYSFS_name="OV511 USB Camera"
      SYSFS_custom_id="21"
      SYSFS_model="Creative Labs WebCam 3"
      SYSFS_bridge="OV511+"
      SYSFS_sensor="OV7620"
      SYSFS_brightness="105"
      SYSFS_saturation="192"
      SYSFS_contrast="86"
      SYSFS_hue="128"
      SYSFS_exposure="0"

    follow class device's "device" link '/sys/class/video4linux/video0':
      BUS="usb"
      ID="1-1.2"
      SYSFS_dev="81:0"
      SYSFS_name="OV511 USB Camera"
      SYSFS_custom_id="21"
      SYSFS_model="Creative Labs WebCam 3"
      SYSFS_bridge="OV511+"
      SYSFS_sensor="OV7620"
      SYSFS_brightness="105"
      SYSFS_saturation="192"
      SYSFS_contrast="86"
      SYSFS_hue="128"
      SYSFS_exposure="0"


[-- Attachment #2: 03-udevinfo.patch --]
[-- Type: text/plain, Size: 4141 bytes --]

diff -Nru a/extras/udevinfo/Makefile b/extras/udevinfo/Makefile
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/extras/udevinfo/Makefile	Sun Jan 18 07:08:43 2004
@@ -0,0 +1,14 @@
+PROG=udevinfo
+LD=$(CC)
+OBJS=udevinfo.o
+
+all:	$(PROG)
+
+clean:
+	rm -f $(PROG) $(OBJS)
+
+$(PROG):	$(OBJS)
+	$(LD) $(LDFLAGS) -o $(PROG) $(CRT0) $(OBJS) $(SYSFS)
+
+me:
+	cd ../..; make EXTRAS=extras/udevinfo
diff -Nru a/extras/udevinfo/udevinfo.c b/extras/udevinfo/udevinfo.c
--- /dev/null	Wed Dec 31 16:00:00 1969
+++ b/extras/udevinfo/udevinfo.c	Sun Jan 18 07:08:43 2004
@@ -0,0 +1,133 @@
+/*
+ * udevinfo - fetches attributes for a device
+ *
+ * Copyright (C) 2004 Kay Sievers <kay.sievers@vrfy.org>
+ *
+ *
+ *	This program is free software; you can redistribute it and/or modify it
+ *	under the terms of the GNU General Public License as published by the
+ *	Free Software Foundation version 2 of the License.
+ * 
+ *	This program is distributed in the hope that it will be useful, but
+ *	WITHOUT ANY WARRANTY; without even the implied warranty of
+ *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ *	General Public License for more details.
+ * 
+ *	You should have received a copy of the GNU General Public License along
+ *	with this program; if not, write to the Free Software Foundation, Inc.,
+ *	675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "libsysfs.h"
+
+
+# define VALUE_SIZE 100
+
+char **main_argv;
+char **main_envp;
+
+static int print_all_attributes(char *path)
+{
+	struct dlist *attributes;
+	struct sysfs_attribute *attr;
+	struct sysfs_directory *sysfs_dir;
+	char value[VALUE_SIZE];
+	int len;
+	int retval = 0;
+
+	sysfs_dir = sysfs_open_directory(path);
+	if (sysfs_dir == NULL)
+		return -1;
+
+	attributes = sysfs_get_dir_attributes(sysfs_dir);
+	if (attributes == NULL) {
+		retval = -1;
+		goto exit;
+	}
+
+	dlist_for_each_data(attributes, attr, struct sysfs_attribute) {
+		if (attr->value != NULL) {
+			strncpy(value, attr->value, VALUE_SIZE);
+			len = strlen(value);
+			if (value[len-1] == '\n')
+				value[len-1] = '\0';
+			printf("  SYSFS_%s=\"%s\"\n", attr->name, value);
+		}
+	}
+	printf("\n");
+
+exit:
+	sysfs_close_directory(sysfs_dir);
+
+	return retval;
+}
+
+int main(int argc, char **argv, char **envp)
+{
+	main_argv = argv;
+	main_envp = envp;
+	struct sysfs_class_device *class_dev;
+	struct sysfs_class_device *class_dev_parent;
+	struct sysfs_attribute *attr;
+	struct sysfs_device *sysfs_device;
+	char *path;
+	int retval = 0;
+
+	if (argc != 2) {
+		printf("Usage: udevinfo <sysfs_device_path>\n");
+		return -1;
+	}
+	path = argv[1];
+
+	/*  get the class dev */
+	class_dev = sysfs_open_class_device_path(path);
+	if (class_dev == NULL) {
+		printf("couldn't get the class device\n");
+		return -1;
+	}
+
+	/* read the 'dev' file for major/minor*/
+	attr = sysfs_get_classdev_attr(class_dev, "dev");
+	if (attr == NULL) {
+		printf("couldn't get the \"dev\" file\n");
+		retval = -1;
+		goto exit;
+	}
+	printf("\ndevice '%s' has major:minor %s\n\n", class_dev->path, attr->value);
+	sysfs_close_attribute(attr);
+
+	/* open sysfs class device directory and print all attributes */
+	printf("looking at class device '%s':\n", class_dev->path);
+	if (print_all_attributes(class_dev->path) != 0) {
+		printf("couldn't open class device directory\n");
+		retval = -1;
+		goto exit;
+	}
+
+	/* get the device (if parent exists use it instead) */
+	class_dev_parent = sysfs_get_classdev_parent(class_dev);
+	if (class_dev_parent != NULL) {
+		//sysfs_close_class_device(class_dev);
+		class_dev = class_dev_parent;
+	}
+	sysfs_device = sysfs_get_classdev_device(class_dev);
+	if (sysfs_device != NULL) {
+		printf("follow class device's \"device\" link '%s':\n", class_dev->path);
+		printf("  BUS=\"%s\"\n", sysfs_device->bus);
+		printf("  ID=\"%s\"\n", sysfs_device->bus_id);
+
+		/* open sysfs device directory and print all attributes */
+		print_all_attributes(class_dev->path);
+
+		sysfs_close_device(sysfs_device);
+	}
+
+exit:
+	//sysfs_close_class_device(class_dev);
+	return retval;
+}

             reply	other threads:[~2004-01-18  6:30 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-01-18  6:30 Kay Sievers [this message]
2004-01-18 13:59 ` [PATCH] udev - program to query all device attributes to build a rule Kay Sievers
2004-01-19 19:47 ` Greg KH
2004-01-20 14:07 ` Olaf Hering

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20040118063050.GA22137@vrfy.org \
    --to=kay.sievers@vrfy.org \
    --cc=linux-hotplug@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.