FreeCalypso > hg > freecalypso-tools
annotate doc/TIFFS-Overview @ 929:ab771ce34fac
rvinterf/lowlevel/format.c: get rid of static fmtbuf
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Tue, 23 May 2023 05:56:08 +0000 |
parents | 0306449ba467 |
children |
rev | line source |
---|---|
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
1 [Historical note: this document was originally written in 2014 when the vision |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
2 of FreeCalypso was very different from what it is today. Since then we have |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
3 transitioned from making aftermarket hacks on pre-existing Calypso phones and |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
4 modems to producing and supporting our own FreeCalypso hardware products, and |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
5 our firmware work has changed from a nebulous dream to stable production code. |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
6 The ways in which we approach various technical aspects have changed |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
7 accordingly, but much of our documentation has been slow to catch up. The |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
8 documentation is now being updated, but there may still be some passages where |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
9 the old world view shines through.] |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
10 |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
11 All TI GSM firmwares known to this author (Mother Mychaela of FreeCalypso) |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 implement some kind of flash file system, or FFS. Several different FFS code |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 implementations, and correspondingly several different on-flash data formats, |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 have been used throughout the history of TI's involvement in the wireless |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 terminal business. The FFS incarnation of primary interest to the FreeCalypso |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 project is the one invented by Mads Meisner-Jensen at TI in the early 2000s |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 (at least according to the comments in the sources available to us), and it is |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 relevant to us in the following ways: |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 * When targeting the GSM modem in Openmoko's GTA01/02 smartphones, we need to |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 work with the original FFS from the factory (call it MokoFFS), the same FFS |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 as used by the mokoN firmwares: this FFS contains the IMEI and the RF |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 calibration values from the factory, which we most certainly don't want to go |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 without. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 * The Leonardo firmware semi-src which we are using as the reference for |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 building our own full source, multi-target GSM fw contains a turnkey-working |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 implementation of this very FFS, using the on-flash format in question and |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 providing run-time APIs expected by the rest of the GSM fw suite. Following |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
30 the principle of ``if it ain't broke, don't fix it'', we use this FFS not |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 only on the gtamodem target, but also on other targets, including those where |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
32 we are starting from a blank state and thus have the freedom to use whatever |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
33 FFS we like. |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 * The original proprietary fw on the Pirelli DP-L10 phone also happens to use |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
36 an FFS in the same format, although Pirelli's FFS does *not* contain the IMEI |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
37 or any of the RF calibration values. This Pirelli phone was originally a |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
38 target of high interest for FreeCalypso, as we had high hopes of turning it |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
39 into a libre phone by way of our aftermarket firmware - but this plan has |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
40 since been abandoned when it became clear that Pirelli's hw is unsuitable for |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
41 aftermarket fw development because of the multitude of extra peripheral chips |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
42 for non-GSM functions which get in the way. In the earlier years of |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
43 FreeCalypso a lot of effort had been invested into studying all aspects of |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
44 the Pirelli DP-L10 phone and its original firmware, including the FFS. |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 Naming |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 ====== |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 I have previously referred to the FFS format in question as Mokopir-FFS or |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 MPFFS, from "Moko" and "Pirelli". I was originally hesitant to call it TIFFS, |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 as lacking the source code, I had no way of knowing whether the FFS format and |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 implementation were of TI's own invention, or something that TI licensed as a |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 black box from one of their many proprietary software partners. (I was unable |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 to identify it as any well-known, industry-standard FFS format, but absence of |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 evidence is not evidence of absence.) But now that we have TI's original source |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 code which implements this FFS (first the MV100-0.1.rar source, then the full |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 Leonardo one), complete with comments and a HISTORY file, we know that our FFS |
734
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
58 was invented and implemented by someone named Mads Meisner-Jensen at TI-DK, |
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
59 apparently their flash chip expert who also wrote FLUID. |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 I am now making a naming transition from MPFFS to TIFFS: there is really no |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 link between this FFS format and the Openmoko+Pirelli duo, other than the |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 happenstance of me having first encountered this FFS on these two GSM device |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 brands, and the name TIFFS is more neutrally-descriptive. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 What it is |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 ========== |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 In a rare departure from TI's norm (most of TI's GSM firmware and associated |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 development tools suffer from heavy Windows poisoning), what I call TIFFS is |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 very Unixy. It is a file system with a hierarchical directory tree structure |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 and with Unixy forward-slash-separated, case-sensitive pathnames; the semantics |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 of "what is a file" and "what is a directory" are exactly the same as in UNIX; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 and TIFFS even supports symlinks, although that support is a little under- |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 developed, and apparently no FFS symlinks were ever used in any production GSM |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 device. Thus the FFS implemented in TI-based GSM devices (modems and |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
77 "dumbphone" handsets) is really no different from, for example, JFFS2 in |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
78 embedded Linux systems. |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 (The only traditional UNIX file system features which are missing in TIFFS are |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 the creation/modification/access timestamps and the ownership/permission |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 fields.) |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 The FFS in a GSM device typically stores two kinds of content: |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 * Factory data: IMEI, RF calibration values, device make/model/revision |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 ID strings etc. These files are expected to be programmed on the factory |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 production line and not changed afterward. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 * Dynamic data written into the FFS in normal device operation: when you use a |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 "dumbphone" running TI-based firmware, every time you store something "on the |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 phone" or in "non-volatile memory", that item is actually stored in the FFS. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 (Where else, if you think of it?) That includes contacts and received SMS |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 stored "on the phone" instead of the SIM, any selections you make in the |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 settings/preferences menus which persist across reboots (power cycles), call |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 history etc. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 It needs to be noted that the "dynamic data" aspect of FFS usage applies not |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 only to complete phones, but also to modems like the one used in the GTA01/02. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 One would naively think that non-volatile storage of data in flash outside of |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 factory programming would be needed only in a device with its own UI, and that |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 a modem subservient to external AT commands would be completely stateless |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
103 across reboot/power cycles; but that is not the case in actuality. TI-baseed |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
104 GSM firmwares, including Openmoko's mokoN and our own FreeCalypso, are designed |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
105 to always "mount" their FFS with read/write access; TI's FFS implementation in |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
106 the firmware has no concept of a "read-only mount". |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 I am still investigating just what kinds of data are routinely written into the |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 non-volatile FFS by the firmware in normal operation on devices like the GTA0x |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 modem, but there most definitely are some. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 There is no hard separation between "static" and "dynamic" data in the file |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 system structure; TIFFS is thus akin to an embedded Linux system with just a |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 single root file system containing both "static" files like userland binaries |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 and "dynamic" ones like configuration files under /etc which the user is |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 expected to edit with vi after logging into the box, or log and similar files |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 created by the system itself under /var, for example. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 Where it lives |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 ============== |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 The type of flash memory used in Calypso GSM modems and "dumbphones" is called |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 NOR flash. This NOR flash memory is physically divided (by the design of the |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 flash chip itself) into units called "sectors" or more descriptively, erase |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 blocks. The typical NOR flash sector size (in Calypso GSM devices) ranges from |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 64 KiB in the GTA02 modem's NOR flash (4 MiB total) to 256 KiB in the |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
127 S71PL129NC0 flash+RAM chip used in the Pirelli DP-L10 and in our own FreeCalypso |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
128 hardware designs (16 MiB of flash total). The key physical property is that |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
129 any bit may be changed from a '1' to a '0' at any time, in any combination, but |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
130 resetting of '0' bits back to ones can be done only on the granularity of these |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
131 largish sectors, in an operation called "sector erase". |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 The location of TIFFS within the flash memory of a given GSM device is defined |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 by the firmware design of that device, but is always some integral number of |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 contiguous flash sectors. Some examples: |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 * On the GTA01/02 GSM modem, FFS occupies 7 sectors of 64 KiB each, starting at |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 flash offset 0x380000. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 * On the Pirelli DP-L10, the FFS used by the original proprietary fw occupies |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 18 sectors of 256 KiB each (for 4.5 MiB in total), starting at the beginning |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 of the 2nd flash chip select (0x02000000 in the ARM7 address space). |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 * On Motorola/Compal C139/140 phones, the FFS used by the original proprietary |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 fw occupies 5 sectors of 64 KiB each (320 KiB in total), starting at 0x370000. |
482
3100f534340b
doc updates for Compal FFS
Mychaela Falconia <falcon@freecalypso.org>
parents:
431
diff
changeset
|
146 C11x/12x use smaller FFS configurations, whereas C155/156 use a different FFS |
3100f534340b
doc updates for Compal FFS
Mychaela Falconia <falcon@freecalypso.org>
parents:
431
diff
changeset
|
147 implementation with a completely different on-flash format - see the new |
3100f534340b
doc updates for Compal FFS
Mychaela Falconia <falcon@freecalypso.org>
parents:
431
diff
changeset
|
148 Compal-FFS article for more details. |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
150 * On our own FreeCalypso hardware family we have put our FFS in the first 8 |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
151 sectors (of 256 KiB each) in the 2nd flash chip select bank, which appears at |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
152 0x01800000 in the ARM7 address space instead of Pirelli's 0x02000000 because |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
153 we have wired the 2nd flash chip select to nCS2 on the Calypso instead of |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
154 Pirelli's nCS3. |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
155 |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 * The smallest real FFS configuration called for by the table in dev.c in TI's |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 original Leonardo fw source is 3 sectors of 64 KiB each; the same table also |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 sports a 4 KiB x 4 configuration for RAM-based testing (emulation of FFS in |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 RAM without real flash). |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 * The largest FFS configuration that has been envisioned by the original |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 designers seems to be somewhere around 128 sectors. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 Each flash sector used for TIFFS begins with this 6-byte signature: |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 46 66 73 23 10 02 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 The first 4 bytes are 'Ffs#' in ASCII, and the following two bytes are the |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 format version number of 0x0210 in little-endian byte order. The following two |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 bytes give a count of how many times that sector has been erased and rewritten |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 (FF FF in "fresh" or "virgin" FFS images), and the following byte indicates |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 that block's role and status in the FFS life cycle. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 How it works |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 ============ |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 Just like JFFS2 and other high-quality flash file systems, TIFFS is designed to |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 recover gracefully from any possible power failure or crash: one can yank the |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 battery from the GSM device (or induce a firmware crash) at the most mis- |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 opportune moment in the middle of an FFS write operation, and the FFS is |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 expected to recover on the next boot cycle. I won't be able to document here |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 all gory details of exactly how this goal is achieved, partly because I haven't |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 studied the code to the requisite level of depth myself yet, but all of the |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
184 responsible code lives under src/cs/drivers/drv_app/ffs in our fc-magnetite and |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
185 fc-selenite source trees; feel free to study it. |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 In its "normal" or "clean" state (i.e., when not in the middle of a write |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 operation or recovery from an ungracefully interrupted one), a TIFFS instance |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 consists of the following 3 types of blocks: |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 * One block containing inode records, indicated by AB in its type/flags/status |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 byte in the block header; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 * N-2 blocks (where N is the total number of flash sectors allocated for the |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 FFS) containing (or waiting to be filled with) data chunks - indicated by BD |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 in the type/flags/status byte; |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 * One "free" block, indicated by BF - destined to become a new AB or a new BD |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 at some point. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 Each object written into the FFS (file, directory or symlink) consists of a |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 16-byte inode record written into the AB block and a data chunk written into |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 one of the BD blocks. The data chunk includes the name of the object, hence |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 one is required even for directories. Data chunks are contiguous, uncompressed, |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 and subject to an upper size limit of 2048 or 8192 bytes, depending on the FFS |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 configuration. Files larger than this limit are stored in a "segmented" form, |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
205 giving rise to a 4th inode or object type (after file, directory and symlink): |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
206 segment. Each segment of a segmented file consists of not only a data chunk, |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
207 but also an inode record for the segment, which gives the location of the data |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
208 chunk and ties the segment object into the overall FFS structure, making it |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
209 accessible. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
210 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
211 Because aside from complete sector erasure, flash memory bits can only |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
212 transition from '1' to '0' but not the other way around, overwriting an existing |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
213 file with some new content (an operation which any reasonable file system must |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
214 implement in some way) cannot be done in place. Instead like most flash file |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
215 systems, TIFFS implements this common operation by writing the new version of |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
216 the file to a new location (previously blank flash) and then invalidating the |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
217 old version - and doing all that while keeping in mind the possibility of an |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
218 ungraceful crash or powerdown at any moment, and the requirement of recovering |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
219 gracefully from any such event. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
220 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
221 Of course as an FFS receives more write activity, even if one keeps overwriting |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
222 some existing files with new content of the same size, without adding to the |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
223 visible total content size (think du(1) command), eventually all remaining blank |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
224 flash space will fill up. At that point (or at some earlier point, depending |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
225 on the FFS design and/or configuration) the FFS has to invoke a compaction or |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
226 reclamation or garbage collection procedure: any "mixed" blocks containing both |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
227 valid and stale data are transitioned into a "stale-only" state by having the |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
228 active data moved to a new block, and then the "all stale" blocks are subjected |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
229 to sector erasure, becoming new blank sectors. The logic responsible for these |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
230 operations once again needs to be resilient to the possibility of a crash or |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
231 powerdown occurring at the most mis-opportune moment, and it also needs to |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
232 implement flash wear leveling: there is a physical limit to how many times a |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
233 given flash sector can be erased and rewritten before it goes bad. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
234 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
235 All of the above are common and well-known principles, successfully implemented |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
236 in well-known flash file systems such as JFFS2 in Linux. TIFFS is absolutely |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
237 no different in this regard; for the implementation details, read the source |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
238 code. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
239 |
920
0306449ba467
doc/TIFFS-Overview: document classic filename and pathname limits
Mychaela Falconia <falcon@freecalypso.org>
parents:
734
diff
changeset
|
240 TIFFS filename and pathname limits |
0306449ba467
doc/TIFFS-Overview: document classic filename and pathname limits
Mychaela Falconia <falcon@freecalypso.org>
parents:
734
diff
changeset
|
241 ================================== |
0306449ba467
doc/TIFFS-Overview: document classic filename and pathname limits
Mychaela Falconia <falcon@freecalypso.org>
parents:
734
diff
changeset
|
242 |
0306449ba467
doc/TIFFS-Overview: document classic filename and pathname limits
Mychaela Falconia <falcon@freecalypso.org>
parents:
734
diff
changeset
|
243 Classic TIFFS, as in the canonical firmware source from TI, imposes the |
0306449ba467
doc/TIFFS-Overview: document classic filename and pathname limits
Mychaela Falconia <falcon@freecalypso.org>
parents:
734
diff
changeset
|
244 following limits on the content written into FFS: |
0306449ba467
doc/TIFFS-Overview: document classic filename and pathname limits
Mychaela Falconia <falcon@freecalypso.org>
parents:
734
diff
changeset
|
245 |
0306449ba467
doc/TIFFS-Overview: document classic filename and pathname limits
Mychaela Falconia <falcon@freecalypso.org>
parents:
734
diff
changeset
|
246 * Each elementary filename or pathname component (the name of each individual |
0306449ba467
doc/TIFFS-Overview: document classic filename and pathname limits
Mychaela Falconia <falcon@freecalypso.org>
parents:
734
diff
changeset
|
247 file or subdirectory within its parent directory) is limited to 20 characters; |
0306449ba467
doc/TIFFS-Overview: document classic filename and pathname limits
Mychaela Falconia <falcon@freecalypso.org>
parents:
734
diff
changeset
|
248 |
0306449ba467
doc/TIFFS-Overview: document classic filename and pathname limits
Mychaela Falconia <falcon@freecalypso.org>
parents:
734
diff
changeset
|
249 * The set of allowed characters in these elementary filenames is limited to |
0306449ba467
doc/TIFFS-Overview: document classic filename and pathname limits
Mychaela Falconia <falcon@freecalypso.org>
parents:
734
diff
changeset
|
250 [A-Za-z0-9_.,+%$#-]; |
0306449ba467
doc/TIFFS-Overview: document classic filename and pathname limits
Mychaela Falconia <falcon@freecalypso.org>
parents:
734
diff
changeset
|
251 |
0306449ba467
doc/TIFFS-Overview: document classic filename and pathname limits
Mychaela Falconia <falcon@freecalypso.org>
parents:
734
diff
changeset
|
252 * The maximum pathname depth is limited to 6. |
0306449ba467
doc/TIFFS-Overview: document classic filename and pathname limits
Mychaela Falconia <falcon@freecalypso.org>
parents:
734
diff
changeset
|
253 |
0306449ba467
doc/TIFFS-Overview: document classic filename and pathname limits
Mychaela Falconia <falcon@freecalypso.org>
parents:
734
diff
changeset
|
254 As an illustration of the pathname depth limit, the deepest allowed path to a |
0306449ba467
doc/TIFFS-Overview: document classic filename and pathname limits
Mychaela Falconia <falcon@freecalypso.org>
parents:
734
diff
changeset
|
255 non-directory file is /d1/d2/d3/d4/d5/file. It is also possible to have a |
0306449ba467
doc/TIFFS-Overview: document classic filename and pathname limits
Mychaela Falconia <falcon@freecalypso.org>
parents:
734
diff
changeset
|
256 directory nesting of /d1/d2/d3/d4/d5/d6, but in this case the deepest directory |
0306449ba467
doc/TIFFS-Overview: document classic filename and pathname limits
Mychaela Falconia <falcon@freecalypso.org>
parents:
734
diff
changeset
|
257 can only be empty. |
0306449ba467
doc/TIFFS-Overview: document classic filename and pathname limits
Mychaela Falconia <falcon@freecalypso.org>
parents:
734
diff
changeset
|
258 |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
259 How this FFS comes into being |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
260 ============================= |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
261 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
262 (This section is only relevant to you if you plan on physically producing your |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
263 own GSM phones or modems on your own factory production line, like we currently |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
264 do at our family company, or if you simply enjoy knowing how it is done.) |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
265 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
266 To my knowledge, TI never used or produced a tool akin to mkfs.jffs2 in the |
734
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
267 embedded Linux world, or akin to our recently developed tiffs-mkfs, which would |
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
268 produce a TIFFS image complete with some initial directory and file content |
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
269 "in vitro". Instead it appears that the FFS instances found in shipped products |
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
270 such as Openmoko phones have been created "in vivo" by TI's firmware running on |
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
271 the device itself during the "production test" phase. |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
272 |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
273 We never got a copy of the original factory production line software that was |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
274 used by Openmoko, but we have successfully replicated the process using our own |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
275 Unix/Linux-based FreeCalypso host tools, the very same tools that are contained |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
276 in the present source package you are looking at. The process goes like this: |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
277 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
278 * When the printed circuit board is physically populated with components such |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
279 as the Calypso chip and the flash chip, the latter can be blank - if the |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
280 board design has the nIBOOT pin pulled low, enabling the Calypso boot ROM |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
281 (Openmoko and Pirelli both good on this one, but shame on Compal!), there is |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
282 no need to preprogram the flash chip with anything prior to populating it on |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
283 the board, and the device remains fully unbrickable at all times afterward. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
284 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
285 * When the assembled board is powered up for the first time, with completely |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
286 blank flash, the Calypso boot ROM will sit there and patiently wait for a |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
287 code download on either of its two UARTs. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
288 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
289 * Using TI's FLUID (Flash Loader Utility Independent of Device) or FreeCalypso's |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
290 fc-loadtool free replacement, the factory production station loads the main |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
291 firmware image into the flash. Note, it is just the firmware image at this |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
292 step, and the FFS sectors remain blank. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
293 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
294 * The board is commanded to reboot (or power-cycled), and the firmware image |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
295 boots for the first time. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
296 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
297 * TI's FFS implementation code in their standard firmware reacts to all blank |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
298 flash in the FFS sectors as follows: it performs what they call the preformat |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
299 operation, writing the TIFFS signature and a BF state byte into every FFS |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
300 sector, but the main "format" operation, which sets up the AB/BD block roles, |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
301 creates the root inode and makes the FFS ready to accept the creation of its |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
302 first directories and files, is not done automatically. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
303 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
304 In order to perform the FFS format operation and then fill the new FFS with |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
305 whatever directories and files are deemed needed to be present in "fresh" |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
306 shipping products, the factory production station connects to the just-booted |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
307 firmware running on the target via the RVT/ETM protocol (see the RVTMUX |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
308 write-up), and sends "test mode" commands to this running firmware. These |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
309 "FFS test mode" (or TMFFS) commands include the format operation, an mkdir |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
310 operation to create directories, and a "file write" operation akin to doing |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
311 'cat > /dir/whatever/file', creating files in FFS and storing any desired data |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
312 in them. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
313 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
314 The IMEI is assigned and written into FFS in this process, but it is not the |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
315 only data item that will be unique for each individual device made. Much more |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
316 important are the RF calibration values; the factory calibration procedure does |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
317 the following for each individual unit: |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
318 |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
319 * Measures the frequency offset produced by the VCXO as a function of the AFC |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
320 DAC control value and constructs the afcparams table based on these |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
321 measurements; |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
322 |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
323 * Characterizes the dBm output of the Tx chain as a function of the APC DAC |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
324 control value and comes up with a set of these DAC values which produce Tx |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
325 power levels prescribed by the GSM 05.05 spec; |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
326 |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
327 * Determines the correction values which need to be applied in order to set the |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
328 correct Rx path gains and to determine the true Rx signal level from the dBfs |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
329 power measurements made in the DSP from Rx I&Q samples. |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
330 |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
331 These calibration procedures are performed by connecting a suitable RF test |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
332 instrument (R&S CMU200 is the industry gold standard) to the GSM device's |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
333 antenna connector or RF test port and running special calibration programs |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
334 which talk both to the CMU200 or other test instrument and to the L1TM (Layer 1 |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
335 test modes) component in the DUT (device under test). In FreeCalypso hardware |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
336 manufacturing we use a CMU200 instrument which is itself maintained in good |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
337 calibration standing, and for the calibration software we use our own |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
338 fc-rfcal-tools which talk to the DUT via rvinterf. |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
339 |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
340 All of the resulting calibration values are stored in a bunch of files under the |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
341 /gsm/rf subtree, and these files are "owned" by the L1 code. The latter has |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
342 RAM data structures which correspond to these files; upon normal boot the |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
343 initialization code looks in FFS, and if it finds any of the RF calibration |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
344 files, it reads each present file into the corresponding RAM data structure, |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
345 overwriting the compiled-in defaults. With TI's standard production calibration |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
346 procedure which we have replicated in our FreeCalypso hw manufacturing setup, |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
347 these RF calibration files in FFS come into being as follows: |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
348 |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
349 * The Test Mode support code in L1 (i.e., part of the main GSM fw) performs the |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
350 measurements and stores results in its RAM data structures as commanded by |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
351 the production test station through the Test Mode interface; |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
352 |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
353 * Certain special test mode commands encoded via the MISC_ENABLE opcode direct |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
354 the above L1TM code to write its RAM data structures into FFS. |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
355 |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
356 See the RF_tables article for more information. |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
357 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
358 Compal and Pirelli differences |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
359 ============================== |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
360 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
361 The above description refers to TI's vanilla reference version, and it seems |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
362 like Openmoko (FIC) was the only phone/modem manufacturer (prior to us!) who |
482
3100f534340b
doc updates for Compal FFS
Mychaela Falconia <falcon@freecalypso.org>
parents:
431
diff
changeset
|
363 followed it without major deviations. In contrast, both Compal (Motorola C1xx |
3100f534340b
doc updates for Compal FFS
Mychaela Falconia <falcon@freecalypso.org>
parents:
431
diff
changeset
|
364 and Sony Ericsson J100) and Foxconn (Pirelli DP-L10) moved their vital per-unit |
3100f534340b
doc updates for Compal FFS
Mychaela Falconia <falcon@freecalypso.org>
parents:
431
diff
changeset
|
365 factory data (IMEI and RF calibration) out of the FFS into their own ad hoc |
3100f534340b
doc updates for Compal FFS
Mychaela Falconia <falcon@freecalypso.org>
parents:
431
diff
changeset
|
366 flash data structures (which are very difficult to reverse-engineer and make |
3100f534340b
doc updates for Compal FFS
Mychaela Falconia <falcon@freecalypso.org>
parents:
431
diff
changeset
|
367 use of, unfortunately), leaving their FFS only for less critical data. |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
368 |
482
3100f534340b
doc updates for Compal FFS
Mychaela Falconia <falcon@freecalypso.org>
parents:
431
diff
changeset
|
369 In Compal's case (all C1xx models and SE J100) the FFS stores only users' |
3100f534340b
doc updates for Compal FFS
Mychaela Falconia <falcon@freecalypso.org>
parents:
431
diff
changeset
|
370 personal information and nothing more. One can turn the phone off, use |
3100f534340b
doc updates for Compal FFS
Mychaela Falconia <falcon@freecalypso.org>
parents:
431
diff
changeset
|
371 fc-loadtool to erase the FFS sectors, and boot the regular fw back up; the fw |
3100f534340b
doc updates for Compal FFS
Mychaela Falconia <falcon@freecalypso.org>
parents:
431
diff
changeset
|
372 will automatically do a new FFS format (it even displays a message on the LCD |
3100f534340b
doc updates for Compal FFS
Mychaela Falconia <falcon@freecalypso.org>
parents:
431
diff
changeset
|
373 as it does so) and carry on happily as a "fresh" or "blank", perfectly |
3100f534340b
doc updates for Compal FFS
Mychaela Falconia <falcon@freecalypso.org>
parents:
431
diff
changeset
|
374 functional and usable phone. Please see the new Compal-FFS article for further |
3100f534340b
doc updates for Compal FFS
Mychaela Falconia <falcon@freecalypso.org>
parents:
431
diff
changeset
|
375 details. |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
376 |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
377 In Pirelli's case, booting their official fw with blank FFS sectors will also |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
378 result in the FFS being automatically formatted, but their fw expects some |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
379 static "asset" files to be present in this FFS: UI graphics and language |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
380 strings, ringtones, firmware images for the WiFi and VoIP processors and some |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
381 static configuration files, about 3 MiB in total. Thus although the firmware |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
382 will auto-format the blank FFS sectors, it won't function normally with all of |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
383 these "asset" files missing. Foxconn's original factory production line station |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
384 must have uploaded these files to each phone via the TMFFS2 protocol, and our |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
385 FreeCalypso suite now features a tool that can replicate this feat: fc-fsio. |
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
386 |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
387 Aftermarket FFS for FreeCalypso on Compal & Pirelli targets |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
388 =========================================================== |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
389 |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
390 When we run our own FreeCalypso fw on "alien" (not native to us) Mot C1xx and |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
391 Pirelli DP-L10 hardware, we don't use the FFS from their respectively original |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
392 firmwares: those original FFS instances don't contain any bits of interest to |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
393 us, trying to make our fw use the same FFS as Mot/Compal's or Pirelli's original |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
394 fw would be more trouble than benefit, and on one of the target devices in this |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
395 family (Mot C155/156) the original FFS is in some different format. Instead we |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
396 create our own aftermarket FFS for our FreeCalypso fw on these alien hw targets, |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
397 using a different flash location from the original so that the original fw's FFS |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
398 cannot be mistaken for our own. |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
399 |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
400 On the Pirelli DP-L10 we put our aftermarket FFS in an area of the flash which |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
401 the official fw family uses as a staging area for over-the-air firmware updates, |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
402 thus as long as you are not doing official fw updates over WLAN (i.e., if you |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
403 only run one fixed official fw version or flash different official fw versions |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
404 with fc-loadtool without going through "fw update" protocols), our aftermarket |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
405 FFS used by our run-from-RAM FreeCalypso firmwares should remain undisturbed |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
406 while the phone is in the official fw mode. |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
407 |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
408 The situation is different on Mot C1xx phones. The lower-end C1xx models |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
409 including the C139 (our primary hw target in this family) have too little RAM |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
410 to run our FreeCalypso fw entirely out of RAM without flashing; the C155/156 |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
411 subfamily does have enough RAM to allow a complete FC GSM fw image to be loaded |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
412 and run via fc-xram under some conditions (we previously supported such usage |
482
3100f534340b
doc updates for Compal FFS
Mychaela Falconia <falcon@freecalypso.org>
parents:
431
diff
changeset
|
413 in our now-retired Citrine fw and we also support it in the gcc-built config of |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
414 FC Selenite), but there is no place in the flash where we can put our |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
415 aftermarket FFS without overwriting some part of the original fw or its data - |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
416 thus our general procedure for running FreeCalypso on any C1xx model is to |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
417 convert the victim phone to FC on a long-term basis by flashing our modified |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
418 bootloader, flashing one of our fw builds and establishing a FreeCalypso |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
419 aftermarket FFS in a flash area designated by us. |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
420 |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
421 It was already mentioned earlier that the factory RF calibration values on these |
482
3100f534340b
doc updates for Compal FFS
Mychaela Falconia <falcon@freecalypso.org>
parents:
431
diff
changeset
|
422 alien phones are stored in non-TIFFS flash data structures of Compal's or |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
423 Foxconn's invention, and our currently supported FreeCalypso firmwares |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
424 (Magnetite and Selenite) do not contain any code for reading these alien data |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
425 structures. (FC Citrine could read directly from Pirelli's factory data block, |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
426 but none of our fw offerings ever parsed Compal's weird flash records.) Instead |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
427 our current approach is to have an external tool extract the bits of interest |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
428 from the alien factory records, convert them to our TI-standard format if |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
429 necessary, and upload them into our FreeCalypso aftermarket FFS. The specifics |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
430 are as follows: |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
431 |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
432 * The Pirelli DP-L10 is a breeze: simply run our special pirelli-magnetite-init |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
433 command in fc-fsio while connected to a Magnetite or Selenite fw instance |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
434 running with our aftermarket FFS, and the tool will copy both the IMEI and |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
435 the RF calibration records from Pirelli's factory data block into our |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
436 aftermarket FFS. |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
437 |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
438 * Mot C1xx phones present a lot more hassle: our current official procedure is |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
439 to make a dump of the flash prior to the xenotransplantation procedure (also |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
440 serves as a backup), extract the RF calibration values with our c1xx-calextr |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
441 tool, and then later in the procedure when you initialize your aftermarket FFS |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
442 with fc-fsio, upload these extracted and format-converted RF calibration files |
734
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
443 as one of the several steps involved. You will also need to enter your IMEI |
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
444 manually: fc-loadtool flash compal-imei command can extract the factory IMEI |
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
445 record from the flash chip's protection register and save it into a text file, |
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
446 but you still need to feed it manually to the new firmware with fc-fsio |
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
447 set-imeisv command. |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
448 |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
449 FreeCalypso host tools for TIFFS |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
450 ================================ |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
451 |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
452 Our FC host tools package supports TIFFS in two ways: |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
453 |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
454 1) Our primary tool for working with GSM device file systems is fc-fsio. When |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
455 run against a compatible firmware version (primarily our own, but Pirelli's |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
456 proprietary fw is also compatible), fc-fsio allows various read and write |
734
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
457 operations to be performed on the target device FFS. fc-fsio can also be used |
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
458 together with our fc-xram based FFS editing agent described below. |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
459 |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
460 2) We have a TIFFS In Vitro Analyzer (IVA) tool for "in vitro" examination of |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
461 FFS images that have been read out of raw flash with fc-loadtool. See the |
734
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
462 TIFFS-IVA-usage article for more information. As a very recent addition, we |
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
463 also have another "in vitro" tool (tiffs-mkfs) that goes the other way, creating |
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
464 new complete TIFFS images from a tree of directories and files. |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
465 |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
466 In addition to the above, back in the days of Openmoko (back when the Openmoko |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
467 community was still active and we considered ourselves a part of it) we had |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
468 produced a kit for editing the modem FFS on Openmoko GTA01/02 devices, giving |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
469 users an easy way to change their /pcm/IMEI file. Changing IMEIs for no good |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
470 reason is completely pointless and is actually detrimental rather than helpful |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
471 for privacy, but whoever came up with the edicts that "the IMEI MUST be |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
472 immutable" had obviously failed Human Psychology 101: declaring something to be |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
473 forbidden causes people to want it simply because it is forbidden and for no |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
474 other reason - hence the popular demand for IMEI changing tools. |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
475 |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
476 Our Openmoko FFS editing kit from early 2014 consisted of a very early version |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
477 of what much later became the present FC host tools package (more specifically, |
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
478 it was before fc-fsio, and the set-imeisv command had been hacked into fc-tmsh |
734
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
479 instead) plus a pair of "in vivo" FFS editing agent target binaries that run on |
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
480 the target by way of fc-xram. Our current FC host tools fully supplant the |
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
481 ancient version in that 2014 kit, and our current replacement for the ancient |
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
482 FFS editing agent is this new version: |
431
579441d7dcd8
doc/TIFFS-Overview: long-overdue update for the current state of FC
Mychaela Falconia <falcon@freecalypso.org>
parents:
0
diff
changeset
|
483 |
734
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
484 https://www.freecalypso.org/hg/ffs-editor/ |
0
e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
485 |
734
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
486 The new FFS editing agent linked above is run via fc-xram, while it is running |
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
487 you communicate with it via rvinterf (launched directly from fc-xram as the 2nd |
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
488 program), and you can run fc-fsio against it to perform whatever actual FFS |
23f41a61ff7a
doc/TIFFS-Overview: update for new developments
Mychaela Falconia <falcon@freecalypso.org>
parents:
482
diff
changeset
|
489 manipulations are needed. |