Skip to contentSkip to conversation

Adding -N volume name to ubi utils

DISCUSSION Richard Titmuss 3 participants 3 messages Nov 24, 2008 – Dec 2, 2008 Memory technology devices (MTD)

lore
Share & tools
lore
#0 lore raw

Hi,

I am trying to modify the ubi tools in mtd_utils to allow the ubi volume name to be specified on the command line, the relevant commands are ubinfo, ubirmvol and ubiupdatevol. The idea is that you could use any of the following command arguments to specify a ubi volume:

ubirmvol /dev/ubi0 -N rootfs # ubi device node and volume name
ubirmvol /dev/ubi0 -n 1 # ubi device node and volume id
ubirmvol /dev/ubi0_1 # ubi volume node

Other than consistency the main feature this adds is support for using -N to specify the volume by name to all the commands.

The problem is these commands need different information to work:
- ubinfo loads information from the /sys file system, it's easy to support for all the above command arguments.
- ubirmvol needs a ubi device node and a volume id, how can this work if a volume node is specified?
- ubiupdatevol needs a ubi volume node, how can this work if a device node is specified?

So my questions is how can the appropriate device node be generated by these commands if it is not specified on the command line. It would be possible to use something like:
sprintf(node, "/dev/ubi%d_%d", args.devn, args.vol_id);

However I don't think that hard coding the /dev path is an acceptable solution, and assume that's why the -d (device number) argument was deprecated. Does anyone have any suggestions on a better solution?

Thanks,
Richard

#1 lore raw
Quoted 17 lines · Richard Titmuss

I am trying to modify the ubi tools in mtd_utils to allow the ubi volume name to be specified on the command line, the relevant commands are ubinfo, ubirmvol and ubiupdatevol. The idea is that you could use any of the following command arguments to specify a ubi volume:

ubirmvol /dev/ubi0 -N rootfs # ubi device node and volume name
ubirmvol /dev/ubi0 -n 1 # ubi device node and volume id
ubirmvol /dev/ubi0_1 # ubi volume node

Other than consistency the main feature this adds is support for using -N to specify the volume by name to all the commands.

The problem is these commands need different information to work:
- ubinfo loads information from the /sys file system, it's easy to support for all the above command arguments.
- ubirmvol needs a ubi device node and a volume id, how can this work if a volume node is specified?
- ubiupdatevol needs a ubi volume node, how can this work if a device node is specified?

Quoted 4 lines

So my questions is how can the appropriate device node be generated by these commands if it is not specified on the command line. It would be possible to use something like:
sprintf(node, "/dev/ubi%d_%d", args.devn, args.vol_id);

However I don't think that hard coding the /dev path is an acceptable solution, and assume that's why the -d (device number) argument was deprecated. Does anyone have any suggestions on a better solution?

In principle, you should use udev rules to create device nodes that are easy to work with e.g.

/dev/ubi/rootfs/vol
/dev/ubi/rootfs/dev

so then you can make a script say ubirmvolbyname

#!/bin/sh
ubirmvol /dev/ubi/$1/dev -N $1

#2 lore raw
In reply to Richard Titmuss

Hi,

Quoted 7 lines · Richard Titmuss

I am trying to modify the ubi tools in mtd_utils to allow the ubi volume name to be specified on the command line, the relevant commands are ubinfo, ubirmvol and ubiupdatevol. The idea is that you could use any of the following command arguments to specify a ubi volume:

ubirmvol /dev/ubi0 -N rootfs # ubi device node and volume name
ubirmvol /dev/ubi0 -n 1 # ubi device node and volume id

Looks OK.

Quoted 1 line

ubirmvol /dev/ubi0_1 # ubi volume node

Probably also fine.

Quoted 2 lines

Other than consistency the main feature this adds is support for using -N to specify the volume by name to all the commands.

Right.

Quoted 3 lines

The problem is these commands need different information to work:
- ubinfo loads information from the /sys file system, it's easy to support for all the above command arguments.

Yes.

Quoted 2 lines

- ubirmvol needs a ubi device node and a volume id, how can this work if a volume node is specified?

sysfs contains all the information. Character device gives you major:minor. UBI _devices_ always have minor=0. So you can distinguish between UBI volume/device chdev nodes. And you may look into all

/sys/class/ubi/ubiX/ubiX_Y/dev

and find the volume. Then you have all the information.

Quoted 2 lines

- ubiupdatevol needs a ubi volume node, how can this work if a device node is specified?

Similarly. Add corresponding scanning functions to libubi (mtd-utils/ubi-utils/new-utils/src/libubi.c).

Signature · 2 lines
Best regards,
Artem Bityutskiy (Битюцкий Артём)