kernel command line arguments for block2mtd do not work
Ville Herva
vherva at vianova.fi
Wed Jul 5 03:13:40 EDT 2006
On Wed, Jul 05, 2006 at 10:05:10AM +0300, you [Ville Herva] wrote:
> On Wed, Jul 05, 2006 at 10:52:15AM +0400, you [Artem B. Bityutskiy] wrote:
> > On Tue, 2006-07-04 at 17:38 +0300, Ville Herva wrote:
> > > For the rough idea, see
> > > http://iki.fi/v/tmp/block2mtd.c
> > > (Sorry for the ugliness - it's just a workaround hack.)
> >
> > Hello,
> >
> > I'd suggest you to just send a patch. See "Patch submission" at
> > http://www.linux-mtd.infradead.org/source.html
>
> I don't think any of the ideas I listed to "fix" the problem are
> satisfactory. They all run into the same dead-end of not having access to
> the rootfs when parsing the arguments, and hence, not being able to open the
> underlying blockdev.
>
> These days the kernel afaik does not have builtin
> device name -> device number mapping (I think it used to - for rootfs
> device mounting - but isn't that gone?). The device we are mounting might be
> the rootfs, so /dev is not present. Hence,
> open_bdev_excl(devname, O_RDWR, NULL);
> can't succeed.
>
> What I _was_ able to do (see http://iki.fi/v/tmp/block2mtd.c) is to move the
> argument parsing later in boot process - it doesn't fail anymore, but that
> doesn't help much, since the device can't be opened. This means the error
> message is much more helpful (and it won't crash), but is it worth it?
Wait a minute, should I use init/do_mounts.c::name_to_dev_t() ?
/* Convert a name into device number. We accept the following
* variants:
*
* 1) device number in hexadecimal represents itself
* 2) /dev/nfs represents Root_NFS (0xff)
* 3) /dev/<disk_name> represents the device number of disk
* 4) /dev/<disk_name><decimal> represents the device number
* of partition - device number of disk plus the partition number
* 5) /dev/<disk_name>p<decimal> - same as the above, that form is
* used when disk name of partitioned disk ends on a digit.
*/
dev_t name_to_dev_t(char *name)
That might work... Even if you can't pass a normal device name in, you could
specify device number.
So something like
block2mtd.c::add_device()
bdev = open_bdev_excl(devname, O_RDWR, NULL);
if (!bdev) {
dev_t dev = name_to_dev_t(devname);
if (dev != 0) {
bdev = open_by_devnum(dev, FMODE_WRITE | FMODE_READ);
}
}
?
What do you think?
-- v --
v at iki.fi
More information about the linux-mtd
mailing list