Editing Modifying the root image
Warning: You are not logged in.
Your IP address will be recorded in this page's edit history.
The edit can be undone.
Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 1: | Line 1: | ||
- | This article describes two methods for extending and modifying an existing tablet JFFS2 root image | + | This article describes two methods for extending and modifying an existing tablet JFFS2 root image. |
== Background == | == Background == | ||
Line 58: | Line 58: | ||
Or use the [[#Shell_script_to_mount/unmount_JFFS2_using_block_device_emulating_MTD|automated shell script]]. | Or use the [[#Shell_script_to_mount/unmount_JFFS2_using_block_device_emulating_MTD|automated shell script]]. | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
=== Kernel memory emulating an MTD device === | === Kernel memory emulating an MTD device === | ||
Note that mtdram requires 88mb of raw ram on a 2gb system to mount a ~2Mb initfs image [Faheem Pervez on -dev ml], it probably won't work well with a rootfs! | Note that mtdram requires 88mb of raw ram on a 2gb system to mount a ~2Mb initfs image [Faheem Pervez on -dev ml], it probably won't work well with a rootfs! | ||
- | |||
- | |||
However, if you insist... to mount the JFFS2 image, you perform the following steps: | However, if you insist... to mount the JFFS2 image, you perform the following steps: | ||
Line 103: | Line 93: | ||
== Repacking the image == | == Repacking the image == | ||
- | [http://maemo.org/development/documentation/ | + | [http://maemo.org/development/documentation/how-tos/2-x/howto_use_flasher_rootfs.html Using the flasher utility and creating the reference root file system] |
== Modifying the copy of the image == | == Modifying the copy of the image == | ||
Line 115: | Line 105: | ||
cd $HOME/myRootImage | cd $HOME/myRootImage | ||
tar cvzf $HOME/myNewRootImage.tar.gz . | tar cvzf $HOME/myNewRootImage.tar.gz . | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
== Installing on the tablet == | == Installing on the tablet == | ||
Line 144: | Line 115: | ||
== Shell script to mount/unmount JFFS2 using block device emulating MTD == | == Shell script to mount/unmount JFFS2 using block device emulating MTD == | ||
Create a shell script (mount_jffs2.sh) from the following: | Create a shell script (mount_jffs2.sh) from the following: | ||
- | < | + | <pre> |
- | #!/bin/sh | + | #!/bin/sh |
- | JFFSIMG=$1 # jffs image | + | JFFSIMG=$1 # jffs image |
- | LOOP="/dev/loop1" # loop device | + | LOOP="/dev/loop1" # loop device |
- | MP="/media/jffs2" # mount point | + | MP="/media/jffs2" # mount point |
- | MTDBLOCK="/tmp/mtdblock0" # MTD device file | + | MTDBLOCK="/tmp/mtdblock0" # MTD device file |
- | KVER="2.6" | + | KVER="2.6" |
- | BLKMTD="block2mtd" | + | BLKMTD="block2mtd" |
- | UMNT="" | + | UMNT="" |
- | echo "$0" | grep unmount_ >/dev/null 2>&1 | + | echo "$0" | grep unmount_ >/dev/null 2>&1 |
- | [ $? -eq 0 ] && UMNT=1 | + | [ $? -eq 0 ] && UMNT=1 |
- | if [ $# -gt 1 -a x"$2"x = x"unmount"x ]; then | + | if [ $# -gt 1 -a x"$2"x = x"unmount"x ]; then |
- | + | UMNT=1 | |
- | fi | + | fi |
- | uname -r | egrep '^2\.6' >/dev/null 2>&1 | + | uname -r | egrep '^2\.6' >/dev/null 2>&1 |
- | if [ $? -ne 0 ]; then | + | if [ $? -ne 0 ]; then |
- | + | KVER="2.4" | |
- | + | BLKMTD=blkmtd | |
- | fi | + | fi |
- | if [ x"${UMNT}"x = x""x ]; then | + | if [ x"${UMNT}"x = x""x ]; then |
- | + | if [ ! -b ${MTDBLOCK} ] ; then | |
- | + | mknod ${MTDBLOCK} b 31 0 || exit 1 | |
- | + | fi | |
- | + | lsmod | grep loop >/dev/null 2>&1 | |
- | + | if [ $? -ne 0 [; then | |
- | + | modprobe loop | |
- | + | [ $? -ne 0 ] && echo "loopback loading failed" && exit 1 | |
- | + | sleep 1 | |
- | + | fi | |
- | + | losetup ${LOOP} ${JFFSIMG} || exit 1 | |
- | + | sleep 1 | |
- | + | modprobe mtdblock | |
- | + | if [ x"${KVER}"x = x"2.4"x [; then | |
- | + | modprobe ${BLKMTD} device=${LOOP} || exit 1 | |
- | + | else | |
- | + | modprobe ${BLKMTD} || exit 1 | |
- | + | echo "${LOOP}" > /sys/module/block2mtd/parameters/block2mtd | |
- | + | fi | |
- | + | sleep 1 | |
- | + | modprobe jffs2 | |
- | + | [ ! -d ${MP} ] && mkdir -p ${MP} | |
- | + | mount -t jffs2 ${MTDBLOCK} ${MP} || exit 1 | |
- | else | + | else |
- | + | umount ${MP} | |
- | + | if [ $? -ne 0 ]; then | |
- | + | echo "Cannot unmount JFFS2 at $MP" && exit 1 | |
- | + | fi | |
- | + | modprobe -r jffs2 | |
- | + | modprobe -r ${BLKMTD} | |
- | + | modprobe -r mtdblock | |
- | + | sleep 1 | |
- | + | losetup -d ${LOOP} | |
- | fi | + | fi |
- | </ | + | </pre> |
Make sure you chmod a+x mount_jffs2.sh to make the shell script executable. | Make sure you chmod a+x mount_jffs2.sh to make the shell script executable. | ||
Line 212: | Line 183: | ||
== Shell script to mount/unmount JFFS2 using kernel memory emulating MTD == | == Shell script to mount/unmount JFFS2 using kernel memory emulating MTD == | ||
Create a shell script (mount_jffs2.sh) from the following: | Create a shell script (mount_jffs2.sh) from the following: | ||
- | < | + | <pre> |
- | #!/bin/sh | + | #!/bin/sh |
- | JFFSIMG=$1 # jffs image | + | JFFSIMG=$1 # jffs image |
- | MP="/media/jffs2" # mount point | + | MP="/media/jffs2" # mount point |
- | MTDBLOCK="/tmp/mtdblock0" # MTD device file | + | MTDBLOCK="/tmp/mtdblock0" # MTD device file |
- | UMNT="" | + | UMNT="" |
- | echo "$0" | grep unmount_ >/dev/null 2>&1 | + | echo "$0" | grep unmount_ >/dev/null 2>&1 |
- | [ $? -eq 0 ] && UMNT=1 | + | [ $? -eq 0 ] && UMNT=1 |
- | if [ $# -gt 1 -a x"$2"x = x"unmount"x ]; then | + | if [ $# -gt 1 -a x"$2"x = x"unmount"x ]; then |
- | + | UMNT=1 | |
- | fi | + | fi |
- | if [ x"${UMNT}"x = x""x ]; then | + | if [ x"${UMNT}"x = x""x ]; then |
- | + | if [ ! -b ${MTDBLOCK} ] ; then | |
- | + | mknod ${MTDBLOCK} b 31 0 || exit 1 | |
- | + | fi | |
- | + | modprobe mtdblock | |
- | + | modprobe mtdram total_size=65536 erase_size=256 | |
- | + | modprobe jffs2 | |
- | + | dd if=${JFFSIMG} of=${MTDBLOCK} | |
- | + | [ ! -d ${MP} ] && mkdir -p ${MP} | |
- | + | mount -t jffs2 ${MTDBLOCK} ${MP} | |
- | else | + | else |
- | + | umount ${MP} | |
- | + | if [ $? -ne 0 ]; then | |
- | + | echo "Cannot unmount JFFS2 at $MP" && exit 1 | |
- | + | fi | |
- | + | modprobe -r jffs2 | |
- | + | modprobe -r mtdram | |
- | + | modprobe -r mtdblock | |
- | fi | + | fi |
- | </ | + | </pre> |
Make sure you chmod a+x mount_jffs2.sh to make the shell script executable. | Make sure you chmod a+x mount_jffs2.sh to make the shell script executable. | ||
Line 253: | Line 224: | ||
./mount_jffs2.sh rootfs.jffs2 unmount | ./mount_jffs2.sh rootfs.jffs2 unmount | ||
- | [[Category: | + | |
+ | [[Category:HowTos]] | ||
[[Category:Wiki page of the day]] | [[Category:Wiki page of the day]] |
Learn more about Contributing to the wiki.