07 10月 2015

Intel Edison; flashing out-of-box Edison

There are two (or more?) ways to flash Edison.

  1. Phone Flash Tool (GUI) or flashall.bat/flashall.sh (CUI)
  2. reboot ota command or run do_ota at Boot prompt.
But it cannot use "reboot ota" method on out-of-box Edison. In my case, oob Edison's version is
root@edison:~# cat /etc/version 
edison-weekly_build_56_2014-08-20_15-54-05

And if you run reboot ota, it fails. The reason is in ota_abort_reason U-boot environment variable.
root@edison:~# fw_printenv ota_abort_reason
ota_abort_reason=Partition rootfs too small for edison-image-edison.ext4 

Oob Edison's partition layout looks like this.
Number Start End Size File system Name Flags 
 1 1049kB 3146kB 2097kB       u-boot0 
 2 3146kB 4194kB 1049kB       u-boot-env0 
 3 4194kB 6291kB 2097kB       u-boot1 
 4 6291kB 7340kB 1049kB       u-boot-env1 
 5 7340kB 8389kB 1049kB ext2  factory 
 6 8389kB 33.6MB 25.2MB       panic 
 7 33.6MB 67.1MB 33.6MB fat16 boot 
 8 67.1MB 604MB   537MB ext4  rootfs 
 9  604MB 1409MB  805MB       update 
10 1409MB 3909MB 2500MB ext4  home 

To compare, this is a partition layout after flashing to the latest firmware (weekly-159).
Number Start End Size File system Name Flags 
 1 1049kB 3146kB 2097kB       u-boot0 
 2 3146kB 4194kB 1049kB       u-boot-env0 
 3 4194kB 6291kB 2097kB       u-boot1 
 4 6291kB 7340kB 1049kB       u-boot-env1 
 5 7340kB 8389kB 1049kB ext2  factory 
 6 8389kB 33.6MB 25.2MB       panic 
 7 33.6MB 67.1MB 33.6MB fat16 boot 
 8 67.1MB 1678MB 1611MB ext4  rootfs 
 9 1678MB 2483MB  805MB       update 
10 2483MB 3909MB 1426MB ext4  home 

reboot ota command cannot change a partition layout, because the command refers files in update partition and rootfs partition is followed by update partition. If extend rootfs partition size, it destroys update partition.

On the other hand, flashall command does the following steps.
  1. Flash u-boot0/1 and u-boot-env0/1 partitions.
  2. Reboot.
  3. Flash rootfs partition.
At the second reboot step, U-boot overwrites a partition table using updated partitions variable at the first step.
root@edison:~# fw_printenv partition
partitions=uuid_disk=${uuid_disk};name=u-boot0,start=1MiB,size=2MiB,uuid=${uuid_uboot0};name=u-boot-env0,size=1MiB,uuid=${uuid_uboot_env0};name=u-boot1,size=2MiB,uuid=${uuid_uboot1};name=u-boot-env1,size=1MiB,uuid=${uuid_uboot_env1};name=factory,size=1MiB,uuid=${uuid_factory};name=panic,size=24MiB,uuid=${uuid_panic};name=boot,size=32MiB,uuid=${uuid_boot};name=rootfs,size=1536MiB,uuid=${uuid_rootfs};name=update,size=768MiB,uuid=${uuid_update};name=home,size=-,uuid=${uuid_home}; 

Just for reference, oob Edison's partition variable:
partitions=uuid_disk=${uuid_disk};name=u-boot0,start=1MiB,size=2MiB,uuid=${uuid_uboot0};name=u-boot-env0,size=1MiB,uuid=${uuid_uboot_env0};name=u-boot1,size=2MiB,uuid=${uuid_uboot1};name=u-boot-env1,size=1MiB,uuid=${uuid_uboot_env1};name=factory,size=1MiB,uuid=${uuid_factory};name=panic,size=24MiB,uuid=${uuid_panic};name=boot,size=32MiB,uuid=${uuid_boot};name=rootfs,size=512MiB,uuid=${uuid_rootfs};name=update,size=768MiB,uuid=${uuid_update};name=home,size=-,uuid=${uuid_home}; 


0 件のコメント:

コメントを投稿