Jffs2
From Openmoko
(Difference between revisions)
(Restoring losetup method, as it is the only way to modify the jffs2 image.) |
|||
| (One intermediate revision by one user not shown) | |||
| Line 1: | Line 1: | ||
| − | |||
=== Using a loopback device === | === 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. | |
| − | mknod /dev/ | + | <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 | ||
| − | + | === 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 | if test `id -u` != 0 | ||
then echo "Must be root"; exit 2 | then echo "Must be root"; exit 2 | ||
fi | fi | ||
| − | if test $# != 2 -o ! -d $2 | + | if test $# != 2 -o ! -d "$2" |
then echo Usage: $0 image.jffs2 directory; exit 2 | then echo Usage: $0 image.jffs2 directory; exit 2 | ||
fi | fi | ||
| Line 33: | Line 36: | ||
modprobe mtdchar | modprobe mtdchar | ||
modprobe jffs2 | modprobe jffs2 | ||
| − | s=$(ls -s $1) | + | s=$(ls -s "$1") |
s=${s% *} | s=${s% *} | ||
echo modprobe mtdram total_size=$s | echo modprobe mtdram total_size=$s | ||
modprobe mtdram total_size=$s | modprobe mtdram total_size=$s | ||
| − | dd if=$1 of=/dev/mtd0 | + | dd if="$1" of=/dev/mtd0 |
| − | mount -t jffs2 /dev/mtdblock0 $2 | + | mount -t jffs2 /dev/mtdblock0 "$2" |
| − | + | ||
| + | To reset this, simply | ||
| + | umount mymount | ||
| + | rmmod mtdram | ||
[[Category:Advanced End User]] | [[Category:Advanced End User]] | ||
Latest revision as of 06: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
