FreeCalypso > hg > fc-selenite
comparison doc/Compiling @ 109:a68c6c7942d7
doc: basic build documentation written
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Tue, 24 Jul 2018 23:55:24 +0000 |
| parents | |
| children | 4238e3220682 |
comparison
equal
deleted
inserted
replaced
| 108:af6b7fcf7823 | 109:a68c6c7942d7 |
|---|---|
| 1 Selecting and preparing the compiler environment | |
| 2 ================================================ | |
| 3 | |
| 4 FreeCalypso Selenite firmware can be built with two different compiler | |
| 5 toolchains: either with TI's original TMS470 compiler or with gcc. Transition | |
| 6 to compiling with gcc is a very bold move with very heavy fallout, and many | |
| 7 parts of the fw are still broken or destabilized when built with gcc instead of | |
| 8 the original compiler they were developed with, thus for the foreseeable future, | |
| 9 anyone who aspires to be a FreeCalypso developer will need to compile our fw in | |
| 10 both ways, compare the behaviour of the two versions, and work toward making | |
| 11 the gcc-built version perform as well as the TMS470-built one. Thus you need | |
| 12 to have both compiler toolchains installed and working - see the | |
| 13 Toolchain-setup-470 and Toolchain-setup-gcc articles for the instructions. | |
| 14 | |
| 15 Compiling the local helper utilities | |
| 16 ==================================== | |
| 17 | |
| 18 (cd helpers; make) | |
| 19 | |
| 20 Do the above. Most of the build helper scripts used in the FC Selenite build | |
| 21 system are written in Bourne shell, but a few were easier to implement in C. | |
| 22 You need to compile these C helper utilities before you can run an actual FC | |
| 23 Selenite firmware build, but these utilities are totally ad hoc and specific | |
| 24 to the needs of our fw build system, hence they are not meant to be installed | |
| 25 globally on your system - instead they stay within the fc-selenite tree. You | |
| 26 just need to run make in the helpers directory once before any actual firmware | |
| 27 builds. | |
| 28 | |
| 29 Actually building the firmware | |
| 30 ============================== | |
| 31 | |
| 32 To build our FC Selenite firmware for your hw target of interest in the default | |
| 33 configuration, run a command like this from the top level of the fc-selenite | |
| 34 tree: | |
| 35 | |
| 36 ./configure-gcc.sh fcdev3b | |
| 37 | |
| 38 or | |
| 39 | |
| 40 ./configure-tms470.sh fcdev3b | |
| 41 | |
| 42 As of this writing, the following hardware targets are supported: | |
| 43 | |
| 44 c11x Motorola C11x/12x | |
| 45 c139 Motorola C139/140 | |
| 46 fcdev3b FreeCalypso FCDEV3B | |
| 47 gtamodem The Calypso GSM/GPRS modem in Openmoko GTA01/02 smartphones | |
| 48 pirelli Pirelli DP-L10 | |
| 49 | |
| 50 Notice the difference from FC Magnetite: there is no "configuration name" | |
| 51 argument after the target name. Because FC Selenite does not include any UI | |
| 52 code (modem functionality only) and does not offer different versions of | |
| 53 various fw components the way Magnetite does, it does not have named | |
| 54 configurations in the same sense as Magnetite. Instead any configuration | |
| 55 tweaks are done via var=value optional arguments on the configure command line | |
| 56 after the required target name argument; the following variables are currently | |
| 57 available for tweaking: | |
| 58 | |
| 59 ALLOW_CSIM_GSM | |
| 60 | |
| 61 Per TI's original design, the AT+CSIM command does not allow GSM APDUs | |
| 62 of class 0xA0. Openmoko found some need for them, and they patched | |
| 63 their modem fw to allow these APDUs with AT+CSIM. With our new hybrid | |
| 64 modem fw this policy setting is configurable at build time; the default | |
| 65 is ALLOW_CSIM_GSM=1 (GSM APDUs allowed). | |
| 66 | |
| 67 DISABLE_SLEEP | |
| 68 | |
| 69 The general default is DISABLE_SLEEP=0, and the firmware automatically | |
| 70 enables all of the chipset's available sleep modes on boot. Setting | |
| 71 DISABLE_SLEEP=1 causes all sleep modes to be disabled by default on | |
| 72 boot (they can still be enabled with the AT%SLEEP command); this | |
| 73 setting is needed for FCDEV3B V1 boards that have a hardware bug that | |
| 74 causes breakage when sleep modes are enabled. | |
| 75 | |
| 76 FCHG_STATE | |
| 77 | |
| 78 This setting enables or disables the FCHG battery charging driver. By | |
| 79 default it is enabled on targets that have battery charging hardware | |
| 80 (c11x, c139, pirelli) and disabled on those that don't have such hw | |
| 81 (fcdev3b, gtamodem). | |
| 82 | |
| 83 GPRS | |
| 84 | |
| 85 Self-explanatory: enables or disables GPRS. By default GPRS is enabled | |
| 86 on proper modem hw targets (fcdev3b and gtamodem) and disabled on c11x, | |
| 87 c139 and pirelli. | |
| 88 | |
| 89 L1_DYN_DSP_DWNLD | |
| 90 | |
| 91 This setting enables TI's dynamic DSP patch download mechanism. When | |
| 92 the firmware is built for a Calypso target with DSP ROM version 36 in | |
| 93 the silicon (all FreeCalypso-made hw and most of the supported legacy | |
| 94 targets), L1_DYN_DSP_DWNLD is enabled by default and needs to be kept | |
| 95 enabled for correct operation: the patch code we got from TI for this | |
| 96 ROM is the dynamic download version, and the ARM-side L1 code expects | |
| 97 all of these patches to be present, both the static part and the | |
| 98 dynamic parts. However, one can build our fw with L1_DYN_DSP_DWNLD=0 | |
| 99 for experimental testing, to see what breaks when the dynamic patches | |
| 100 are omitted. | |
| 101 | |
| 102 L1_VOICE_MEMO_AMR | |
| 103 | |
| 104 This setting enables or disables support in L1 and in the RiViera Audio | |
| 105 Service for AMR voice memo recording and playback. This code has not | |
| 106 been properly studied yet and no test AT commands are provided for it, | |
| 107 but it is enabled by default like in TI's original TCS211 fw. | |
| 108 | |
| 109 MELODY_E2 | |
| 110 | |
| 111 This setting enables or disables support in L1 and in the RiViera Audio | |
| 112 Service for playing E2-format melodies. The default is MELODY_E2=1 | |
| 113 like in TI's original TCS211 fw. Note that Melody E1 support is always | |
| 114 enabled; setting MELODY_E2=0 disables only Melody E2, but not E1. | |
| 115 | |
| 116 MEMSUPER | |
| 117 | |
| 118 This setting enables the memory supervision feature in TI's GPF and in | |
| 119 the G23M protocol stack built on top of it. This code has not been | |
| 120 properly studied yet; play with it at your own risk. | |
| 121 | |
| 122 SERIAL_DYNAMIC_SWITCH | |
| 123 | |
| 124 TI's TCS211 fw includes a provision (only for Bluetooth-enabled fw in | |
| 125 TI's original) to switch one UART between the AT command interface and | |
| 126 RVTMUX while the other UART is fixed for Bluetooth. In FreeCalypso we | |
| 127 have changed this code to work without Bluetooth, for the purpose of | |
| 128 switching the user-facing MODEM UART between AT commands and RVTMUX, | |
| 129 but the mechanism does not work properly yet and is disabled by default. | |
| 130 Enable it with SERIAL_DYNAMIC_SWITCH=1 if you would like to play with | |
| 131 it. | |
| 132 | |
| 133 SPEECH_RECO | |
| 134 | |
| 135 This setting enables or disables support in L1 and in the RiViera Audio | |
| 136 Service for TI's speech recognition mechanism. This code and the | |
| 137 underlying DSP facility itself have not been properly studied yet and | |
| 138 no test AT commands are provided for it, but it is enabled by default | |
| 139 like in TI's original TCS211 fw. | |
| 140 | |
| 141 SRVC | |
| 142 | |
| 143 TI's original config variable, selects the presence or absence of data | |
| 144 services other than GPRS as follows: | |
| 145 | |
| 146 SRVC=0: voice and SMS only | |
| 147 SRVC=1: CSD and fax enabled | |
| 148 SRVC=2: CSD enabled, but not fax | |
| 149 | |
| 150 The default is SRVC=1 (fax and data enabled) for proper modem hw targets | |
| 151 (fcdev3b and gtamodem) and SRVC=0 (voice and SMS only) on c11x, c139 | |
| 152 and pirelli. | |
| 153 | |
| 154 SUFFIX | |
| 155 | |
| 156 This setting is solely for configuration management. If you make a | |
| 157 build with any of the settings described in this document changed from | |
| 158 the default, you should also pass a SUFFIX=-xxx argument so your special | |
| 159 build will be appropriately identified in the build directory name and | |
| 160 in the firmware version ID string compiled into the image. The naming | |
| 161 of suffixes is up to you, but here are some examples: | |
| 162 | |
| 163 L1_DYN_DSP_DWNLD=0 SUFFIX=-nodyn | |
| 164 MELODY_E2=0 SUFFIX=-noe2 | |
| 165 MEMSUPER=2 SUFFIX=-ps | |
| 166 SERIAL_DYNAMIC_SWITCH=1 SUFFIX=-sds | |
| 167 SPEECH_RECO=0 SUFFIX=-nosr | |
| 168 TR_BAUD_CONFIG=TR_BAUD_812500 SUFFIX=-812500 | |
| 169 | |
| 170 TR_BAUD_CONFIG | |
| 171 | |
| 172 The value of this symbol is an alphanumeric keyword of the form | |
| 173 TR_BAUD_xxxxxx; the default is TR_BAUD_115200. See | |
| 174 src/cs/drivers/drv_core/uart/traceswitch.h for the available baud rate | |
| 175 choices; the most practical use is setting TR_BAUD_CONFIG=TR_BAUD_812500 | |
| 176 when you need to run the RVTMUX serial channel at the maximum possible | |
| 177 baud rate. | |
| 178 | |
| 179 Each configuration is built in its own directory; the name of this build | |
| 180 directory always begins with build- and is constructed to reflect the | |
| 181 configuration. The auto-generated build directory name includes the name of | |
| 182 the target, the selection of services to be included based on the GPRS, SRVC | |
| 183 and FCHG_STATE variables, and a -470 or -gcc suffix indicating the compiler | |
| 184 toolchain, but if you manually override any of the other config variables | |
| 185 described above, you should also include a SUFFIX=-xxx argument giving an | |
| 186 identifying suffix for your own configuration changes. | |
| 187 | |
| 188 To actually compile the firmware, cd into the created build directory and run | |
| 189 make there. With gcc the build proceeds very fast because the compiler runs | |
| 190 natively, but building with the original TMS470 compiler requires going through | |
| 191 Wine, which is much slower. There is, however, a trick to speed up these | |
| 192 TMS470 builds: if you run some other Wine program that stays open and does not | |
| 193 exit on its own (e.g., wine cmd) in another window and leave it open while you | |
| 194 run your Selenite TMS470 build, the build will proceed much faster - the | |
| 195 presence of another Wine process using the wineserver environment will keep | |
| 196 Wine from shutting this environment down and restarting it for every individual | |
| 197 cl470 run, i.e., for each individual C source file. | |
| 198 | |
| 199 When the build is done, the flashable firmware image will be in fwimage.bin. | |
| 200 This image is to be flashed with fc-loadtool at address 0x10000 on Mot C11x and | |
| 201 C139 targets, and at address 0 on the more sensible targets that have the | |
| 202 Calypso boot ROM enabled. The build system also produces a short text file | |
| 203 named flash-script which is a flashing command script for fc-loadtool that | |
| 204 erases the correct range of flash sectors and then programs fwimage.bin at the | |
| 205 right address. | |
| 206 | |
| 207 When building firmware for the FCDEV3B or for the Pirelli, one can build either | |
| 208 a flashable image or a RAM-loadable one - or both. Because this part of the | |
| 209 build system is common with other targets for which only flash images can be | |
| 210 produced, the Makefile always builds the flashable image by default - | |
| 211 fwimage.bin is always meant for flash and never for RAM. To build a RAM- | |
| 212 loadable image when the target allows it, run 'make ram' - the image will be in | |
| 213 ramimage.srec, which you can then load and run on the target with FreeCalypso | |
| 214 host tool fc-xram. | |
| 215 | |
| 216 Running on the hardware | |
| 217 ======================= | |
| 218 | |
| 219 In order to run the firmware you have built on your FCDEV3B or other Calypso | |
| 220 device (flash or run in RAM as appropriate), you will need to use FreeCalypso | |
| 221 host tools. As of this writing, the latest packaged release is this one: | |
| 222 | |
| 223 ftp://ftp.freecalypso.org/pub/GSM/FreeCalypso/fc-host-tools-r8.tar.bz2 |
