FreeCalypso > hg > fc-tourmaline
annotate doc/Compiling @ 220:0ed36de51973
ABB semaphore protection overhaul
The ABB semaphone protection logic that came with TCS211 from TI
was broken in several ways:
* Some semaphore-protected functions were called from Application_Initialize()
context. NU_Obtain_Semaphore() called with NU_SUSPEND fails with
NU_INVALID_SUSPEND in this context, but the return value wasn't checked,
and NU_Release_Semaphore() would be called unconditionally at the end.
The latter call would increment the semaphore count past 1, making the
semaphore no longer binary and thus no longer effective for resource
protection. The fix is to check the return value from NU_Obtain_Semaphore()
and skip the NU_Release_Semaphore() call if the semaphore wasn't properly
obtained.
* Some SPI hardware manipulation was being done before entering the semaphore-
protected critical section. The fix is to reorder the code: first obtain
the semaphore, then do everything else.
* In the corner case of L1/DSP recovery, l1_abb_power_on() would call some
non-semaphore-protected ABB & SPI init functions. The fix is to skip those
calls in the case of recovery.
* A few additional corner cases existed, all of which are fixed by making
ABB semaphore protection 100% consistent for all ABB functions and code paths.
There is still one remaining problem of priority inversion: suppose a low-
priority task calls an ABB function, and some medium-priority task just happens
to preempt right in the middle of that semaphore-protected ABB operation. Then
the high-priority SPI task is locked out for a non-deterministic time until
that medium-priority task finishes its work and goes back to sleep. This
priority inversion problem remains outstanding for now.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Mon, 26 Apr 2021 20:55:25 +0000 |
parents | a62e5bf88434 |
children |
rev | line source |
---|---|
50
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 Preparing the development and build environment |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 =============================================== |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 In order to compile our FreeCalypso Tourmaline firmware, you will need a |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
5 Unix/Linux system. Even though we are using a compiler which we got in the |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
6 form of Windows .exe binaries and thus have to use Wine (see below), everything |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
7 that we have built on top of it is Unix-based. The Mother currently uses |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 Slackware Linux release 14.2 (32-bit) and previously used Slackware 13.37, |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 also 32-bit. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 You will need to install the following 3 pieces of software on whatever |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 machine you will use to run the FC Tourmaline build process: |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 1. Wine: self-explanatory. The Mother uses the following Slackware package: |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 https://www.freecalypso.org/members/falcon/slackware/wine-1.5.23-i486-1sg.txz |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 I originally used it with Slackware 13.37 and I am still able to use it |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 with 14.2 without any issues. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 2. FreeCalypso Wine environment: |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 ftp://ftp.freecalypso.org/pub/GSM/TI_src/wine/installed-env.tar.xz |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 Extract the content of the above tarball into your ~/.wine/drive_c |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 directory - that's all there is to it! |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 3. nowhine wrapper around Wine: |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
29 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
30 ftp://ftp.freecalypso.org/pub/GSM/TI_src/wine/nowhine.c |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 The purpose of this wrapper is to suppress the following obnoxious whine |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 which wine emits on my system: |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 preloader: Warning: failed to reserve range 00010000-00110000 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 Wine will also emits a bunch of other whines if you have to run it |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 in an environment without an X11 display (e.g., on a machine that you |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 ssh into), and our nowhine wrapper suppresses those as well. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 If wine does not emit those preloader whines on your system and you |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 never find yourself in a situation of having to run without an X11 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 display and thus you find our nowhine wrapper to be unnecessary, |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 you can skip the wrapper and create a nowhine symlink pointing directly |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 to wine. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 Compiling the local helper utilities |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 ==================================== |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 (cd helpers; make) |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 Do the above. Most of the build helper scripts used in the FC Tourmaline build |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 system are written in Bourne shell, but a few were easier to implement in C. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 You need to compile these C helper utilities before you can run an actual FC |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 Tourmaline firmware build, but these utilities are totally ad hoc and specific |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 to the needs of our fw build system, hence they are not meant to be installed |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 globally on your system - instead they stay within the fc-tourmaline tree. You |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 just need to run make in the helpers directory once before any actual firmware |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 builds. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 Actually building the firmware |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 ============================== |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 In order to build our FreeCalypso Tourmaline firmware for a particular target |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 in a particular configuration, run a command like this from the top level of |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 the fc-tourmaline tree: |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
68 ./configure.sh luna2 bigcolor-gprs |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
69 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
70 The first required argument to the configure.sh script selects the hardware |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
71 target, the second required argument selects the functional configuration, and |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 any further arguments beyond these two (optional) allow changing various |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 configurable settings that go beyond basic functional selection and aren't |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 strictly fixed by the hardware target. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
76 As of this writing, the following hardware targets are supported: |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 c11x Motorola C11x/12x |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 c139 Motorola C139/140 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 c155 Motorola C155/156 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 fcdev3b FreeCalypso FCDEV3B |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 gtamodem The Calypso GSM/GPRS modem in Openmoko GTA01/02 smartphones |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 gtm900mgc Huawei GTM900, hardware variant MGC1GSMT or MGC2GSMT |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 j100 Sony Ericsson J100 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 luna1 FreeCalypso Luna, based on iWOW DSK v4.0 or v5.0 motherboard |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
86 luna2 FreeCalypso Luna, based on FC Caramel2 motherboard |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
87 pirelli Pirelli DP-L10 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
88 tangomdm FreeCalypso Tango standard modem config |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
89 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
90 The second required argument selects the basic functional configuration; these |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
91 functional config stanzas appear in the configs directory. The following |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
92 functional configurations are currently available: |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
93 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
94 bigcolor-gprs & bigcolor-vo |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
95 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
96 These are UI-enabled configurations with the big (176x220 pixel) color |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
97 version of the UI. These functional configs can be built only for |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
98 luna1 and luna2 targets. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
99 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
100 smallbw |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
102 Small B&W UI configuration - 96x64 pixel black&white UI version. This |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
103 functional config can be built for c139, luna1 and luna2 targets. When |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 running on Luna, the logical 96x64 pixel B&W LCD is centered in the |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 middle of the 176x220 pixel physical LCD, surrounded by a pale magenta |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 border. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 bwtest |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 This one is a special intermediate configuration is that the UI layers |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 are built in the smallbw config, but the underlying R2D framebuffer |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 driver is 176x220 pixel B&W, rather than 96x64 pixel B&W. This config |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 can only be built for Luna targets; it originates from TI's own |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 configuration of running their !LSCREEN (smallbw) UI on D-Sample boards |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 with R2D driver in the BW_D_Sample config. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 stdmodem |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
118 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 Standard modem config, all data services enabled, no UI functionality |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 included. Supported targets are fcdev3b, gtamodem, gtm900mgc and |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
121 tangomdm. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
122 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
123 vpm |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
124 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
125 See the Voice-pseudo-modem article. This functional config is |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
126 applicable to c11x, c139, c155, j100 and pirelli targets. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
127 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
128 Each configuration is built in its own directory; the name of this build |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
129 directory takes the form of build-$TARGET-$CONFIG$SUFFIX, i.e., for the example |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
130 configure.sh line above, the resulting build directory will be named |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
131 build-luna2-bigcolor-gprs. The $SUFFIX part is empty by default, but can be set |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
132 on the command line in order to distinguish non-standard builds that had some |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
133 tunable settings changed to values other than the default. For example, if you |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
134 are building modem firmware for an FCDEV3B V1 board where you need to disable |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
135 sleep, you should run the configure script as follows: |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
136 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
137 ./configure.sh fcdev3b stdmodem DISABLE_SLEEP=1 SUFFIX=-nosleep |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
138 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
139 The build directory would then become build-fcdev3b-stdmodem-nosleep, and the |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
140 specified suffix will also be included in the firmware version ID string that |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
141 gets compiled into the image. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
142 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
143 To actually compile the firmware, cd into the created build directory and run |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
144 make there. Unfortunately the use of TI's proprietary compiler via Wine makes |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
145 the build quite slow, but there is a trick to speed it up: if you run some |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
146 other Wine program that stays open and does not exit on its own (e.g., wine cmd) |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
147 in another window and leave it open while you run your FC Tourmaline fw build, |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
148 the build will proceed much faster - the presence of another Wine process using |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
149 the wineserver environment will keep Wine from shutting this environment down |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
150 and restarting it for every individual cl470 run, i.e., for each individual C |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
151 source file. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
152 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
153 When the build is done, the flashable firmware image will be in fwimage.bin. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
154 This image is to be flashed with fc-loadtool at a target-dependent base address. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
155 The build system also produces a short text file named flash-script which is a |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
156 flashing command script for fc-loadtool that erases the correct range of flash |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
157 sectors and then programs fwimage.bin at the right address. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
158 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
159 When building firmware for the FCDEV3B or for the Pirelli, one can build either |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
160 a flashable image or a RAM-loadable one - or both. Because this part of the |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
161 build system is common with other targets for which only flash images can be |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
162 produced, the Makefile always builds the flashable image by default - |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
163 fwimage.bin is always meant for flash and never for RAM. To build a RAM- |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
164 loadable image when the target allows it, run 'make ram' - the image will be in |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
165 ramimage.srec, which you can then load and run on the target with FreeCalypso |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
166 host tool fc-xram. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
167 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
168 Cached libraries |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
169 ================ |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
170 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
171 In the build architecture of all TCS211-based firmwares including Tourmaline, |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
172 each fw component is first compiled into a linkable library (*.lib file with |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
173 TI's TMS470 toolchain), and then these libraries are linked together into the |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
174 final code image. Early in FreeCalypso project history many of these component |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
175 libraries were blobs, meaning that we had to use prebuilt libraries for which |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
176 we had no corresponding source. Our fw has now been almost fully deblobbed, |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
177 meaning that we have transitioned from blobs to recompilation from source for |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
178 almost all of our fw components. But this deblobbing has had an unfortunate |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
179 downside: because our Wine-based compiler is very slow, every time we deblobbed |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
180 a component library, build times would get longer and longer. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
181 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
182 FC Tourmaline introduces a partial solution to this problem in the form of |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
183 cached libs. Some component libraries are completely independent of |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
184 configuration particulars, i.e., they remain exactly the same no matter which |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
185 Calypso target you are building firmware for, and are likewise unaffected by |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
186 our various supported functional configs. Prebuilt versions of these config- |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
187 independent libs have been checked into the cache directory of our source tree, |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
188 and Tourmaline fw builds use these cached libs by default. These cached libs |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
189 are NOT blobs in that we do have the corresponding source for them, and the |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
190 versions that are checked in have been built by us, not by any evil source- |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
191 withholding third parties. You can disable the use of cached libs and force |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
192 full recompilation from source by adding a USE_CACHE=0 argument to your |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
193 configure.sh line. |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
194 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
195 Running on the hardware |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
196 ======================= |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
197 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
198 In order to run the firmware you have built on your Calypso phone or modem |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
199 (flash or run in RAM as appropriate), you will need to use FreeCalypso host |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
200 tools. The current version at any given moment can be found at this URL: |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
201 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
202 ftp://ftp.freecalypso.org/pub/GSM/FreeCalypso/fc-host-tools-latest.tar.bz2 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
203 |
a62e5bf88434
first round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
204 Please see target-specific notes for more details. |