Re: UBI: Can I boot with an UBI volume holding a root file system?

John Smith
2007-05-06T11:26:13Z

Artem Bityutskiy <dedekind <at> infradead.org> writes:

>
> On Fri, 2007-05-04 at 23:42 +0100, John Smith wrote:
> > I am hoping to build a root file system and store it as a squashfs
> > image in a static UBI volume. What command line should I should pass
> > to the kernel at boot time?
> >
> > There are likely to be other UBI volumes in the UBI partition which
> > will each get mapped to a /dev/mtdblock device. Is it going to be
> > difficult to identify the major/minor numbers of the device which will
> > mapped to my squashfs image?
> >
> > I think that I need to add some initramfs logic, but I am very
> > uncertain of the details. I will be grateful for any ideas,
>
> I have never tried this and I guess nobody did. But you may try and send
> us a text to add to faq on MTD site
>

I can make some progress. With a boot line

boot vmlinux "root=31:4 rootfstype=squashfs ubi.mtd=0 ubi.mtd=3"

I can boot the kernel and mount /dev/mtdblock4 as the root file system.
(31,4 are the major and minor numbers of /dev/mtdblock4, which is the mtd
block device mapped to the UBI volume which holds my squashfs image.)

The kernel has logic in the function name_to_dev_t() in file
init/do_mounts.c to convert the string "root=31:4" to the block device.
There is already logic in name_to_dev_t() for handling disks by name.
name_to_dev_t() could be extended to identify mtd partitions by name
so that
root=mtd:my_squashfs_image
returns the mtd block device containing mtd image "my_squashfs_image"

> One thing for you to keep in mind: use proper volume alignment. I am not
> sure what is squashfs block size probably 512 bytes, then use alignment
> 512. In this case you will end up with 512-byte aligned logical
> eraseblocks. this will make your life easier.

I have not done anything explicit about alignment. Have I just been lucky
because my NAND device works in pages of 512 bytes? The squashfs block size is
currently 65536 bytes, though may be the word block is describing a different
concept. Perhaps it would be best to make the squashfs block size the same size
as the UBI logical erase block size.

John