Project

General

Profile

Flashing » History » Version 3

tsaitgaist, 10/13/2017 05:08 PM
add bootload description

1 1 tsaitgaist
h1. Flashing
2
3
There are several way to flash partitions (e.g. updating) manually:
4
* using @/usr/sbin/ubiupdatevol@:
5
<pre>
6
ubiupdatevol version 1.2 - a tool to write data to UBI volumes.
7
8
Usage: ubiupdatevol <UBI volume node file name> [-t] [-s <size>] [-h] [-V] [--truncate]
9
			[--size=<size>] [--help] [--version] <image file>
10
11
Example 1: ubiupdatevol /dev/ubi0_1 fs.img - write file "fs.img" to UBI volume /dev/ubi0_1
12
Example 2: ubiupdatevol /dev/ubi0_1 -t - wipe out UBI volume /dev/ubi0_1
13
14
-t, --truncate             truncate volume (wipe it out)
15
-s, --size=<bytes>         bytes in input, if not reading from file
16
-h, --help                 print help message
17
-V, --version              print program version
18
</pre>
19
* using @/APP/dev_only/swupd.sh@
20
<pre>
21
swupd.sh - update flash partitions on the target
22
23
Easy mode:
24
   using NFS: swupd.sh -i<IP> -p<PATH>
25
   where:
26
   <IP>   = IP address of your VM (defaults to 192.168.16.18)
27
   <PATH> = path of NFS directory (defaults to /home/femto/ftpdata)
28
29
   using wget: swupd.sh -w<URL>
30
   where:
31
   <URL>  = URL to fetch images from (e.g. ftp://user:pass@host/path)
32
33
Expert mode: (stay away from them!)
34
   -k update kernel
35
   -r update root fs
36
   -a update application partition
37
   -u update unitdata partition
38
   -c update caldata partition
39
   -x toggle banks
40
   -z don't reboot after successful update
41
42
   -o<str> Pass option string <str> to wget
43
</pre>
44
45 2 tsaitgaist
@/etc/init.d/flash_update@ takes care of flashing all partitions at once (also done during boot in @/etc/init.d/rcS@).
46 1 tsaitgaist
47
Lastly the operator can also flash images remotely through @/APP/bin/oam_start@.
48 2 tsaitgaist
49
h1. Secure boot
50
51
h2. System
52
53
The partition signatures (kernel, rootfs, data) are stored in @/dev/mtdblock2/bootdata.ini@ (the only file in the @bootdata@ partition).
54
While @bootdata@ is not signed itself, it only contains the signatures.
55
You can also see the content using @/APP/dev_only/cat_bootdata.sh@
56
The corresponding public key seems to be burned in the OTP section of the CPU, providing secure boot (this has not been verified).
57 1 tsaitgaist
58
@bootdata.ini@ also defines which system will be booted (A or B).
59
The file is updated using @/APP/dev_only/write_bootdata.sh@
60 3 tsaitgaist
61
For the [[Bootlog]] the femtocell seems to use "secure boot":
62
# the Percello bootrom verifies the Percello bootloader:
63
<pre>
64
Percello bootrom version 1.2.8
65
...
66
Board: Secure mode
67
...
68
Secured device - OTP2: verification ...PASSED
69
Secured device - OTP3: verification ...PASSED
70
Running Percello bootloader
71
PASSED
72
</pre>
73
# the Percello bootloader loader the Sagemcom FM-loader
74
<pre>
75
Nand execute: load_addr: 3fe0000
76
77
Percello bootloader version 0.6 (from NAND)
78
</pre>
79
# the Sagemcom FM-loader verifies the signatures of the kernel, rootfs, and app partitions
80
<pre>
81
Sagemcom FM-loader v2.0.4-11
82
Boot 1 (cold) into main system, secured
83
...
84
Unit key found and verified
85
TrustStor signature check passed
86
Group A signature check passed
87
Kernel A signature check passed
88
Root file system A signature check passed
89
Application file system A signature check passed
90
</pre>
91
92
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.
93 2 tsaitgaist
94
h2. Operator
95
96
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):
97
* hash is sha1sum of 0x2000 (8192) first bytes
98
* signature is at 0x2000 (after the cramfs indicated size)
99
* public key is first 256 bytes of @/caldata/unitkey.bin@
100
101
It the signature check fails, @unidata_backup@ is used.
102
If this signature check fails too, it enters recovery mode
103
104
@caldata@ in mounted without check (in @/etc/init.d/flash_update@)
Add picture from clipboard (Maximum size: 48.8 MB)