Skip to contentSkip to conversation

register mtdchar devices in sysfs

DISCUSSION Andre Puschmann 2 participants 3 messages Apr 27, 2006 – Apr 28, 2006 Memory technology devices (MTD)

lore
Share & tools
lore
#0 lore raw

hi folks,
i am trying to get mtdchar devices to work with sysfs + udev.
my goal is that every mtd-partition gets a device attribute called partname which i can use in my udev-rules to give them explicit names like /dev/filesystem or /dev/kernel (instead of /dev/mtd0 and /dev/mtd1 in case that they change their order on the flash device). to do so i modified mdrchar.c a little bit to add a attribute "partname" in every specific sysfs-folder.
well, this is working so far with a dummy entry "partname" but how can i get the specific partition name stored in "struct mtd_info*" out of "struct class_device" to set it correctly in read_partname()???

thank you in advance

regards
andré

my code looks like this:
<code>
static ssize_t read_partname( struct class_device *cd, char *buf)

{
	return snprintf(buf, 265, "%s\n", "partname");
}

static CLASS_DEVICE_ATTR( partname, S_IRUGO, read_partname, NULL );

static void mtd_notify_add(struct mtd_info* mtd)

{
	struct class_device *class_dev;

	if (!mtd)
		return;

	class_dev = class_device_create(mtd_class, NULL, 					 
MKDEV(MTD_CHAR_MAJOR, mtd->index*2),
			NULL, "mtd%d", mtd->index);
	if (!class_dev)
		return;

	class_device_create_file(class_dev,&class_device_attr_partname);

	class_device_create(mtd_class, NULL,
			    MKDEV(MTD_CHAR_MAJOR, mtd->index*2+1),
			    NULL, "mtd%dro", mtd->index);

}
</code>

#1 lore raw
Quoted 11 lines · Andre Puschmann

hi folks,
i am trying to get mtdchar devices to work with sysfs + udev. my goal is that every mtd-partition gets a device attribute called partname which i can use in my udev-rules to give them explicit names like /dev/filesystem or /dev/kernel (instead of /dev/mtd0 and /dev/mtd1 in case that they change their order on the flash device). to do so i modified mdrchar.c a little bit to add a attribute "partname" in every specific sysfs-folder.
well, this is working so far with a dummy entry "partname" but how can i get the specific partition name stored in "struct mtd_info*" out of "struct class_device" to set it correctly in read_partname()???

I wonder, why mtd->name is not suitable?

Signature · 3 lines
Best Regards,
Artem B. Bityutskiy,
St.-Petersburg, Russia.
#2 lore raw
In reply to Andre Puschmann
Quoted 11 lines · Andre Puschmann

hi folks,
i am trying to get mtdchar devices to work with sysfs + udev. my goal is that every mtd-partition gets a device attribute called partname which i can use in my udev-rules to give them explicit names like /dev/filesystem or /dev/kernel (instead of /dev/mtd0 and /dev/mtd1 in case that they change their order on the flash device). to do so i modified mdrchar.c a little bit to add a attribute "partname" in every specific sysfs-folder.
well, this is working so far with a dummy entry "partname" but how can i get the specific partition name stored in "struct mtd_info*" out of "struct class_device" to set it correctly in read_partname()???

You have to embed struct class_device to mtd_info and use constructor_of(). Read LDD3. LDD3 does not contain much information about the class_device stuff, but the techniques used in "struct device" stuff are the same.

Why don't you use the "struct device/device_driver/bus" stuff which would be natural?

Signature · 3 lines
Best Regards,
Artem B. Bityutskiy,
St.-Petersburg, Russia.