Difference between revisions of "NAND flash boot rootfs"
From ElphelWiki
(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 (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== | ||
+ | ===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
- For rootfs there are 2 options:
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.