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

John Smith john.smith at arrows.demon.co.uk
Sun May 6 07:25:46 EDT 2007


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






More information about the linux-mtd mailing list