Difference between revisions of "NAND flash boot rootfs"

From ElphelWiki
Jump to: navigation, search
(Created page with "===Boot from NAND flash=== * The default boot option - power on. * A UBIFS image of rootfs is written to /dev/mtd4 ('''ubi0:elphel393''' in bootargs in the device tree) ====Refla...")
 
Line 1: Line 1:
===Boot from NAND flash===
+
==Boot from NAND flash (rootfs)==
 
* The default boot option - power on.
 
* The default boot option - power on.
* A UBIFS image of rootfs is written to /dev/mtd4 ('''ubi0:elphel393''' in bootargs in the device tree)
+
* A UBIFS image of rootfs is written to /dev/mtd4 ('''ubi0:elphel393''' in bootargs in the device tree) - mounted as '''/'''
====Reflash factory image (update software/firmware or corrupt flash partition) ====
+
 
 +
==Reflash factory image==
 +
===Notes===
 +
* Update software/firmware or corrupt flash partition
 +
* To update u-boot images, device tree and kernel - booting from micro SD card is not required.
 +
* To update rootfs - boot from micro SD card otherwise a mounted flash partition will be rewritten, get corrupt and the camera won't boot - boot from micro SD card and reflash rootfs partition to recover.
 +
* '''boot.bin''', '''u-boot-dtb.img''' - most likely won't need updating at all. Only if their partitions get corrupt
 +
** As Zynq's BootROM performs 32KB jumps within the first 128MiB of flash in the search of a boot.bin header with a correct checksum it is possible to flash a few backup images to the 1st flash partition (mtd0) in the device tree. The partition size is 1MB, boot.bin size is normally around 100KB (<192KB - Zynq OCM requirement)
 +
 
 +
===Instructions===
 
* Use files from '''.../poky/build/tmp/deploy/images/elphel393/nand/'''
 
* Use files from '''.../poky/build/tmp/deploy/images/elphel393/nand/'''
 +
** '''boot.bin'''
 +
** '''u-boot-dtb.img'''
 +
** '''devicetree.dtb'''
 +
** '''uImage'''
 +
** '''rootfs.ubifs'''(<font color='green'>recommended</font>),'''rootfs.ubi'''(<font color='green'>radical</font>)
 
* Copy all of the image files to a micro SD card (or boot first from the card then copy over network)
 
* Copy all of the image files to a micro SD card (or boot first from the card then copy over network)
* Boot from micro SD card.
+
* Boot from micro SD card (<font color='red'>important for rootfs updates</font>)
 
* Reflash what is needed:
 
* Reflash what is needed:
 
** Reflash SPL ('''boot.bin''', /dev/mtd0)
 
** Reflash SPL ('''boot.bin''', /dev/mtd0)

Revision as of 11:17, 9 March 2016

Boot from NAND flash (rootfs)

  • The default boot option - power on.
  • A UBIFS image of rootfs is written to /dev/mtd4 (ubi0:elphel393 in bootargs in the device tree) - mounted as /

Reflash factory image

Notes

  • Update software/firmware or corrupt flash partition
  • To update u-boot images, device tree and kernel - booting from micro SD card is not required.
  • To update rootfs - boot from micro SD card otherwise a mounted flash partition will be rewritten, get corrupt and the camera won't boot - boot from micro SD card and reflash rootfs partition to recover.
  • boot.bin, u-boot-dtb.img - most likely won't need updating at all. Only if their partitions get corrupt
    • As Zynq's BootROM performs 32KB jumps within the first 128MiB of flash in the search of a boot.bin header with a correct checksum it is possible to flash a few backup images to the 1st flash partition (mtd0) in the device tree. The partition size is 1MB, boot.bin size is normally around 100KB (<192KB - Zynq OCM requirement)

Instructions

  • Use files from .../poky/build/tmp/deploy/images/elphel393/nand/
    • boot.bin
    • u-boot-dtb.img
    • devicetree.dtb
    • uImage
    • rootfs.ubifs(recommended),rootfs.ubi(radical)
  • Copy all of the image files to a micro SD card (or boot first from the card then copy over network)
  • Boot from micro SD card (important for rootfs updates)
  • Reflash what is needed:
    • Reflash SPL (boot.bin, /dev/mtd0)

cd <path-to-image-files>
# boot.bin
# mtd0 is 1MB (8 eraseblocks,128K = 1 block, there are 64 pages of 2048 per block)
# erase only first 2 blocks, other block are reserved for copies
flash_unlock /dev/mtd0
flash_erase /dev/mtd0 0 2
nandwrite -n /dev/mtd0 -p boot.bin

    • Reflash u-boot (u-boot-dtb.img, /dev/mtd1)

cd <path-to-image-files>
# u-boot-dtb.img
# mtd1 is 4M (32 eraseblocks,128K = 1 block, there are 64 pages of 2048 per block)
# erase only the 1st 8 blocks as image is <1M, leave unused area for backup copies
flash_unlock /dev/mtd1
flash_erase /dev/mtd1 0 8
nandwrite -n /dev/mtd1 -p u-boot-dtb.img

    • Reflash devicetree (devicetree.dtb, /dev/mtd2)

cd <path-to-image-files>
# u-boot-dtb.img
# mtd2 is 1M (8 eraseblocks,128K = 1 block, there are 64 pages of 2048 per block)
flash_unlock /dev/mtd2
flash_erase /dev/mtd2 0 8
nandwrite -n /dev/mtd2 -p devicetree.dtb

    • Reflash kernel (uImage, /dev/mtd3)

cd <path-to-image-files>
# uImage
# mtd3 is 16M (128 eraseblocks,128K = 1 block, there are 64 pages of 2048 per block)
flash_unlock /dev/mtd3
flash_erase /dev/mtd3 0 128
nandwrite -n /dev/mtd3 -p uImage

    • For rootfs there are 2 options:
      • update - recommended, rootfs.ubifs
      • reflash - radical, rootfs.ubi

Update:

# NOT TESTED
ubiattach /dev/ubi_ctrl -m 4
#ubimkvol /dev/ubi0 -N elphel393-rootfs -s 256MiB
ubiupdatevol /dev/ubi0_0 rootfs.ubifs
# read: http://www.linux-mtd.infradead.org/faq/ubifs.html
# read: http://free-electrons.com/blog/creating-flashing-ubi-ubifs-images/
# read: http://www.linux-mtd.infradead.org/doc/ubi.html#L_volupdate
# read: http://comments.gmane.org/gmane.linux.drivers.mtd/39415

Reflash:

cd <path-to-image-files>
flash_unlock /dev/mtd4
flash_erase /dev/mtd4 0 2048
ubiformat /dev/mtd4 -f rootfs.ubi -s 2048 -O 2048

Note: Considering to store the u-boot, device tree and kernel on UBUFS partitions in future.