Difference between revisions of "NAND flash boot rootfs"
From ElphelWiki
Line 15: | Line 15: | ||
** '''rootfs.ubi''' or '''rootfs.ubifs''' | ** '''rootfs.ubi''' or '''rootfs.ubifs''' | ||
− | ====Option 1==== | + | ====Option 1: web browser==== |
* Boot the camera from the micro SD card (<font color='red'>important for rootfs update</font>) | * Boot the camera from the micro SD card (<font color='red'>important for rootfs update</font>) | ||
* Go to the http://192.168.0.9/update_software.html | * Go to the http://192.168.0.9/update_software.html | ||
* Upload '''uImage''' and '''rootfs.ubi''' | * Upload '''uImage''' and '''rootfs.ubi''' | ||
− | * Verify, download backup then Flash | + | * Verify-button, download backup then Flash-button |
− | ====Option 2: | + | ====Option 2: command line==== |
* Boot the camera from the micro SD card (<font color='red'>important for rootfs update</font>) | * Boot the camera from the micro SD card (<font color='red'>important for rootfs update</font>) | ||
* Copy file to the camera, example from the PC terminal: | * Copy file to the camera, example from the PC terminal: | ||
− | $ scp boot.bin u-boot-dtb.img devicetree.dtb uImage rootfs.ubi root@192.168.0.9:/ | + | $ scp boot.bin u-boot-dtb.img devicetree.dtb uImage rootfs.ubi root@192.168.0.9:/<path-to-image-files>/ |
− | * | + | * From the ssh session (ssh root@192.168.0.9) reflash what needs an update: |
− | ** Reflash | + | ** Reflash rootfs ('''rootfs.ubi''', /dev/mtd4) (<font color='red'>radical</font>) |
<font size='2'> | <font size='2'> | ||
cd <path-to-image-files> | 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 | |
− | flash_unlock /dev/ | + | </font> |
− | + | OR | |
− | + | ** update rootfs (<font color='green'>recommended</font>) | |
+ | <font size='2'> | ||
+ | flash_unlock /dev/mtd4 | ||
+ | ubiattach /dev/ubi_ctrl -m 4 | ||
+ | # NOT NEEDED: 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 | ||
</font> | </font> | ||
− | ** Reflash | + | ** Reflash kernel ('''uImage''', /dev/mtd3) |
<font size='2'> | <font size='2'> | ||
cd <path-to-image-files> | 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_unlock /dev/ | + | flash_erase /dev/mtd3 0 128 |
− | flash_erase /dev/ | + | nandwrite -n /dev/mtd3 -p uImage |
− | nandwrite -n /dev/ | ||
</font> | </font> | ||
** Reflash devicetree ('''devicetree.dtb''', /dev/mtd2) | ** Reflash devicetree ('''devicetree.dtb''', /dev/mtd2) | ||
Line 55: | Line 64: | ||
nandwrite -n /dev/mtd2 -p devicetree.dtb | nandwrite -n /dev/mtd2 -p devicetree.dtb | ||
</font> | </font> | ||
− | ** Reflash | + | ** Reflash u-boot ('''u-boot-dtb.img''', /dev/mtd1) |
<font size='2'> | <font size='2'> | ||
cd <path-to-image-files> | 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) |
− | flash_unlock /dev/ | + | # erase only the 1st 8 blocks as image is <1M, leave unused area for backup copies |
− | flash_erase /dev/ | + | flash_unlock /dev/mtd1 |
− | nandwrite -n /dev/ | + | flash_erase /dev/mtd1 0 8 |
+ | nandwrite -n /dev/mtd1 -p u-boot-dtb.img | ||
</font> | </font> | ||
− | ** | + | ** Reflash SPL ('''boot.bin''', /dev/mtd0) |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<font size='2'> | <font size='2'> | ||
cd <path-to-image-files> | cd <path-to-image-files> | ||
− | flash_unlock /dev/ | + | # boot.bin |
− | flash_erase /dev/ | + | # 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 | ||
</font> | </font> | ||
+ | |||
+ | |||
'''Note:''' Considering to store the u-boot (probably not, because 192K-max-boot.bin might not fit UBIFS driver), device tree and kernel on UBIFS partitions in future. | '''Note:''' Considering to store the u-boot (probably not, because 192K-max-boot.bin might not fit UBIFS driver), device tree and kernel on UBIFS partitions in future. | ||
[[Category:Elphel393]] | [[Category:Elphel393]] |
Revision as of 16:13, 16 December 2016
Contents
Reflash factory image
Notes
- Will overwrite 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 might not boot - to recover, boot from micro SD card and reflash rootfs partition.
- 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's OCM requirement)
Instructions
- Use files from elphel393/bootable-images/elphel393/nand/
- boot.bin
- u-boot-dtb.img
- devicetree.dtb
- uImage
- rootfs.ubi or rootfs.ubifs
Option 1: web browser
- Boot the camera from the micro SD card (important for rootfs update)
- Go to the http://192.168.0.9/update_software.html
- Upload uImage and rootfs.ubi
- Verify-button, download backup then Flash-button
Option 2: command line
- Boot the camera from the micro SD card (important for rootfs update)
- Copy file to the camera, example from the PC terminal:
$ scp boot.bin u-boot-dtb.img devicetree.dtb uImage rootfs.ubi root@192.168.0.9:/<path-to-image-files>/
- From the ssh session (ssh root@192.168.0.9) reflash what needs an update:
- Reflash rootfs (rootfs.ubi, /dev/mtd4) (radical)
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
OR
- update rootfs (recommended)
flash_unlock /dev/mtd4 ubiattach /dev/ubi_ctrl -m 4 # NOT NEEDED: 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 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
- 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 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 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
Note: Considering to store the u-boot (probably not, because 192K-max-boot.bin might not fit UBIFS driver), device tree and kernel on UBIFS partitions in future.