Jffs2
From Openmoko
(Difference between revisions)
(→Using mtdram) |
(Restoring losetup method, as it is the only way to modify the jffs2 image.) |
||
Line 1: | Line 1: | ||
+ | === 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 | ||
+ | |||
=== Using mtdram === | === Using mtdram === | ||
− | An alternative way is used in the following script | + | 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 | ||
Line 19: | Line 43: | ||
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