mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Rob Landley <rob@landley.net>
To: Jason Lunz <lunz@acm.org>, Denys Vlasenko <vda.linux@googlemail.com>
Cc: dedekind1@gmail.com,
	"richard -rw- weinberger" <richard.weinberger@gmail.com>,
	Sam Ravnborg <sam@ravnborg.org>,
	David Woodhouse <dwmw2@infradead.org>,
	atom ota <atomota@sleepyhammer.com>,
	user-mode-linux-devel@lists.sourceforge.net,
	Jeff Dike <jdike@addtoit.com>,
	lkml <linux-kernel@vger.kernel.org>,
	linux-mtd@lists.infradead.org
Subject: Re: [PATCH] mtd: allow mtd and jffs2 when ARCH=um
Date: Wed, 15 Dec 2010 00:31:18 -0600	[thread overview]
Message-ID: <201012150031.21417.rob@landley.net> (raw)
In-Reply-To: <20101215011904.GA24292@falooley.org>

On Tuesday 14 December 2010 19:19:05 Jason Lunz wrote:
> On Tue, Dec 14, 2010 at 06:49:02PM -0600, Rob Landley wrote:
> > The problem is that jffs2 is a filesystem, and thus something people
> > would really like to be able to loopback mount, but it's hardwired to
> > assume it's only ever stored on a certain type of hardware, and thus
> > requies incestuous knowledge of the erase granularity of the flash layer
> > in order to function.
>
> I assume you can turn your jffs2 image file into a block dev using
> losetup, then turn the corresponding loop device into an mtd device
> using block2mtd, at which point you ought to be able to mount it with
> jffs2. I've never tried it.

That is awesome and I'm not finding any documentation on it...  Ah:

  http://wiki.maemo.org/Modifying_the_root_image#Block_device_emulating_an_MTD_device

Wow that's awkward.  Let's see, that says...

  mknod /tmp/mtdblock0 b 31 0
  modprobe loop
  losetup /dev/loop0 rootfs.jffs2
  modprobe mtdblock
  modprobe block2mtd
  # Note the ,128KiB is needed (on 2.6.26 at least) to set the
  # eraseblock  size.
  echo "/dev/loop0,128KiB" > /sys/module/block2mtd/parameters/block2mtd
  modprobe jffs2
  mount -t jffs2 /tmp/mtdblock0 /media/jffs2

So the system isn't automatically loading mtdblock, udev isn't creating any 
/dev nodes for it even thought it is for loop, the associations are created by 
writing strings into a filesystem with a _notoriously_ unstable API (and it 
expects a three letter mixed case suffix to specify units), and despite 
"mtdblock0" I have no idea how that echo syntax would specify more than one 
association at a time.

I'm trying to figure out whether creating a shell script for this or trying to 
modify the busybox mount command would be a better approach to beating some 
sort of usability out of doing this.

Hmmm, mkfs.jffs2 is named as a mkfs but acts a a generator ala genext2fs.  How 
about...

  mkdir empty
  mkfs.jffs2 -r empty -o rootfs.jffs2 -e 128 -l -n

And it created an empty (zero byte) file.  That's nice.  If I touch a file in 
"empty" now 116 bytes.  Adding -p makes it one erase block, but adding "-p 
2048" doesn't specify a multiple of the erase block size, it instead rounded 
rounded it _down_ to that many bytes.  But --pad=$((2048*1024*1024)) was 
apparently ignored...?  How do I specify a _size_ for this thing so it has 
empty space I can write into after the fact?  (The man page says pad with 
0xFF.  Am I going to have to do this by hand?)

  mkdir empty
  touch empty/hello
  mkfs.jffs2 -r empty -o temp.jffs2 -e 128 -l -n -p
  python -c "import sys; sys.stdout.write(131072*63*chr(0xff))" >> temp.jffs2
  losetup /dev/loop0 temp.jffs2
  echo "/dev/loop0,128KiB" > /sys/module/block2mtd/parameters/block2mtd
  mount -t jffs2 mtdblock0 empty

Yay!  I have a filesystem!  And df claims it's 8 megabytes.

Woot.

> > What any of this has to do with UML is an open question.  I don't want to
> > require UML to loopback mount a jffs2 image, I want to be able to do it
> > from my host.  From my perspective, you're solving the wrong problem.
>
> There's more than just loopback-mounting jffs2 images. I use this to
> make entire uml+jffs2 virtual machines for testing purposes.

As I said, I'm almost exclusively using qemu/kvm these days, but this is 
fun...

> Jason

Rob
-- 
GPLv3: as worthy a successor as The Phantom Menace, as timely as Duke Nukem 
Forever, and as welcome as New Coke.

  reply	other threads:[~2010-12-15  6:31 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <22c797d00709272118i33d32b9dy93d5f5ec8f8edd30@mail.gmail.com>
     [not found] ` <20071024011712.GA3762@falooley.org>
     [not found]   ` <1193208689.26096.48.camel@pmac.infradead.org>
2007-10-24 15:54     ` [PATCH] allow use of mtd and jffs2 on uml Jason Lunz
2007-10-24 16:24       ` atom ota
2007-12-27 18:15     ` Jason Lunz
2007-12-28 17:48       ` Sam Ravnborg
2010-12-07  7:29         ` [PATCH] mtd: allow mtd and jffs2 when ARCH=um Jason Lunz
2010-12-07  9:39           ` richard -rw- weinberger
2010-12-07 18:20             ` Jason Lunz
2010-12-14 16:24               ` Artem Bityutskiy
2010-12-14 19:51                 ` Jason Lunz
2010-12-14 20:01                   ` Artem Bityutskiy
2010-12-14 21:12                     ` Geert Uytterhoeven
2010-12-14 21:23                     ` Jason Lunz
2010-12-15  0:40                       ` Rob Landley
2010-12-15  0:49                     ` Rob Landley
2010-12-15  1:19                       ` Jason Lunz
2010-12-15  6:31                         ` Rob Landley [this message]
2010-12-16 15:18                           ` Artem Bityutskiy
2010-12-18  4:08                             ` Rob Landley
2010-12-19 17:08                               ` Artem Bityutskiy
2010-12-15  8:18                         ` Geert Uytterhoeven
2010-12-16 15:25                   ` Artem Bityutskiy
2010-12-16 22:01                   ` Anatolij Gustschin
2010-12-17  4:27                     ` mtd: fix CONFIG_MTD_COMPLEX_MAPPINGS=n compile Jason Lunz
2010-12-19 16:47                       ` Artem Bityutskiy
2010-12-19 19:07                         ` Jason Lunz
2010-12-20 11:23                           ` Artem Bityutskiy
2010-12-20 14:04                             ` [PATCH] mtd: allow mtd and jffs2 when ARCH=um Jason Lunz
2010-12-22 14:40                               ` Artem Bityutskiy
2011-01-06 15:45                   ` David Woodhouse

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201012150031.21417.rob@landley.net \
    --to=rob@landley.net \
    --cc=atomota@sleepyhammer.com \
    --cc=dedekind1@gmail.com \
    --cc=dwmw2@infradead.org \
    --cc=jdike@addtoit.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=lunz@acm.org \
    --cc=richard.weinberger@gmail.com \
    --cc=sam@ravnborg.org \
    --cc=user-mode-linux-devel@lists.sourceforge.net \
    --cc=vda.linux@googlemail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome