mirror of
https://github.com/systemd/systemd.git
synced 2025-03-19 22:50:17 +03:00
[PATCH] add sysfs info walk to udevinfo
The option "-s" will get information about the major/minor, the physical device, the bus value and the driver from sysfs for all class and block devices: kay@pim udev.kay]$ ./udevinfo -s DEVPATH '/sys/block/sda' SUBSYSTEM 'block' NAME 'sda' MAJORMINOR '8:0' PHYSDEVPATH '/sys/devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3:1.0/host2/target2:0:0/2:0:0:0' PHYSDEVPATHBUS 'scsi' DRIVER 'sd' DEVPATH '/sys/class/input/mice' SUBSYSTEM 'input' NAME 'mice' MAJORMINOR '13:63' DEVPATH '/sys/class/input/mouse0' SUBSYSTEM 'input' NAME 'mouse0' MAJORMINOR '13:32' ...
This commit is contained in:
parent
4a231017ff
commit
f156b6d203
@ -46,6 +46,10 @@ attributes along the device chain. Useful for finding
|
||||
unique attributes to compose a rule.
|
||||
.RB Needs " \-p " specified.
|
||||
.TP
|
||||
.B \-s
|
||||
Print all sysfs devices with the major/minor number, the physical device and
|
||||
the bus value.
|
||||
.TP
|
||||
.B \-h
|
||||
Print help text.
|
||||
.SH "FILES"
|
||||
|
65
udevinfo.c
65
udevinfo.c
@ -197,9 +197,67 @@ exit:
|
||||
return retval;
|
||||
}
|
||||
|
||||
/* print all class/block devices with major/minor, physical device and bus*/
|
||||
static void print_sysfs_devices(void)
|
||||
{
|
||||
struct dlist *subsyslist;
|
||||
char *class;
|
||||
|
||||
subsyslist = sysfs_open_subsystem_list("class");
|
||||
if (!subsyslist)
|
||||
exit(1);
|
||||
|
||||
dlist_for_each_data(subsyslist, class, char) {
|
||||
struct sysfs_class *cls;
|
||||
struct dlist *class_devices;
|
||||
struct sysfs_class_device *class_dev;
|
||||
struct sysfs_device *phys_dev;
|
||||
|
||||
cls = sysfs_open_class(class);
|
||||
if (!cls)
|
||||
continue;
|
||||
|
||||
class_devices = sysfs_get_class_devices(cls);
|
||||
if (!class_devices)
|
||||
continue;
|
||||
|
||||
dlist_for_each_data(class_devices, class_dev, struct sysfs_class_device) {
|
||||
struct sysfs_attribute *attr;
|
||||
|
||||
printf("\n");
|
||||
printf("DEVPATH '%s'\n", class_dev->path);
|
||||
printf("SUBSYSTEM '%s'\n", class_dev->classname);
|
||||
printf("NAME '%s'\n", class_dev->name);
|
||||
|
||||
attr = sysfs_get_classdev_attr(class_dev, "dev");
|
||||
if (attr) {
|
||||
char *pos = &(attr->value[strlen(attr->value)-1]);
|
||||
|
||||
if (pos[0] == '\n')
|
||||
pos[0] = '\0';
|
||||
|
||||
printf("MAJORMINOR '%s'\n", attr->value);
|
||||
}
|
||||
|
||||
phys_dev = sysfs_get_classdev_device(class_dev);
|
||||
if (phys_dev) {
|
||||
printf("PHYSDEVPATH '%s'\n", phys_dev->path);
|
||||
if (phys_dev->bus[0] != '\0')
|
||||
printf("PHYSDEVPATHBUS '%s'\n", phys_dev->bus);
|
||||
if (phys_dev->driver_name[0] != '\0')
|
||||
printf("DRIVER '%s'\n", phys_dev->driver_name);
|
||||
}
|
||||
}
|
||||
|
||||
sysfs_close_class(cls);
|
||||
}
|
||||
|
||||
sysfs_close_list(subsyslist);
|
||||
}
|
||||
|
||||
static int process_options(void)
|
||||
{
|
||||
static const char short_options[] = "adn:p:q:rVh";
|
||||
static const char short_options[] = "adn:p:q:rsVh";
|
||||
int option;
|
||||
int retval = 1;
|
||||
struct udevice udev;
|
||||
@ -260,6 +318,10 @@ static int process_options(void)
|
||||
root = 1;
|
||||
break;
|
||||
|
||||
case 's':
|
||||
print_sysfs_devices();
|
||||
exit(0);
|
||||
|
||||
case 'a':
|
||||
attributes = 1;
|
||||
break;
|
||||
@ -391,6 +453,7 @@ help:
|
||||
"\n"
|
||||
" -r print udev root\n"
|
||||
" -a print all SYSFS_attributes along the device chain\n"
|
||||
" -s print all sysfs devices with major/minor, physical device and bus\n"
|
||||
" -V print udev version\n"
|
||||
" -h print this help text\n"
|
||||
"\n");
|
||||
|
Loading…
x
Reference in New Issue
Block a user