UBIFS failure on SheevaPlug Basic

Andreas Bießmann biessmann at corscience.de
Fri Nov 9 07:32:26 EST 2012


Dear Dimax,

On 09.11.2012 12:41, Dimax wrote:
> HI Andreas,
> Thanks for your help. I'm not so advanced in Linux knowledge and will
> ask for deeper explanations. 

all of us started some time ...

> Or more exactly I understand what you
> mean but do not know how to do it.
> Please see below
> 
> On Fri, Nov 9, 2012 at 1:20 PM, Andreas Bießmann
> <biessmann at corscience.de> wrote:
>> Dear Dimax,
>>
>> On 09.11.2012 10:35, Dimax wrote:
>>> 1. Problem Description
>>> ---------------------------------
>>
>> <snip>
>>
>>> Error reading superblock on volume 'ubi:rootfs'!
>>> UBIFS not mounted, use ubifs mount to mount volume first!
>>> UBIFS not mounted, use ubifs mount to mount volume first!
>>> Wrong Image Format for bootm command
>>> ERROR: can't get kernel image!
>>>
>>
>> we discussed that already:
>> http://thread.gmane.org/gmane.comp.boot-loaders.u-boot/145526
>> And a possible solution exists here:
>> http://patchwork.ozlabs.org/patch/195174/
>>
> 
> This is what I'm trying to do. I'm working now on building an u-boot
> image with suggested patch.

Ok

>>> 1.3 Recovery
>>>
>>> 2. Fixing
>>> ======
>>> 2. Make rootfs partition read only
>>
>> No, just use a /boot ro. All you need is kernel and initrd which should
>> be located in /boot. You can use a raw mtd for that too to avoid that
>> ubifs fails (as I understood is your fear).
> 
> Please explain how to get initrd in /boot ?

cp <initrd provided by debian distro> /boot
BTW: debian will install the initrd into /boot

> And what is a row mtd ?

I mean a RAW mtd section. You can access the mtd with tools from
mtd-utils to write raw data on it (without an file system). These data
can you get out of the mtd from u-boot, again without interaction with
an fs.

>> Another alternative is to have two logical ubifs in a physical ubi
>> section. One of them is ro, the other rw mounted.
>>
> How can I arrange it?

You can leave your mtdparts setting in u-boot as is and just create two
different ubifs filesystems in it. Lets call the first one <boot> and
the second one <fs>. So you will end up with these commands (not
checked, please read man page before using them):

% ubiformat -y -q /dev/mtd1
% ubiattach -p /dev/mtd1
% ubimkvol /dev/ubi0 -N boot -s 10MiB
% ubimkvol /dev/ubi0 -N fs -m
% mount -t ubifs ubi0:fs /target
% mkdir /target/boot
% mount -t ubifs ubi0:boot /target/boot
% debootstrap ...

Then configure your /etc/fstab and ensure the /boot is mounted ro
always. Just mount rw for an kernel update and then remount ro right
after the update.

>>> 3. Fix u-boot settings
>>> And here I'm not sure how to do all this.
>>
>> Just provide a correct cmdline so that the kernel knows about your
>> special nand organization. u-boot also want to know that to load the
>> kernel from appropriate position. Read about the mtdpart parameter in
>> u-boot, that should be sufficient for your needs.
>>
> OK
> Will do it
> 
>>> 2.3. u-boot
>>> I assume I should start with changing partitioning in u-boot:
>>> Currently I have
>>> mtdparts mtdparts=orion_nand:0xa0000 at 0x0(u-boot),0x400000 at 0x100000(uImage),0x1fb00000 at 0x500000(rootfs)
>> ---------------------------------^----------------------------^
>>
>> you will waste some space here! BTW did you think about your block size?
>>
> Where exactly?

Well, there is a gap of 0x60000 between u-boot and uImage section.

> I actually do not understand why should I have uImage partition as
> uImage is located now under /boot in rootfs partition as far as I
> understand. But this is what I took from other discussion thread.

Well, as mentioned above you can have a RAW mtd which could hold for
example the uImage.

>>> How to split rootfs into two partitions?
>>
>> You could handle it on a directory basis, just mount /boot from another fs.
>>
> 
> How can I do it?

Just mount /boot as another fs, as described above.

Best regards

Andreas Bießmann



More information about the linux-mtd mailing list