Project

General

Profile

Flashing » History » Revision 3

Revision 2 (tsaitgaist, 10/07/2017 02:39 PM) → Revision 3/8 (tsaitgaist, 10/13/2017 05:08 PM)

h1. Flashing 

 There are several way to flash partitions (e.g. updating) manually: 
 * using @/usr/sbin/ubiupdatevol@: 
 <pre> 
 ubiupdatevol version 1.2 - a tool to write data to UBI volumes. 

 Usage: ubiupdatevol <UBI volume node file name> [-t] [-s <size>] [-h] [-V] [--truncate] 
			 [--size=<size>] [--help] [--version] <image file> 

 Example 1: ubiupdatevol /dev/ubi0_1 fs.img - write file "fs.img" to UBI volume /dev/ubi0_1 
 Example 2: ubiupdatevol /dev/ubi0_1 -t - wipe out UBI volume /dev/ubi0_1 

 -t, --truncate               truncate volume (wipe it out) 
 -s, --size=<bytes>           bytes in input, if not reading from file 
 -h, --help                   print help message 
 -V, --version                print program version 
 </pre> 
 * using @/APP/dev_only/swupd.sh@ 
 <pre> 
 swupd.sh - update flash partitions on the target 

 Easy mode: 
    using NFS: swupd.sh -i<IP> -p<PATH> 
    where: 
    <IP>     = IP address of your VM (defaults to 192.168.16.18) 
    <PATH> = path of NFS directory (defaults to /home/femto/ftpdata) 

    using wget: swupd.sh -w<URL> 
    where: 
    <URL>    = URL to fetch images from (e.g. ftp://user:pass@host/path) 

 Expert mode: (stay away from them!) 
    -k update kernel 
    -r update root fs 
    -a update application partition 
    -u update unitdata partition 
    -c update caldata partition 
    -x toggle banks 
    -z don't reboot after successful update 

    -o<str> Pass option string <str> to wget 
 </pre> 

 @/etc/init.d/flash_update@ takes care of flashing all partitions at once (also done during boot in @/etc/init.d/rcS@). 

 Lastly the operator can also flash images remotely through @/APP/bin/oam_start@. 

 h1. Secure boot 

 

 h2. System 

 The femtocell uses "secure boot" (see [[Bootlog]]). 
 You can check if it has been activated using @cat /proc/prc6000/otp_data/boot/secured@. 

 The partition signatures (kernel, rootfs, data) are stored in @/dev/mtdblock2/bootdata.ini@ (the only file in the @bootdata@ partition). 
 While @bootdata@ is not signed itself, it only contains the signatures. 
 You can also see the content using @/APP/dev_only/cat_bootdata.sh@ 
 The corresponding public key seems to be burned in the OTP section of the CPU, providing secure boot (this has not been verified). 

 @bootdata.ini@ also defines which system will be booted (A or B). 
 The file is updated using @/APP/dev_only/write_bootdata.sh@ 

 For the [[Bootlog]] the femtocell seems to use "secure boot": 
 # the Percello bootrom verifies the Percello bootloader: 
 <pre> 
 Percello bootrom version 1.2.8 
 ... 
 Board: Secure mode 
 ... 
 Secured device - OTP2: verification ...PASSED 
 Secured device - OTP3: verification ...PASSED 
 Running Percello bootloader 
 PASSED 
 </pre> 
 # the Percello bootloader loader the Sagemcom FM-loader 
 <pre> 
 Nand execute: load_addr: 3fe0000 

 Percello bootloader version 0.6 (from NAND) 
 </pre> 
 # the Sagemcom FM-loader verifies the signatures of the kernel, rootfs, and app partitions 
 <pre> 
 Sagemcom FM-loader v2.0.4-11 
 Boot 1 (cold) into main system, secured 
 ... 
 Unit key found and verified 
 TrustStor signature check passed 
 Group A signature check passed 
 Kernel A signature check passed 
 Root file system A signature check passed 
 Application file system A signature check passed 
 </pre> 

 You can check if secure boot has been activated using @cat /proc/prc6000/otp_data/boot/secured@ but it is unclear how the signatures are verified. 

 h2. Operator 

 The @unidata@ (mtd3) signature is checked in @/etc/init.d/flash_update@ (called by @/etc/init.d/rcS@) using @/boot/bc_cli -u${PARTNUM_UNITDATA} -q@ (with PARTNUM_UNITDATA=3): 
 * hash is sha1sum of 0x2000 (8192) first bytes 
 * signature is at 0x2000 (after the cramfs indicated size) 
 * public key is first 256 bytes of @/caldata/unitkey.bin@ 

 It the signature check fails, @unidata_backup@ is used. 
 If this signature check fails too, it enters recovery mode 

 @caldata@ in mounted without check (in @/etc/init.d/flash_update@) 

Add picture from clipboard (Maximum size: 48.8 MB)