[PATCH] ubiblock: Support UBI volume name or volume ID parameter passing

Ezequiel Garcia ezequiel.garcia at free-electrons.com
Mon Jul 21 13:53:06 PDT 2014


Sorry for the delay on this one.

On 14 Apr 01:42 PM, Artem Bityutskiy wrote:
> On Thu, 2014-04-10 at 11:43 -0300, Ezequiel Garcia wrote:
> > +static int ubi_open_volume_by_id(libubi_t desc, const char *node, int vol_id, int mode)
> >  {
> > +       char file[256];
> > +       struct ubi_dev_info dev_info;
> >         int err, fd;
> > -       libubi_t libubi;
> >  
> > -       err = parse_opt(argc, argv);
> > +       err = ubi_get_dev_info(desc, node, &dev_info);
> >         if (err)
> > +               return errmsg("cannot get information about UBI device \"%s\"", node);
> > +
> > +       sprintf(file, "/dev/ubi%d_%d", dev_info.dev_num, vol_id);
> 
> Device node names may ve anything. Please, do not rely on the "/dev/ubi%
> d_%d" naming scheme in the tool.
> 
> I think device node can be found out by scanning "/dev" and looking at
> the device node major/minor numbers. This is more work of course.
> 

Yeah, but the UBI major is allocated dynamically so we can't rely on that.
We would have to call an ioctl on each /dev device, which seems like a bit
heavy to me.

How about scanning out the sysfs and associate a name to the UBI device
and volume ID?

# ls -la /sys/class/ubi/
total 0
drwxr-xr-x  2 root root    0 Jul 21 20:23 .
drwxr-xr-x 37 root root    0 Jul 21 20:23 ..
lrwxrwxrwx  1 root root    0 Jul 21 20:23 ubi0 -> ../../devices/virtual/ubi/ubi0
lrwxrwxrwx  1 root root    0 Jul 21 20:23 ubi0_0 -> ../../devices/virtual/ubi/ubi0/ubi0_0
lrwxrwxrwx  1 root root    0 Jul 21 20:23 ubi0_1 -> ../../devices/virtual/ubi/ubi0/ubi0_1
lrwxrwxrwx  1 root root    0 Jul 21 20:23 ubi0_2 -> ../../devices/virtual/ubi/ubi0/ubi0_2
lrwxrwxrwx  1 root root    0 Jul 21 20:23 ubi0_3 -> ../../devices/virtual/ubi/ubi0/ubi0_3

Each /sys/class/ubiX_Y/name file can be related to the UBI device ${X},
and UBI volume ID ${Y}.

Based in this idea, we could make some ubifindvol tool that can find
an UBI volume ID from the UBI name.

> However, libubi does exactly the same assumption about UBI volume names
> as you do, so if you move this function to libubi, I think it will be
> good enough. At least if someone wants to change this in the future,
> then it will only require changing the library, but not its users.
> 
-- 
Ezequiel García, Free Electrons
Embedded Linux, Kernel and Android Engineering
http://free-electrons.com



More information about the linux-mtd mailing list