Jffs2

From Openmoko

(Difference between revisions)
Jump to: navigation, search
(How to mount jffs2 image - worked on my fc8 machine 'out of the box')
 
(Restoring losetup method, as it is the only way to modify the jffs2 image.)
 
(4 intermediate revisions by 4 users not shown)
Line 1: Line 1:
== Mounting a JFFS2 image ==
+
=== Using a loopback device ===
 +
This method of mounting a jffs2 image file allows you to make modifications to the mounted filesystem, which will take effect in the file itself.
 +
<pre>
 +
#!/bin/bash
 +
if [[ $# != 2 ]] || [[ ! -e "$1" ]] || [[ ! -d "$2" ]]
 +
then echo Usage: $0 image.jffs2 directory
 +
    exit 2
 +
fi
 +
lodev=$(sudo losetup -f)  # Find unused loop device
 +
mtnum=0
 +
mtdev=mtdblock$mtnum
 +
# If we have udev, the mtd device appears automatically.  Otherwise, create it:
 +
# [[ -b "/dev/$mtdev" ]] || sudo mknod "/dev/$mtdev" b 31 $mtnum
 +
sudo losetup "$lodev" "$1"  # Associate the loop device with the image file
 +
sudo modprobe block2mtd
 +
echo "$lodev" | sudo tee /sys/module/block2mtd/parameters/block2mtd
 +
sudo mount -t jffs2 "/dev/$mtdev" "$2"
 +
</pre>
 +
To reset everything later, assuming "loop0" was used with mountpoint "mymount":
 +
sudo umount mymount
 +
sudo rmmod block2mtd
 +
sudo losetup -d /dev/loop0
  
Make the MTD block device
+
=== Using mtdram ===
  mknod /dev/mtdblock0 b 31 0
+
An alternative way is used in the following script. Any modifications made in this mount will have no effect on the file itself.
  
Associate the jffs2 file with a loopback device
+
if test `id -u` != 0
  losetup /dev/loop0 /path/to/jffs2/file/eg/Om200Y.MM-gtaNN-YYYYMMDD.rootfs.jffs2
+
then echo "Must be root"; exit 2
 +
fi
 +
if test $# != 2 -o ! -d "$2"
 +
then echo Usage: $0 image.jffs2 directory; exit 2
 +
  fi
 +
rmmod mtdram
 +
modprobe mtdcore
 +
modprobe mtdblock
 +
modprobe mtdchar
 +
modprobe jffs2
 +
s=$(ls -s "$1")
 +
s=${s% *}
 +
echo modprobe mtdram total_size=$s
 +
modprobe mtdram total_size=$s
 +
dd if="$1" of=/dev/mtd0
 +
mount -t jffs2 /dev/mtdblock0 "$2"
  
Load the block2mtd module
+
To reset this, simply
  modprobe block2mtd
+
  umount mymount
 
+
  rmmod mtdram
Tell the module which loopback device to use
+
[[Category:Advanced End User]]
  echo /dev/loop0 >/sys/module/block2mtd/parameters/block2mtd
+
 
+
Make a mount point for the file system
+
mkdir /mnt/jffs2
+
 
+
Mount the file system
+
mount -t jffs2 /dev/mtdblock0 /mnt/jffs2/
+

Latest revision as of 05:18, 5 June 2010

[edit] Using a loopback device

This method of mounting a jffs2 image file allows you to make modifications to the mounted filesystem, which will take effect in the file itself.

#!/bin/bash
if [[ $# != 2 ]] || [[ ! -e "$1" ]] || [[ ! -d "$2" ]]
then echo Usage: $0 image.jffs2 directory
     exit 2
fi
lodev=$(sudo losetup -f)  # Find unused loop device
mtnum=0
mtdev=mtdblock$mtnum
# If we have udev, the mtd device appears automatically.  Otherwise, create it:
# [[ -b "/dev/$mtdev" ]] || sudo mknod "/dev/$mtdev" b 31 $mtnum
sudo losetup "$lodev" "$1"  # Associate the loop device with the image file
sudo modprobe block2mtd
echo "$lodev" | sudo tee /sys/module/block2mtd/parameters/block2mtd
sudo mount -t jffs2 "/dev/$mtdev" "$2"

To reset everything later, assuming "loop0" was used with mountpoint "mymount":

sudo umount mymount
sudo rmmod block2mtd
sudo losetup -d /dev/loop0

[edit] Using mtdram

An alternative way is used in the following script. Any modifications made in this mount will have no effect on the file itself.

if test `id -u` != 0
then echo "Must be root"; exit 2
fi
if test $# != 2 -o ! -d "$2"
then echo Usage: $0 image.jffs2 directory; exit 2
fi
rmmod mtdram
modprobe mtdcore
modprobe mtdblock
modprobe mtdchar
modprobe jffs2
s=$(ls -s "$1")
s=${s% *}
echo modprobe mtdram total_size=$s
modprobe mtdram total_size=$s
dd if="$1" of=/dev/mtd0
mount -t jffs2 /dev/mtdblock0 "$2"

To reset this, simply

umount mymount
rmmod mtdram
Personal tools

Mounting a JFFS2 image

Make the MTD block device

mknod /dev/mtdblock0 b 31 0 

Associate the jffs2 file with a loopback device

losetup /dev/loop0 /path/to/jffs2/file/eg/Om200Y.MM-gtaNN-YYYYMMDD.rootfs.jffs2

Load the block2mtd module

modprobe block2mtd 

Tell the module which loopback device to use

echo /dev/loop0 >/sys/module/block2mtd/parameters/block2mtd

Make a mount point for the file system

mkdir /mnt/jffs2

Mount the file system

mount -t jffs2 /dev/mtdblock0 /mnt/jffs2/