View source for Userspace root image
From Openmoko
You do not have permission to edit this page, for the following reasons:
You can view and copy the source of this page:
Template used on this page:
Return to Userspace root image.
You do not have permission to edit this page, for the following reasons:
You can view and copy the source of this page:
Template used on this page:
Return to Userspace root image.
To create a root file system image for storage in NAND flash, we use the mkfs.jffs2 program contained in the Debian package mtd-tools.
mkfs.jffs2 --pad=0x700000 -o rootfs.jffs2 -e 0x4000 -n -d/tmp/jffsroot/
is a typical command. It creates a FS image for our erase block size of 16k, padded to 0x700000 bytes in length from the files contained in the /tmp/jffsroot directory and stores the FS image in rootfs.jffs2.
See Repositories and update the list if you have more information.
OpenEmbedded will itself create a jffs2 image at the end of the build process.
Once the build server is running, it will create root filesystem images for us.
Check the Flashing openmoko page for pre-built root images. Please note that this image may take long to boot the first time, since this boot finishes the installation process.
For a 2.6.25 kernel:
losetup is an application to manage loop devices, if you have the "losetup -f" option (for instance debian etch do not has such option) you can use the following commands:
export loop=$(losetup -f) losetup $loop <rootfs.jffs2> modprobe block2mtd block2mtd=$loop,131072 modprobe jffs2 modprobe mtdblock mkdir <mountpoint> mount -t jffs2 -o ro /dev/mtdblock0 <mountpoint>
"losetup -f" just returns the first unused loop device, if your system do not comes with "loosetup -f" just chose the first /dev/loop* device that is unused and change the first line with:
export loop=/dev/loop0
if loop0 is unused
Based on this script by fanoush.
The following is an alternate way of doing the above.
modprobe mtdcore modprobe jffs2 modprobe mtdram total_size=59024 # default is 4 MByte - set to max. available size modprobe mtdchar modprobe mtdblock dd if=<rootfs.jffs2> of=/dev/mtd0 mount -t jffs2 /dev/mtdblock0 <mountpoint>
As mounting the JFFS2 image from /dev/loop0 device is not supported, use the mtdram device as described in http://www.handhelds.org/hypermail/familiar/62/6232.html
(On Fedora the first module to load is mtd, not mtdcore and you need to set e.g. vmalloc=256m as a kernel boot parameter for this to work.)
modprobe mtdcore modprobe jffs2 modprobe mtdram total_size=59024 # default is 4 MByte - set to max. available size modprobe mtdchar modprobe mtdblock
Using total_size=59024 will set the filesystem size to the available space on /dev/mtd4 of the GTA1 device. So when you copy the image back it will be about 58 MB. You can set this to smaller values though.
Be careful to really use the mtd-ram-disk (maybe there is a real Flash-device somewhere in your development system)
So check for that looking into /proc/mtd:
cat /proc/mtd # dev: size erasesize name # mtd0: 039a4000 00020000 "mtdram test device"
Then write the image to that device and mount it:
dd if=<rootfs.jffs2> of=/dev/mtd0 mount -t jffs2 /dev/mtdblock0 <mountpoint>
The image is an Little Endian jffs2 image. To mount it on Big Endian architectures (like PowerPC) it'll have to be converted:
jffs2dump -l -c -e <rootfs.jffs2.be> <rootfs.jffs2> # only needed on non little endian archs
To get the changed image back there are two ways. The obvious one is to unmount it and copy the data back from the MTD block device (the image will be 58 MB):
umount /dev/mtdblock0 dd if=/dev/mtdblock0 of=<rootfs.jffs2>
You can also create a new image using the mounted file system and the method described above (the image will have the size of its data):
mkfs.jffs2 --pad=0x700000 -o new_rootfs.jffs2 -e 0x4000 -n -d <mountpoint>
See U-boot#Writing_rootfs_to_NAND
The techniques on this page may be used to convert a GTA02 (Freerunner) image for use on a GTA01, provided that it is small enough to fit into the GTA01's flash.
The steps I used are shown below (corrections welcome). Please read all of this page before executing these commands, in particular the warning to make sure that /dev/mtd0 does not map to a real flash device on your system.
modprobe jffs2 modprobe mtdchar modprobe mtdblock modprobe mtdram erase_size=128 total_size=262144 dd if=gta02_image.jffs2 of=/dev/mtd0 mount -t jffs2 -o ro /dev/mtdblock0 /mnt mkfs.jffs2 --little-endian -e 16 -x lzo --pad -n -r /mnt -o for_gta01.jffs2
To clean up when you're done:
umount /mnt rmmod mtdram
![]() |
Languages: |
English • العربية • Български • Česky • Dansk • Deutsch • Esperanto • Eesti • Español • فارسی • Suomi • Français • עברית • Magyar • Italiano • 한국어 • Nederlands • Norsk (bokmål) • Polski • Português • Română • Русский • Svenska • Slovenčina • Українська • 中文(中国大陆) • 中文(台灣) • Euskara • Català |