FreeCalypso > hg > freecalypso-tools
diff doc/Compiling @ 0:e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 11 Jun 2016 00:13:35 +0000 |
parents | |
children | 6a029ad28212 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/Compiling Sat Jun 11 00:13:35 2016 +0000 @@ -0,0 +1,140 @@ +There are 3 parts to the complete FreeCalypso software suite which are built +independently of each other: + +* The tools that run on a GNU/Linux PC or other host system are the most + straightforward: there is a top level Makefile (named Makefile.hosttools if + you looking at a development source snapshot, will be renamed to just + Makefile in packaged releases of the host tools) that coordinates building + and installing all of them. + +* The gsm-fw tree, which will eventually become our main GSM firmware, needs to + be built with a GNU cross-compiler toolchain for ARM7. This firmware can be + built for several different target devices and with different feature + configurations, hence there is no singular build for it - it's more like the + Linux kernel in terms of its build configuration management. + +* We also have a few utilities which need to be compiled to run on Calypso + targets, but which are not part of gsm-fw; they are gathered in the + target-utils tree. They are built with the same GNU toolchain for ARM7 as + gsm-fw, but don't have any fancy configuration system. + +Building and installing FreeCalypso host tools +============================================== + +If you are working with a packaged FC host tools release, just run 'make', then +'make install' as root. If you are working with a development source snapshot, +do 'make -f Makefile.hosttools' instead. + +The "standard" install directories are /usr/local/bin for binaries and +/usr/local/share/freecalypso for helper files. If you need to change these +paths to something else, you'll need to edit a bunch of individual component +Makefiles, and possibly also some source files like loadtools/defpath.c - +sorry, FreeCalypso is not GNU and does not use autotools. + +All FreeCalypso host tools are written in plain C, and with the exception of a +few utilities in the "special-purpose hacks" category, they have absolutely no +library dependencies beyond libc. In other words, they are very friendly to +those who like bare bones minimalist systems. The only exceptions are +fc-getpirimei and fc-pirhackinit which use libcrypto from OpenSSL for DES +functions, and fc-lcdemu which needs libX11 to compile and an X11 display to +run. But as you can read in Host-tools-overview, these utilities are not +particularly important, so if your system lacks those libraries, just edit the +Makefiles to not build these utilities - it is very unlikely that you will miss +them. + +To those who are going to build distro packages from these fc-host-tools: it +is recommended that you leave fc-getpirimei, fc-pirhackinit and fc-lcdemu out +of the basic package - please don't create extra dependencies just to support a +few odd hacks which are unlikely to ever be used by anyone other than the +developer who needed them at one time and no longer even uses them herself as +their original one-time purpose has already been served. + +Building and installing the ARM7 toolchain +========================================== + +The current "official" GNU ARM toolchain for FreeCalypso consists of +binutils-2.21.1, gcc-4.5.4 and newlib-2.0.0 with a specific set of patches and +build configuration options. Build it as follows: + +1. Download these 3 source tarballs for the standard GNU+newlib components: + + binutils-2.21.1a.tar.bz2 + gcc-core-4.5.4.tar.bz2 + newlib-2.0.0.tar.gz + +2. Run the build+install.sh script in the toolchain directory. Read the + comments in the script first for the usage instructions. + +The toolchain thus built will need to be in your PATH before you can compile +gsm-fw or target-utils. + +Please note: the toolchain that is prescribed for FreeCalypso as above is +*believed* to be equivalent to the one used by OsmocomBB, but there are no +guarantees. Use any other toolchain at your own risk. + +Compiling target-utils +====================== + +Running 'make' in the target-utils tree with the ARM7 toolchain present in your +PATH will result in compalstage and loadagent being built; these are the two +components needed in order to use FreeCalypso loadtools. Run 'make install' to +install these target binaries in /usr/local/share/freecalypso, which is where +loadtools will look for them. + +Run 'make all' in target-utils to build some other components that aren't +really needed. + +Compiling FreeCalypso GSM firmware +================================== + +The firmware in our gsm-fw tree can be built in many different configurations, +hence there is no singular build for it. The configuration choices consist of: + +* Which target device the firmware should be built for: the target device + selection is made at compile time; do not attempt to take a firmware image + built for one target device and flash or fc-xram it into another! + +* What functionality is to be included. As the FreeCalypso firmware subproject + moves forward, we gradually add chunks of functionality, slowly approaching + what each target device is ultimately capable of. However, each time we add + a new piece of functionality, the ability to build a firmware image that works + like before, without the newly added functionality, still remains. Each + feature to be included needs to be explicitly selected. + +* Miscellaneous configuration: which Calypso UART should be used for what, + should the firmware use a real FFS (flash file system) in flash or a fake one + in RAM, etc. + +The GSM firmware build configuration is set by way of an editable text file +named build.conf; the configuration and build procedure is as follows: + +1. Look at the available repertoire of standard configurations under + gsm-fw/configs and choose which one you would like to use, either as-is or + as a basis for your own; + +2. Copy the configuration you selected to build.conf in the gsm-fw directory; + +3. Optionally edit it to taste - the configuration language is Bourne shell; + +4. Run 'make' in the gsm-fw directory. + +Depending on the configuration, either a flashable or a RAM-loadable image will +be built by default. A flashable image will appear in finlink/flashImage.bin; +these images are meant to be programmed with fc-loadtool's flash program-bin +command; the starting flash address at which the image needs to be programmed +depends on the target device - see target-specific notes. A RAM-loadable image +will appear in finlink/ramImage.srec; these images are meant to be loaded and +run with the fc-xram utility. + +It is possible to build either a flashable or a RAM-loadable image, or both, +without changing build.conf: run 'make flashImage' or 'make ramImage' as +desired. (The compilation of each module from source into a .o and all +intermediate linking steps are agnostic to whether a flashImage or a ramImage +is being built, only the very final link step differs.) Any otherwise working +configuration can be built into a flashImage, even if it makes no logical sense +to do so, but the ability to build a ramImage for a given configuration depends +on the code image size (which in turn depends on the selected feature set) and +the amount of RAM available on the target in question: most Calypso GSM devices +have small RAM, enough to satisfy a GSM firmware's data space requirements, but +not enough to hold the entire firmware code in RAM as well. Please see target- +specific notes for more details.