FreeCalypso > hg > freecalypso-citrine
comparison doc/Compal-Howto @ 28:cb00b90edaff
documentation write-ups imported from freecalypso-sw and updated for Citrine
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Sun, 12 Jun 2016 18:28:35 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 27:3ecd6054a7f7 | 28:cb00b90edaff |
|---|---|
| 1 FreeCalypso Citrine firmware on Mot C11x/12x and C139/140 families | |
| 2 ================================================================== | |
| 3 | |
| 4 NOTE: this write-up refers specifically to our work-in-progress Citrine fw. | |
| 5 The tcs211-c139 hack which we have produced in late 2015 is an entirely | |
| 6 different animal. | |
| 7 | |
| 8 Unlike tcs211-c139, Citrine can run equally "well" on both our preferred | |
| 9 C139/140 platform and the more primitive C11x/12x, but this fw is currently | |
| 10 much more limited: | |
| 11 | |
| 12 * tcs211-c139 includes TI's demo/prototype UI code and an LCD driver that works | |
| 13 with C139/140 LCD hardware; Citrine currently has no UI code at all, | |
| 14 expecting control via AT commands via the same serial cable you use for | |
| 15 flashing it. | |
| 16 | |
| 17 * TCS211 is TI's official production-quality firmware for the Calypso, whereas | |
| 18 our Citrine fw is only beginning to catch up to it - see the Current_Status | |
| 19 article for more information. | |
| 20 | |
| 21 The phones in this family have very little RAM: 256 KiB of Calypso on-chip RAM | |
| 22 (IRAM) on all variants, plus another 256 KiB of board-level RAM (XRAM) on | |
| 23 C11x/12x or 512 KiB of XRAM on C139/140. The tcs211-c139 port uses almost all | |
| 24 available IRAM and XRAM on the C139, hence porting it to C11x with even less | |
| 25 RAM was completely out of the question. Citrine currently has a lot less | |
| 26 functionality integrated, which naturally translates to lower memory | |
| 27 requirements - hence it is possible to build for the C11x. | |
| 28 | |
| 29 Because RAM is so precious on these feeble targets, running our own fw on them | |
| 30 absolutely requires flashing - fc-xram is not an option. Furthermore, we cannot | |
| 31 use an FFS-in-RAM configuration like we do on large-XRAM targets, and Motorola's | |
| 32 original FFS (flash file system) on these phones is not suitable for our needs - | |
| 33 unlike the situation on Openmoko modems. Therefore, we need to create and | |
| 34 maintain our own aftermarket FFS in a region of the device's flash memory which | |
| 35 we arbitrarily choose ourselves. | |
| 36 | |
| 37 If you are going to play with FreeCalypso firmwares on Mot C1xx targets, we | |
| 38 recommend that you devote a phone specifically for FreeCalypso and have another | |
| 39 phone to charge batteries. The process of flashing our firmware and creating | |
| 40 and maintaining the necessary aftermarket FFS on these targets is quite | |
| 41 involved, hence flashing a given phone back and forth between FreeCalypso and | |
| 42 Mot/Compal's official firmwares would be a total pita. However, none of our | |
| 43 firmwares (neither this one nor tcs211-c139) currently has working battery | |
| 44 charging code, hence you will need to use another phone running one of the | |
| 45 official fw versions to charge batteries. | |
| 46 | |
| 47 Compiling | |
| 48 ========= | |
| 49 | |
| 50 The starting configuration file for building Citrine for targets in this family | |
| 51 is configs/c139-gsm-flash. If your phone is a C139 or C140, this default | |
| 52 config can be used as-is, although you are always welcome to edit it to taste. | |
| 53 If your phone is C11x or C12x, change the target setting from c139 to c11x. | |
| 54 | |
| 55 The two numbers on the 'feature aftermarket-ffs' line select the region of | |
| 56 flash where our aftermarket FFS will be placed. The default configuration | |
| 57 places our FFS in the region from 0x3C0000 through 0x3EFFFF. This configuration | |
| 58 is recommended because: | |
| 59 | |
| 60 * it does not conflict with the FFS maintained by Mot/Compal's fw (the two | |
| 61 locations are different), eliminating the possibility of one firmware trying | |
| 62 to use the FFS created by the other; | |
| 63 | |
| 64 * it is placed at the very end of the flash (or rather at the end of the main | |
| 65 flash zone with 64 KiB sectors), maximizing the room available for the | |
| 66 firmware code image. | |
| 67 | |
| 68 NOTE 1: our aftermarket FFS code cannot use 8 KiB flash sectors at the chip's | |
| 69 highest addresses. Therefore, the sectors with factory data (which we don't | |
| 70 know how to grok) are safely left untouched by our fw. | |
| 71 | |
| 72 NOTE 2: if your phone is a C11x/12x variant with 2 MiB of flash (some have | |
| 73 2 MiB, others have 4 MiB), directing the firmware to put its FFS at 0x3C0000 | |
| 74 will result in it being at 0x1C0000 in reality - the highest address bit does | |
| 75 nothing when the flash chip only has 2 MiB. | |
| 76 | |
| 77 NOTE 3: if your phone is C139/140, keeping the aftermarket FFS at 0x3C0000 is | |
| 78 doubly recommended as that is the location used by our tcs211-c139 build. | |
| 79 | |
| 80 Flashing | |
| 81 ======== | |
| 82 | |
| 83 The flashing procedures can be divided into two parts: the steps which you need | |
| 84 to perform only once when you first convert a given phone from Mot/Compal's fw | |
| 85 to FreeCalypso vs. the steps which you need to perform each time you wish to | |
| 86 flash another image you just compiled. | |
| 87 | |
| 88 If you are starting with a "virgin" phone that never ran FreeCalypso before, | |
| 89 you will need to start by breaking in with fc-loadtool and possibly tfc139 - | |
| 90 see the Compal-unlock article in the FreeCalypso host tools package for more | |
| 91 details. Once you are in with loadtool and have made a backup of your original | |
| 92 flash content, your first step will be to reflash sector 0 (the dangerous one) | |
| 93 with a version of the bootloader code that has been patched to transfer control | |
| 94 to the main fw image in the way we need: | |
| 95 | |
| 96 loadtool> flash erase-program-boot compal-flash-boot-for-fc.bin | |
| 97 | |
| 98 The compal-flash-boot-for-fc.bin code image can be downloaded here: | |
| 99 | |
| 100 ftp://ftp.freecalypso.org/pub/GSM/FreeCalypso/compal-flash-boot-for-fc.bin | |
| 101 | |
| 102 It was made from one of Mot/Compal's original versions by applying a binary | |
| 103 patch to it; the source for this patch can be found in the retired | |
| 104 freecalypso-sw source repository on Bitbucket. | |
| 105 | |
| 106 This step of replacing the bootloader needs to be done only once - you don't | |
| 107 need to reflash this dangerous sector again when you reflash the main fw image. | |
| 108 The patched FreeCalypso bootloader is also the same for both the present Citrine | |
| 109 fw and tcs211-c139. | |
| 110 | |
| 111 The next step is to flash the main firmware image which you have just compiled: | |
| 112 | |
| 113 loadtool> flash erase 0x10000 0x160000 | |
| 114 loadtool> flash program-bin 0x10000 finlink/flashImage.bin | |
| 115 | |
| 116 Note that the main fw image is flashed at 0x10000 on these targets. It is | |
| 117 flashed at 0 on sane targets with the Calypso boot ROM enabled in the hardware, | |
| 118 but Compal phones have malicious wiring in their PCBs that makes them brickable | |
| 119 and imposes the requirement of having working boot code in sector 0 at all | |
| 120 times, with the main fw image pushed down to 0x10000. | |
| 121 | |
| 122 Finally, you should erase the flash region which you have allocated for the | |
| 123 aftermarket FFS: | |
| 124 | |
| 125 loadtool> flash erase 0x3C0000 0x30000 | |
| 126 | |
| 127 or if your phone only has 2 MiB of flash: | |
| 128 | |
| 129 loadtool> flash erase 0x1C0000 0x30000 | |
| 130 | |
| 131 Now you can close your loadtool session with an exit command, and the phone | |
| 132 will be cleanly powered off. | |
| 133 | |
| 134 The next time you need to reflash another FreeCalypso image, get in with | |
| 135 loadtool like this: | |
| 136 | |
| 137 fc-loadtool -h compal /dev/ttyXXX | |
| 138 | |
| 139 There is no more need for tfc139 or for the inefficient -c 1003 option to | |
| 140 fc-loadtool once you've replaced the bootloader with compal-flash-boot-for-fc. | |
| 141 Once you are in loadtool, just reflash the main fw image, and leave the | |
| 142 bootloader and FFS sectors alone. | |
| 143 | |
| 144 First boot of the firmware | |
| 145 ========================== | |
| 146 | |
| 147 Connect the serial cable, but instead of running fc-loadtool, run rvinterf. | |
| 148 Press the red power button on the phone briefly just like you would for | |
| 149 fc-loadtool entry. Because there is no fc-loadtool running on the host end of | |
| 150 the serial cable, the boot path will *not* be diverted in the bootloader, and | |
| 151 the main fw image will run - and this time it will be the FreeCalypso firmware | |
| 152 you have compiled and flashed. The phone's LCD will remain dark as there is no | |
| 153 LCD driver code in this firmware, but you will see trace output in the rvinterf | |
| 154 window, telling you that the fw is running. | |
| 155 | |
| 156 Before you do anything else, you will need to run fc-fsio and initialize the | |
| 157 aftermarket FFS for our firmware. When running on Openmoko GTA0x and Pirelli | |
| 158 DP-L10 targets, our fw can use the original factory-programmed IMEISV and RF | |
| 159 calibration values (partial in the case of the Pirelli), but on Mot/Compal | |
| 160 phones these factory data are stored in a format which we haven't been able to | |
| 161 grok, hence we cannot make use of them. Therefore, you will have to set your | |
| 162 own IMEISV manually, and the radio will run uncalibrated. | |
| 163 | |
| 164 Initialize your aftermarket FFS as follows: | |
| 165 | |
| 166 fsio> format / | |
| 167 fsio> mk-std-dirs | |
| 168 fsio> set-imeisv fc XXXXXXXX-YYYYYY-ZZ (punctuation optional, place anywhere) | |
| 169 fsio> set-rfcap dual-eu (if you have 900+1800 MHz hardware) | |
| 170 or | |
| 171 fsio> set-rfcap dual-us (if you have 850+1900 MHz hardware) | |
| 172 | |
| 173 After you've initialized your FFS as above, you can exit fc-fsio, run fc-shell | |
| 174 and try some AT commands: | |
| 175 | |
| 176 AT+CMEE=2 -- enable verbose error responses | |
| 177 AT+CFUN=1 -- enable radio and SIM interfaces | |
| 178 AT+COPS=0 -- register to the default GSM network | |
| 179 | |
| 180 When you are done, you can power the phone off by sending a 'poweroff' command | |
| 181 through fc-shell. The only other way is to yank the battery, and doing the | |
| 182 latter is recommended anyway: when a phone with the present hack-firmware | |
| 183 flashed into it is powered off but still has the battery inserted, even a | |
| 184 momentary accidental press of the power button will cause it to power on and | |
| 185 boot, but there will be absolutely no visual indication, as the LCD stays dark. | |
| 186 | |
| 187 FreeCalypso GSM firmware on Mot C155/156 | |
| 188 ======================================== | |
| 189 | |
| 190 One major difference between Mot C155/156 and the other two subfamilies is that | |
| 191 C155 and C156 have 2 MiB of XRAM, which is large enough to allow our small-ish | |
| 192 experimental firmware to run entirely from RAM, without flashing, just like on | |
| 193 the Pirelli DP-L10. | |
| 194 | |
| 195 If you are ready to play with our experimental GSM pseudo-modem fw on your | |
| 196 C155/156, the steps are as follows: | |
| 197 | |
| 198 1. Build the firmware in the c155-gsm-ramonly configuration - see the | |
| 199 Compiling document for more details. | |
| 200 | |
| 201 2. Connect your serial or USB-serial cable as usual; the phone needs to be | |
| 202 powered off at this point. | |
| 203 | |
| 204 3. Run a command like the following: | |
| 205 | |
| 206 fc-xram -h c155 /dev/ttyUSB0 finlink/ramImage.srec rvinterf | |
| 207 | |
| 208 If you are using an official FreeCalypso USB-serial cable from UberWaves, | |
| 209 you can speed up the code download by switching the serial line to 812500 | |
| 210 baud: | |
| 211 | |
| 212 fc-xram -h c155 -B 812500 /dev/ttyUSB0 finlink/ramImage.srec rvinterf | |
| 213 | |
| 214 Adjust the paths to your /dev/ttyUSBx or other serial device and your | |
| 215 ramImage.srec as appropriate, and add rvinterf logging or other options as | |
| 216 desired. Specifying rvinterf on the fc-xram command line directs fc-xram to | |
| 217 exec rvinterf and pass the serial channel to it immediately as soon as the | |
| 218 code image has been loaded into target RAM and jumped to; this direct | |
| 219 passing of the serial channel from fc-xram to rvinterf is appropriate | |
| 220 because the loaded fw will immediately start emitting binary trace packets | |
| 221 in TI's RVTMUX format. | |
| 222 | |
| 223 4. Momentarily press the red power button on the phone. | |
| 224 | |
| 225 Once the phone executes its boot code with fc-xram running, the boot path will | |
| 226 be diverted and our experimental firmware will be loaded into target device RAM | |
| 227 and jumped to. Our fw will now run, and the rvinterf process on the host will | |
| 228 maintain communication with it. | |
| 229 | |
| 230 Just like on the lower Mot/Compal subfamilies, we don't know how to extract the | |
| 231 factory-programmed IMEI and RF calibration data from Mot/Compal's proprietary | |
| 232 flash data structures, therefore, when our RAM-based firmware boots, it has no | |
| 233 IMEI and no RF calibration. Because this RAM-only configuration leaves the | |
| 234 flash completely alone and does not create a non-volatile FFS there, you will | |
| 235 need to set the IMEISV and RFCAP with fc-fsio on each boot. See the fc-fsio | |
| 236 commands given earlier, but skip the format command as the RAM-based FFS is | |
| 237 automatically formatted - but not otherwise initialized - upon firmware boot. |
