comparison doc/C1xx-flashing @ 23:2df287f4722c

doc/C1xx-flashing: article written
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 11 Jun 2023 09:55:27 +0000
parents
children b71216a5f3c3
comparison
equal deleted inserted replaced
22:873d5f33e8f3 23:2df287f4722c
1 Whether you are interested in FreeCalypso VPM firmware (the main use case for
2 FC aftermarket fw that has actual utility value for GSM network testing etc) or
3 the UI-enabled FC firmware for Mot C139 that is currently just a preview (and
4 is not expected to advance to actual usability any time soon), either way these
5 firmwares need to be flashed. All FC firmware offerings for Mot C1xx have
6 always required flashing, and various instructions have been published in the
7 past. However, old FC-on-C1xx flashing instructions should not be used with
8 current firmware versions, because of these new developments:
9
10 * Our current fw relies even more than it did before on having certain files in
11 FFS, hence populating the flash with not only the fw image, but also the FFS
12 content it needs has become more important than ever before.
13
14 * For FC-on-C1xx configurations with 4 MiB flash, including the most important
15 case of C139, the FFS location changed from the old one in Magnetite and
16 Selenite to a new one in Tourmaline. Therefore, old FFS instructions have to
17 be invalidated.
18
19 The present fc-am-toolkit package provides a new way to flash FC firmware images
20 and initialize their associated FFS in one go, and this document provides
21 instructions.
22
23 Step 1: install software on your host machine
24 =============================================
25
26 The host machine (PC or laptop) which you are going to use to drive the phone
27 flashing process will need to have the following FreeCalypso software packages
28 installed on it:
29
30 1) FC host tools base package:
31
32 ftp://ftp.freecalypso.org/pub/GSM/FreeCalypso/fc-host-tools-latest.tar.bz2
33
34 2) FFS data bundle add-on:
35
36 ftp://ftp.freecalypso.org/pub/GSM/FreeCalypso/ffs-data-bundle-latest.tar.bz2
37
38 3) The present fc-am-toolkit package.
39
40 All 3 packages install all of their files under the /opt/freecalypso directory
41 tree defined by the Mother, and you only need to do this host software
42 installation once (or when updates come out), irrespective of how many phones
43 of various kinds you are going to flash or otherwise work with.
44
45 Step 2: read and save your phone's current flash
46 ================================================
47
48 You will need to create a dedicated project directory for each individual phone
49 you are going to reflash to FreeCalypso, or on which you may contemplate the
50 possibility of such reflashing. This per-phone project directory will contain
51 a record of the phone's IMEI, a dump (backup) of the original flash content,
52 bits of data extracted from that flash dump with tools in the present package,
53 generated command scripts for flashing FC firmware and for restoring the
54 original flash, and some other script-generated files - read the shell script
55 code if you want to know the full details.
56
57 In previous instructions I advised users to name this per-phone project
58 directory after the IMEI, i.e., to use the IMEI as the directory name. I no
59 longer recommend that approach, and it no longer makes sense with the current
60 fc-am-toolkit design as the IMEI will be stored in a text file inside the
61 per-phone project directory, rather than in the directory name. So please name
62 your project directories in whatever way makes sense for your situation.
63
64 Once you have created your per-phone project directory, please cd into it, and
65 with that directory as current, run fc-loadtool as appropriate for your C1xx
66 phone model:
67
68 fc-loadtool -h compal /dev/ttyXXX -- for C11x/12x
69 fc-loadtool -h compal -c 1004 /dev/ttyXXX -- for C139/140
70 fc-loadtool -h c155 /dev/ttyXXX -- for C155/156
71
72 These simple instructions are valid for C1xx phones with unlocked bootloaders.
73 If your bootloader is locked, you will need to break in with tfc139 instead.
74 There are other documentation articles in FreeCalypso that describe tfc139
75 break-in method.
76
77 These instructions also assume that you already know how to operate fc-loadtool
78 on a basic level. If not, here is a basic summary: to make an entry with
79 fc-loadtool, you need to start with the phone turned off - but the battery
80 needs to be inserted, and preferably have a full charge. You need to run the
81 fc-loadtool command shown above (change /dev/ttyXXX to the correct serial or
82 USB-serial device in your setup) with the cable connected between your PC/laptop
83 and your phone's headset jack _and with the phone turned off_. When you run
84 fc-loadtool in this state, it will sit there, waiting for PROMPT1 from the
85 phone's bootloader. Once fc-loadtool is running in that state and the cable is
86 correctly inserted on the phone end, press the red power button on the phone -
87 a momentary press is sufficient and recommended.
88
89 Once you have landed at the loadtool> prompt, make a dump of your flash as
90 follows:
91
92 loadtool> flash dump2bin flashdump.bin
93
94 The dump file needs to be named flashdump.bin - at least in the case of C11x/12x
95 subfamily, there is one script in the fc-am-toolkit shell script hierarchy that
96 looks for this original flash image under this specific name.
97
98 Once the flash dump operation finishes, issue this additional command:
99
100 loadtool> flash compal-imei IMEI
101
102 This command tells fc-loadtool to retrieve the phone's factory IMEI from OTP
103 cells (the flash chip's OTP protection register) and save it into a text file
104 named "IMEI". The file name is important - scripts that follow will look for
105 the IMEI in the file with this name.
106
107 IMEI retrieval needs to be done with this extra command because of the location
108 where this factory datum is stored. On Compal phones the factory IMEI is not
109 stored anywhere at all in the flash image (in the main byte array held by the
110 flash memory chip), instead it is stored in an out-of-band location (OTP cells,
111 meaning physically immutable once written) in the flash chip's protection
112 register. Therefore, this factory IMEI cannot be extracted from a captured
113 flash image - instead it needs to be read in a separate explicit step and saved
114 alongside the flash image.
115
116 Once you have captured both flashdump.bin and IMEI, close your fc-loadtool
117 session by issuing an "exit" command at the loadtool> prompt. The phone will
118 return to its powered-off state.
119
120 Step 3: analyze the flash image you just captured
121 =================================================
122
123 Run this command:
124
125 c1xx-analyze-image flashdump.bin
126
127 This command runs a shell script, which then invokes several different programs
128 that analyze various aspects of the flash image. Your current directory when
129 running the above script command needs to be the per-phone project directory,
130 and the script will create the following items:
131
132 * A subdirectory named rfasc will contain extracted RF calibration values in
133 FreeCalypso RF table ASCII format, which is both human- and machine-readable.
134 This directory is not used by any subsequent fc-am-toolkit scripts, but if
135 you have the mind of an engineer, you may find its content interesting.
136
137 * Another subdirectory named rfbin will contain the same data as rfasc, but in
138 the firmware's internal binary format. This subdir will be used by subsequent
139 scripts.
140
141 * A text file named restore-flash will contain a generated command script for
142 fc-loadtool - executing this script will restore the flash image in
143 flashdump.bin back into your phone's flash, i.e., restore your phone back to
144 its original state after playing with FreeCalypso.
145
146 Step 4: prepare FC firmware flashing command script
147 ===================================================
148
149 This step is the first one where you need the FC firmware image you seek to
150 flash - previous steps didn't need one. You can flash a firmware image which
151 you compiled yourself from source, or an official build you downloaded as part
152 of a tarball release - either way, you need the fwimage.bin file that
153 corresponds to your hardware model (c11x, c139 or c155) and your desired
154 functional configuration as in VPM or UI preview firmware.
155
156 VERY IMPORTANT: You need to be very certain of which C1xx subfamily your phone
157 belongs to; the 3 subfamilies known to us are C11x/12x, C139/140 and C155/156.
158 Firmware images are NOT interchangeable between these 3 hw subfamilies! C11x
159 and C139 are distinguished by their LCD type (monochrome on C11x, color on
160 C139); C155/156 have a distinct visual appearance, but they also have 8 MiB
161 flash which no other subfamily in this set uses, and our c1xx-analyze-image
162 script looks at the image size. Verbose notes printed by that script should
163 agree with your own knowledge of which phone subfamily you are working with -
164 if there is a discrepancy, STOP RIGHT HERE and ask for expert help.
165
166 Once you have confirmed your phone model/subfamily and selected the firmware
167 image you are going to flash, execute one of the following shell scripts:
168
169 c11x-gen-fc-script path/to/fwimage.bin
170 c139-gen-fc-script path/to/fwimage.bin
171 c155-gen-fc-script path/to/fwimage.bin
172
173 Each script variant works the same way for its respective C1xx subfamily, and
174 all have the same invokation rules: the current directory needs to be your
175 per-phone project directory containing flashdump.bin and IMEI files and the
176 rfbin subdirectory produced in steps 2 and 3, and the script adds to this
177 project directory.
178
179 The main result of executing the script command above will be a text file named
180 fc-flash-script; this text file is a command script for fc-loadtool that
181 reflashes your phone to the FreeCalypso fw image you have selected. The fw
182 image pathname you gave to {c11x,c139,c155}-gen-fc-script will be contained
183 inside the generated fc-flash-script - but in addition to referencing that fw
184 image, the generated loadtool command script also contains instructions for
185 programming fc-ffs.bin into the phone along with the firmware. This fc-ffs.bin
186 image is also generated by the shell script you just ran, and it is specific to
187 your individual phone: your IMEI and extracted RF calibration values go into it.
188
189 Step 5: actually flash your phone
190 =================================
191
192 This step is the actual surgery - all previous steps merely manipulated data in
193 files in your project directory on your host machine. To perform the flashing
194 surgery, do the following:
195
196 * Using the phone's original firmware as the charging agent (the thing you plug
197 in is not the charger, it is the charging power source; the charger circuit
198 is inside the phone, and the firmware is the entity that controls the flow of
199 current from the charging power source into the battery), make sure that your
200 battery is fully charged. The flashing process does not require a ton of
201 battery power, but the last thing you want is to have your battery run out
202 while you are in the middle of the flashing operation.
203
204 * Make entry with fc-loadtool just like you did in step 2, when you made a dump
205 of the original flash content.
206
207 * Once you are at the loadtool> prompt, issue this command:
208
209 exec fc-flash-script
210
211 In this step you are basically telling fc-loadtool to execute the command script
212 that was prepared in step 4. This script performs all necessary flash erasure
213 and programming operations - having a previously prepared script do everything
214 in one go greatly reduced the chances of leaving your phone in an invalid
215 partially flashed state due to operator distraction or other human errors.
216 Once the flashing script finishes executing, exit loadtool and your phone will
217 power off. Next time this reflashed phone executes hardware switch-on (power
218 button press or charging power plug-in while off), your firmware will boot!
219
220 Restoring the original firmware and full flash content
221 ======================================================
222
223 To restore the flash to its original state, do the same procedure as above, but
224 run 'exec restore-flash' instead of 'exec fc-flash-script' - just execute a
225 different flashing command script.
226
227 IMPORTANT NOTE: Do NOT attempt to transplant complete flash images (not just
228 the firmware portion, but the whole thing) from one phone to another! For
229 maximal restorative power, the loadtool command script generated by
230 c1xx-analyze-image (named restore-flash) restores the entire flash image, every
231 bit without exceptions - but this quality also makes the {flashdump.bin +
232 restore-flash script} package non-transplantable, i.e., it should NOT be
233 programmed into a different phone. Each individual phone has its own unique RF
234 calibration values and other factory tunings, stored in small sectors at the end
235 of the flash (after the firmware), and these bits should never be mindlessly
236 transplanted from one phone to another.
237
238 The firmware portion (part of the flash up to a certain model-dependent offset)
239 CAN be transplanted from one phone to another, and such copying of certain
240 "good" official Motorola fw versions is often quite useful - but such procedures
241 are a different topic from what the present document is addressing, which is
242 providing less expert users with a fool-proof way to play with FreeCalypso fw
243 and then restore their phones to the original state.
244
245 Flash process interruptions and recovery
246 ========================================
247
248 All C1xx phones are brickable: if you give wrong flash write commands to
249 fc-loadtool, it is quite easy to brick the phone's boot sector beyond recovery.
250 As a departure from previous FreeCalypso flashing instructions, in the present
251 flow you never enter any flash commands manually in loadtool - instead you
252 execute a loadtool command script that was generated by official shell scripts
253 in the present package.
254
255 Because the boot sector still needs to be rewritten (the command that does so
256 is part of the generated fc-flash-script and restore-flash scripts), a very
257 small bricking vulnerability window still exists - but this window is on the
258 order of a few tens of milliseconds. Furthermore, in order for the phone to
259 get bricked, the unfortunate event happening in that short vulnerability window
260 would have to be someone physically yanking the battery out of the phone at
261 that exact moment, or the battery running out or falling out, again at that
262 exact moment in a time window that spans maybe 100 ms at the most. There is
263 absolutely NO bricking vulnerability window in terms of the serial cable
264 disconnecting or the host machine crashing - those events can happen at any
265 moment in time and do NOT create bricking danger.
266
267 However, if the flashing process as a whole (on the order of a few minutes if
268 you are using "slow" 115200 baud rate) gets interrupted for whatever reason,
269 you will get a partially flashed phone, which may at first glance appear to be
270 bricked. But as long as the boot sector is good - and it will be good if you
271 haven't hit the worst-case scenario as above - you can still recover. To
272 recover from a flashing process that got interrupted in the middle, follow this
273 sequence:
274
275 * Return the phone to its powered-off state by removing and reinserting the
276 battery. Very important: do NOT press the power button or plug in charging
277 power after reinserting battery until instructed to do so below; if you mess
278 up, remove the battery again, reinsert it, and be careful this time to NOT
279 press the power button prematurely.
280
281 * With the phone off and the battery freshly removed and reinserted, connect
282 the headset jack serial cable and run fc-loadtool with the right arguments.
283
284 * Momentarily press the power button.
285
286 fc-loadtool should now make its entry and land you at the loadtool> prompt.
287 At this point you re-issue the 'exec fc-flash-script' or 'exec restore-flash'
288 command as per the direction of desired transition, and hopefully complete this
289 time.
290
291 Battery charging
292 ================
293
294 If your phone happens to be in the messed-up state caused by interrupted
295 flashing, charging will not work in this state: you can only use whatever power
296 is left in the battery, or swap in another battery, perhaps charged in another
297 phone. This consideration is the main reason why you should fully charge your
298 battery before starting a firmware flashing operation. Don't ever plug the
299 charging power source into a phone with (temporarily) messed-up firmware: it
300 won't do any actual charging (which requires charging control managed by fw),
301 but it will mess up your ability to make fc-loadtool entry for recovery.
302
303 One of the benefits of the current flashing procedure, with the firmware and a
304 fully prepared FFS image flashed in one go, is that once converted to
305 FreeCalypso, the phone regains its charging ability right away. With previous
306 instructions that called for flashing just the firmware and then formatting and
307 initializing FFS with fc-fsio, there was a longer window in which the phone is
308 not capable of charging its battery.
309
310 When the phone is in flashed FC firmware state, flashed correctly by following
311 the present instructions, it _is_ capable of charging: simply plug in charging
312 power, and charging will proceed much like it does in standard phones. This
313 aspect holds for VPM firmwares too, not just the UI-enabled version - although
314 the only way to see the progress state of the charging process is by watching
315 the debug trace output or querying the firmware with AT%CBC (a private AT
316 command) and knowing how to interpret the cryptic result it returns.
317
318 A warning is needed, however: FC-fw-driven battery charging on C1xx phones is
319 not carefully tuned, and what our fw aims for as "full charge" may actually be
320 either an undercharge or an overcharge. Significant overcharge appears to be
321 unlikely - the available evidence suggests that undercharge is a little more
322 likely - but the possibility of overcharge (which is very bad for battery
323 health) cannot be ruled out. You've been warned!