diff doc/Compiling @ 50:a62e5bf88434

first round of documentation
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 18 Oct 2020 18:08:15 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/Compiling	Sun Oct 18 18:08:15 2020 +0000
@@ -0,0 +1,204 @@
+Preparing the development and build environment
+===============================================
+
+In order to compile our FreeCalypso Tourmaline firmware, you will need a
+Unix/Linux system.  Even though we are using a compiler which we got in the
+form of Windows .exe binaries and thus have to use Wine (see below), everything
+that we have built on top of it is Unix-based.  The Mother currently uses
+Slackware Linux release 14.2 (32-bit) and previously used Slackware 13.37,
+also 32-bit.
+
+You will need to install the following 3 pieces of software on whatever
+machine you will use to run the FC Tourmaline build process:
+
+1. Wine: self-explanatory.  The Mother uses the following Slackware package:
+
+   https://www.freecalypso.org/members/falcon/slackware/wine-1.5.23-i486-1sg.txz
+
+   I originally used it with Slackware 13.37 and I am still able to use it
+   with 14.2 without any issues.
+
+2. FreeCalypso Wine environment:
+
+   ftp://ftp.freecalypso.org/pub/GSM/TI_src/wine/installed-env.tar.xz
+
+   Extract the content of the above tarball into your ~/.wine/drive_c
+   directory - that's all there is to it!
+
+3. nowhine wrapper around Wine:
+
+   ftp://ftp.freecalypso.org/pub/GSM/TI_src/wine/nowhine.c
+
+   The purpose of this wrapper is to suppress the following obnoxious whine
+   which wine emits on my system:
+
+   preloader: Warning: failed to reserve range 00010000-00110000
+
+   Wine will also emits a bunch of other whines if you have to run it
+   in an environment without an X11 display (e.g., on a machine that you
+   ssh into), and our nowhine wrapper suppresses those as well.
+
+   If wine does not emit those preloader whines on your system and you
+   never find yourself in a situation of having to run without an X11
+   display and thus you find our nowhine wrapper to be unnecessary,
+   you can skip the wrapper and create a nowhine symlink pointing directly
+   to wine.
+
+Compiling the local helper utilities
+====================================
+
+(cd helpers; make)
+
+Do the above.  Most of the build helper scripts used in the FC Tourmaline build
+system are written in Bourne shell, but a few were easier to implement in C.
+You need to compile these C helper utilities before you can run an actual FC
+Tourmaline firmware build, but these utilities are totally ad hoc and specific
+to the needs of our fw build system, hence they are not meant to be installed
+globally on your system - instead they stay within the fc-tourmaline tree.  You
+just need to run make in the helpers directory once before any actual firmware
+builds.
+
+Actually building the firmware
+==============================
+
+In order to build our FreeCalypso Tourmaline firmware for a particular target
+in a particular configuration, run a command like this from the top level of
+the fc-tourmaline tree:
+
+./configure.sh luna2 bigcolor-gprs
+
+The first required argument to the configure.sh script selects the hardware
+target, the second required argument selects the functional configuration, and
+any further arguments beyond these two (optional) allow changing various
+configurable settings that go beyond basic functional selection and aren't
+strictly fixed by the hardware target.
+
+As of this writing, the following hardware targets are supported:
+
+c11x		Motorola C11x/12x
+c139		Motorola C139/140
+c155		Motorola C155/156
+fcdev3b		FreeCalypso FCDEV3B
+gtamodem	The Calypso GSM/GPRS modem in Openmoko GTA01/02 smartphones
+gtm900mgc	Huawei GTM900, hardware variant MGC1GSMT or MGC2GSMT
+j100		Sony Ericsson J100
+luna1		FreeCalypso Luna, based on iWOW DSK v4.0 or v5.0 motherboard
+luna2		FreeCalypso Luna, based on FC Caramel2 motherboard
+pirelli		Pirelli DP-L10
+tangomdm	FreeCalypso Tango standard modem config
+
+The second required argument selects the basic functional configuration; these
+functional config stanzas appear in the configs directory.  The following
+functional configurations are currently available:
+
+bigcolor-gprs & bigcolor-vo
+
+	These are UI-enabled configurations with the big (176x220 pixel) color
+	version of the UI.  These functional configs can be built only for
+	luna1 and luna2 targets.
+
+smallbw
+
+	Small B&W UI configuration - 96x64 pixel black&white UI version.  This
+	functional config can be built for c139, luna1 and luna2 targets.  When
+	running on Luna, the logical 96x64 pixel B&W LCD is centered in the
+	middle of the 176x220 pixel physical LCD, surrounded by a pale magenta
+	border.
+
+bwtest
+
+	This one is a special intermediate configuration is that the UI layers
+	are built in the smallbw config, but the underlying R2D framebuffer
+	driver is 176x220 pixel B&W, rather than 96x64 pixel B&W.  This config
+	can only be built for Luna targets; it originates from TI's own
+	configuration of running their !LSCREEN (smallbw) UI on D-Sample boards
+	with R2D driver in the BW_D_Sample config.
+
+stdmodem
+
+	Standard modem config, all data services enabled, no UI functionality
+	included.  Supported targets are fcdev3b, gtamodem, gtm900mgc and
+	tangomdm.
+
+vpm
+
+	See the Voice-pseudo-modem article.  This functional config is
+	applicable to c11x, c139, c155, j100 and pirelli targets.
+
+Each configuration is built in its own directory; the name of this build
+directory takes the form of build-$TARGET-$CONFIG$SUFFIX, i.e., for the example
+configure.sh line above, the resulting build directory will be named
+build-luna2-bigcolor-gprs.  The $SUFFIX part is empty by default, but can be set
+on the command line in order to distinguish non-standard builds that had some
+tunable settings changed to values other than the default.  For example, if you
+are building modem firmware for an FCDEV3B V1 board where you need to disable
+sleep, you should run the configure script as follows:
+
+./configure.sh fcdev3b stdmodem DISABLE_SLEEP=1 SUFFIX=-nosleep
+
+The build directory would then become build-fcdev3b-stdmodem-nosleep, and the
+specified suffix will also be included in the firmware version ID string that
+gets compiled into the image.
+
+To actually compile the firmware, cd into the created build directory and run
+make there.  Unfortunately the use of TI's proprietary compiler via Wine makes
+the build quite slow, but there is a trick to speed it up: if you run some
+other Wine program that stays open and does not exit on its own (e.g., wine cmd)
+in another window and leave it open while you run your FC Tourmaline fw build,
+the build will proceed much faster - the presence of another Wine process using
+the wineserver environment will keep Wine from shutting this environment down
+and restarting it for every individual cl470 run, i.e., for each individual C
+source file.
+
+When the build is done, the flashable firmware image will be in fwimage.bin.
+This image is to be flashed with fc-loadtool at a target-dependent base address.
+The build system also produces a short text file named flash-script which is a
+flashing command script for fc-loadtool that erases the correct range of flash
+sectors and then programs fwimage.bin at the right address.
+
+When building firmware for the FCDEV3B or for the Pirelli, one can build either
+a flashable image or a RAM-loadable one - or both.  Because this part of the
+build system is common with other targets for which only flash images can be
+produced, the Makefile always builds the flashable image by default -
+fwimage.bin is always meant for flash and never for RAM.  To build a RAM-
+loadable image when the target allows it, run 'make ram' - the image will be in
+ramimage.srec, which you can then load and run on the target with FreeCalypso
+host tool fc-xram.
+
+Cached libraries
+================
+
+In the build architecture of all TCS211-based firmwares including Tourmaline,
+each fw component is first compiled into a linkable library (*.lib file with
+TI's TMS470 toolchain), and then these libraries are linked together into the
+final code image.  Early in FreeCalypso project history many of these component
+libraries were blobs, meaning that we had to use prebuilt libraries for which
+we had no corresponding source.  Our fw has now been almost fully deblobbed,
+meaning that we have transitioned from blobs to recompilation from source for
+almost all of our fw components.  But this deblobbing has had an unfortunate
+downside: because our Wine-based compiler is very slow, every time we deblobbed
+a component library, build times would get longer and longer.
+
+FC Tourmaline introduces a partial solution to this problem in the form of
+cached libs.  Some component libraries are completely independent of
+configuration particulars, i.e., they remain exactly the same no matter which
+Calypso target you are building firmware for, and are likewise unaffected by
+our various supported functional configs.  Prebuilt versions of these config-
+independent libs have been checked into the cache directory of our source tree,
+and Tourmaline fw builds use these cached libs by default.  These cached libs
+are NOT blobs in that we do have the corresponding source for them, and the
+versions that are checked in have been built by us, not by any evil source-
+withholding third parties.  You can disable the use of cached libs and force
+full recompilation from source by adding a USE_CACHE=0 argument to your
+configure.sh line.
+
+Running on the hardware
+=======================
+
+In order to run the firmware you have built on your Calypso phone or modem
+(flash or run in RAM as appropriate), you will need to use FreeCalypso host
+tools.  The current version at any given moment can be found at this URL:
+
+ftp://ftp.freecalypso.org/pub/GSM/FreeCalypso/fc-host-tools-latest.tar.bz2
+
+Please see target-specific notes for more details.