FreeCalypso > hg > fc-magnetite
annotate doc/Compiling @ 516:1ed9de6c90bd
src/g23m-gsm/sms/sms_for.c: bogus malloc removed
The new error handling code that was not present in TCS211 blob version
contains a malloc call that is bogus for 3 reasons:
1) The memory allocation in question is not needed in the first place;
2) libc malloc is used instead of one of the firmware's proper ways;
3) The memory allocation is made inside a function and then never freed,
i.e., a memory leak.
This bug was caught in gcc-built FreeCalypso fw projects (Citrine
and Selenite) because our gcc environment does not allow any use of
libc malloc (any reference to malloc produces a link failure),
but this code from TCS3.2 is wrong even for Magnetite: if this code
path is executed repeatedly over a long time, the many small allocations
made by this malloc call without a subsequent free will eventually
exhaust the malloc heap provided by the TMS470 environment, malloc will
start returning NULL, and the bogus code will treat it as an error.
Because the memory allocation in question is not needed at all,
the fix entails simply removing it.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 22 Jul 2018 06:04:49 +0000 |
parents | 69da44f2909e |
children | 9363ea39c74c |
rev | line source |
---|---|
94
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
1 Preparing the development and build environment |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
2 =============================================== |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
3 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
4 In order to compile our FreeCalypso Magnetite firmware, you will need a |
596d86109e44
initial 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 |
596d86109e44
initial 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 |
373
9399a83cb394
first round of documentation updates for 2018
Mychaela Falconia <falcon@freecalypso.org>
parents:
311
diff
changeset
|
7 that we have built on top of it is Unix-based. The Mother uses Slackware Linux |
94
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
8 version 13.37, 32-bit. |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
9 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
10 You will need to install the following four pieces of software on whatever |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
11 machine you will use to run the FC Magnetite build process: |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
12 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
13 1. Wine: self-explanatory. |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
14 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
15 2. FreeCalypso Wine environment: |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
16 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
17 ftp://ftp.freecalypso.org/pub/GSM/TI_src/wine/installed-env.tar.xz |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
18 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
19 Extract the content of the above tarball into your ~/.wine/drive_c |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
20 directory - that's all there is to it! |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
21 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
22 3. nowhine wrapper around Wine: |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
23 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
24 ftp://ftp.freecalypso.org/pub/GSM/TI_src/wine/nowhine.c |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
25 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
26 Note that Wine may produce different whines on your system than it |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
27 does on mine, in which case if you wish to be relieved of those |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
28 whines, you'll need to edit my nowhine.c hack for your situation. |
310
8488a9ae583c
doc/Compiling: added note that if wine doesn't whine, make nowhine a symlink
Mychaela Falconia <falcon@freecalypso.org>
parents:
251
diff
changeset
|
29 And if wine does not whine at all on your system, you can skip the |
8488a9ae583c
doc/Compiling: added note that if wine doesn't whine, make nowhine a symlink
Mychaela Falconia <falcon@freecalypso.org>
parents:
251
diff
changeset
|
30 wrapper and create a nowhine symlink pointing directly to wine. |
94
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
31 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
32 4. mokosrec2bin flash image file format conversion utility: |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
33 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
34 ftp://ftp.freecalypso.org/pub/GSM/GTA02/gsm-fw/mokosrec2bin.c |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
35 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
36 Note that the four host software pieces above are exactly the same as what has |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
37 been needed to build our previous TCS211-based fw works such as leo2moko-debug |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
38 and tcs211-c139 - thus if you have built those previously, you should already |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
39 have all of the necessary host tools. |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
40 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
41 Compiling the local helper utilities |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
42 ==================================== |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
43 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
44 (cd helpers; make) |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
45 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
46 Do the above. Most of the build helper scripts used in the FC Magnetite build |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
47 system are written in Bourne shell, but a few were easier to implement in C. |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
48 You need to compile these C helper utilities before you can run an actual FC |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
49 Magnetite firmware build, but these utilities are totally ad hoc and specific |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
50 to the needs of our fw build system, hence they are not meant to be installed |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
51 globally on your system - instead they stay within the fc-magnetite tree. You |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
52 just need to run make in the helpers directory once before any actual firmware |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
53 builds. |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
54 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
55 Actually building the firmware |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
56 ============================== |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
57 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
58 In order to build our FreeCalypso Magnetite firmware for a particular target in |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
59 a particular configuration, run a command like this from the top level of the |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
60 fc-magnetite tree: |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
61 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
62 ./configure.sh gtamodem l1reconst |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
63 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
64 The first argument to the configure.sh script selects the target, and the second |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
65 argument selects the configuration. As of this writing, the following targets |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
66 are supported: |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
67 |
381
c6823ed06f9c
doc/Compiling: update for C11x and for the speed-up trick
Mychaela Falconia <falcon@freecalypso.org>
parents:
373
diff
changeset
|
68 c11x Motorola C11x/12x |
c6823ed06f9c
doc/Compiling: update for C11x and for the speed-up trick
Mychaela Falconia <falcon@freecalypso.org>
parents:
373
diff
changeset
|
69 c139 Motorola C139/140 |
461
69da44f2909e
doc/Compiling: mention that the dsample target is currently D-Sample C05
Mychaela Falconia <falcon@freecalypso.org>
parents:
458
diff
changeset
|
70 dsample TI's D-Sample C05 board (no working radio currently) |
251
6c594ce434f8
doc/Compiling: update for the FCDEV3B and for fc-host-tools-r5
Mychaela Falconia <falcon@freecalypso.org>
parents:
220
diff
changeset
|
71 fcdev3b FreeCalypso FCDEV3B |
94
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
72 gtamodem The Calypso GSM/GPRS modem in Openmoko GTA01/02 smartphones |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
73 pirelli Pirelli DP-L10 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
74 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
75 For the available configurations (the second required argument to the configure |
373
9399a83cb394
first round of documentation updates for 2018
Mychaela Falconia <falcon@freecalypso.org>
parents:
311
diff
changeset
|
76 script), look in the configs directory and read the various write-ups under doc. |
94
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
77 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
78 Each configuration is built in its own directory; by default the build directory |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
79 is named build-$TARGET-$CONFIG, i.e., for the example configure.sh line above, |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
80 the resulting build directory will be build-gtamodem-l1reconst. You can change |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
81 the name of this directory by appending a BUILD_DIR=dir argument to the |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
82 ./configure.sh line after the two required arguments. |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
83 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
84 To actually compile the firmware, cd into the created build directory and run |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
85 make there. Unfortunately the use of TI's proprietary compiler via Wine makes |
381
c6823ed06f9c
doc/Compiling: update for C11x and for the speed-up trick
Mychaela Falconia <falcon@freecalypso.org>
parents:
373
diff
changeset
|
86 the build quite slow, but there is a trick to speed it up: if you run some |
c6823ed06f9c
doc/Compiling: update for C11x and for the speed-up trick
Mychaela Falconia <falcon@freecalypso.org>
parents:
373
diff
changeset
|
87 other Wine program that stays open and does not exit on its own (e.g., wine cmd) |
c6823ed06f9c
doc/Compiling: update for C11x and for the speed-up trick
Mychaela Falconia <falcon@freecalypso.org>
parents:
373
diff
changeset
|
88 in another window and leave it open while you run your FC Magnetite fw build, |
c6823ed06f9c
doc/Compiling: update for C11x and for the speed-up trick
Mychaela Falconia <falcon@freecalypso.org>
parents:
373
diff
changeset
|
89 the build will proceed much faster - the presence of another Wine process using |
c6823ed06f9c
doc/Compiling: update for C11x and for the speed-up trick
Mychaela Falconia <falcon@freecalypso.org>
parents:
373
diff
changeset
|
90 the wineserver environment will keep Wine from shutting this environment down |
c6823ed06f9c
doc/Compiling: update for C11x and for the speed-up trick
Mychaela Falconia <falcon@freecalypso.org>
parents:
373
diff
changeset
|
91 and restarting it for every individual cl470 run, i.e., for each individual C |
c6823ed06f9c
doc/Compiling: update for C11x and for the speed-up trick
Mychaela Falconia <falcon@freecalypso.org>
parents:
373
diff
changeset
|
92 source file. |
c6823ed06f9c
doc/Compiling: update for C11x and for the speed-up trick
Mychaela Falconia <falcon@freecalypso.org>
parents:
373
diff
changeset
|
93 |
c6823ed06f9c
doc/Compiling: update for C11x and for the speed-up trick
Mychaela Falconia <falcon@freecalypso.org>
parents:
373
diff
changeset
|
94 When the build is done, the flashable firmware image will be in fwimage.bin. |
c6823ed06f9c
doc/Compiling: update for C11x and for the speed-up trick
Mychaela Falconia <falcon@freecalypso.org>
parents:
373
diff
changeset
|
95 This image is to be flashed with fc-loadtool at address 0x10000 on Mot C11x and |
c6823ed06f9c
doc/Compiling: update for C11x and for the speed-up trick
Mychaela Falconia <falcon@freecalypso.org>
parents:
373
diff
changeset
|
96 C139 targets, and at address 0 on the more sensible targets that have the |
c6823ed06f9c
doc/Compiling: update for C11x and for the speed-up trick
Mychaela Falconia <falcon@freecalypso.org>
parents:
373
diff
changeset
|
97 Calypso boot ROM enabled. The build system also produces a short text file |
c6823ed06f9c
doc/Compiling: update for C11x and for the speed-up trick
Mychaela Falconia <falcon@freecalypso.org>
parents:
373
diff
changeset
|
98 named flash-script which is a flashing command script for fc-loadtool that |
c6823ed06f9c
doc/Compiling: update for C11x and for the speed-up trick
Mychaela Falconia <falcon@freecalypso.org>
parents:
373
diff
changeset
|
99 erases the correct range of flash sectors and then programs fwimage.bin at the |
c6823ed06f9c
doc/Compiling: update for C11x and for the speed-up trick
Mychaela Falconia <falcon@freecalypso.org>
parents:
373
diff
changeset
|
100 right address. |
94
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
101 |
251
6c594ce434f8
doc/Compiling: update for the FCDEV3B and for fc-host-tools-r5
Mychaela Falconia <falcon@freecalypso.org>
parents:
220
diff
changeset
|
102 When building firmware for the FCDEV3B or for the Pirelli, one can build either |
6c594ce434f8
doc/Compiling: update for the FCDEV3B and for fc-host-tools-r5
Mychaela Falconia <falcon@freecalypso.org>
parents:
220
diff
changeset
|
103 a flashable image or a RAM-loadable one - or both. Because this part of the |
94
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
104 build system is common with other targets for which only flash images can be |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
105 produced, the Makefile always builds the flashable image by default - |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
106 fwimage.bin is always meant for flash and never for RAM. To build a RAM- |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
107 loadable image when the target allows it, run 'make ram' - the image will be in |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
108 ramimage.srec, which you can then load and run on the target with FreeCalypso |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
109 host tool fc-xram. |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
110 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
111 Running on the hardware |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
112 ======================= |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
113 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
114 In order to run the firmware you have built on your Calypso phone or modem |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
115 (flash or run in RAM as appropriate), you will need to use FreeCalypso host |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
116 tools. As of this writing, the latest packaged release is this one: |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
117 |
458
48ae9825662c
doc/Compiling: update for fc-host-tools-r8 and dsample target
Mychaela Falconia <falcon@freecalypso.org>
parents:
381
diff
changeset
|
118 ftp://ftp.freecalypso.org/pub/GSM/FreeCalypso/fc-host-tools-r8.tar.bz2 |
94
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
119 |
596d86109e44
initial round of documentation
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff
changeset
|
120 Please see target-specific notes for more details. |