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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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.