Copyright (C) 2006, 2007, 2008, 2009
 Ineiev <ineiev@users.sourceforge.net>, super V 93
This file is part of stribog.

stribog is free design; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.

As a special exception, you may use gschem symbols derived from
external sources (e.g. geda symbols) that are distributed under
the GNU GPL version 2 when they are not originally distributed under
the GNU GPLv3-compatible license. these symbols must be distributed
with other source files of the project and considered an external
library or augmentation of geda-symbols package. they can't be embedded
in any stribog file.

See the end of the file for more notes on the license conditions.

This is the README file for stribog the attitude sensing platform.

ATTENTION stribog is in his alpha stage. he is not functional yet.

The project is located at http://savannah.nongnu.org/projects/stribog

SOME TECHNICAL NOTES

This project consists of hardware and software sections. the former is
developed with gEDA, the latter with GNU toolchains.

Hardware contains a 3-axis {magnetoresistive compass, accelerometer,
(optionally) gyroscope} and an ARM-based microcontroller to manage all.

Software includes programs for MCU to test and align hardware parts,
to perform the measurements; the software part also has some programs
for POSIX host to receive obtained data.

Stribog is primarily designed on LPC2138, but actually LPC213[46] can be used,
too. this is selected with configure script options.

The board is programmed via serial port using a bootstrap loader.
you can use any existing one (on Unix live 
lpc_host_tools by Holly Gates <hgates@eink.com>, 
lpc21isp by Martin Maurer <Martin.Maurer@clibb.de> 
 and Aeolus Development http://aeolusdevelopment.com
lpc2k_pgm by Paul Stoffregen (http://www.pjrc.com/arm/lpc2k_pgm)

on Windows they have Philips flash ISP utility)

If you use them, you'll have to adjust input files format (.hex, .srec 
and so on) with arm-unknown-elf-objcopy(1). I don't know precisely
how to do this.

I wrote my own host-side bootstrap loader (sw/host/elk) because
 1) some of those programs (like lpc21isp) lack clear terms of use,
 2) other (like Philips utility) are neither free nor capable to run 
    on a free OS,
 3) some (like lpc2k_pgm) have graphic user interface and I don't like this,
 4) I wouldn't add external dependencies when possible.

My tools are not very reliable, but they work somehow for me and they are free.

There are two linker script templates in sw/target/src directory:
ram2138.ld.in and 2138.ld.in. the former is used to link the program
which will be loaded via elk
into RAM and run immediately. the latter used for programs saved in LPC2138 ROM;
on startup the program will be loaded into RAM and run there.

The programs are written in C (the ld scripts don't support C++). 
main() is executed in supervisor mode. no THUMB code. fast interrupt reserved. 
VPB divider equals 4, as by default. PLL is configured to multiply by 4.

The programs will run from RAM, when possible. even when written in ROM, boot.s
will copy it to RAM. the program uses single library: libgcc.a. 
all computations should be in fixed point.

Busy VIC slots: 3 (timer0), 4 (timer1), 5 and 6 (ADC), 7 (UART1), 8 (UART0) 

Time functions (tempus.h) are based on timer1. it uses VIC vectored interrupt
slot 4. this module receives PPS at CAP1.2 (signal A), too.

UART0 is the auxiliary port to get GPS data; uses VIC slot 8

UART1 is the basic port; uses VIC slot 7

ADC use VIC slots 5 and 6; magnetic module functions used in such way
(see magex.c, multa.c) that ADC sampling frequency defines frequency of
set/reset pulses. this frequency is adjusted to be an integer
multiplied by 50 Hz.

Magnetoresistive sensors work not so far from the absolute maximum value 
for set/reset strap duty cycle. carelessly increasing the sampling frequency 
can DAMAGE the sensors.

Timer0 is occupied by the accelerometers; VIC slot 3

HOW TO INSTALL DEVELOPMENT TOOLS

First, we shall need binutils and gcc for ARM. we go to http://www.gnu.org and
get binutils and gcc. generally, we use the latest releases, though there is 
nothing dependent on any supernew features in stribog. currently we use 
binutils-2.17 with gcc-4.2.4. we used also binutils-2.16.1, binutils-2.16,
gcc-3.4.6, gcc-4.0.1, gcc-4.0.3, gcc-4.1.1, gcc-4.1.2, gcc-4.2.2, gcc-4.2.3.

The oldest versions of tools known to successfully build
the ARM programs are binutils-2.11.2 and gcc-3.3.4.
we can't make our buggy programs work with earlier releases.

gcc-3.3.6 will not build itself on binutils-2.10.1
(and evidently on earlier binutils).

On systems other than GNU you should invoke GNU make. some of these packages
don't build themselves as described below with OpenBSD 3.9 native make.
use gmake there. the same is true for stribog sources. when GNU make
is not available, you may want to try non-VPATH build, that is
to run `configure' in the topmost directory, like
`./configure --target=arm-unknown-elf' and so on. another widely known
tradition prescribes `mkdir obj;cd obj;../configure ...'.

Follow (with some changes) instructions from http://www.gnuarm.com
($ is for our shell prompt)
$ export armprefix=$HOME/arm
                   (or where you want them to live. you must have write access
		    thither when you will `make install')
$ gpg --verify binutils-2.17.tar.bz2.sig && tar xjf binutils-2.17.tar.bz2
$ mkdir bui;cd bui
$ ../binutils-2.17/configure --target=arm-unknown-elf --prefix=$armprefix
$ make all install
$ export PATH=$armprefix/bin:$PATH; rm -fr *;cd ..
 #(add this path in your shell profile after install, too)
 #note: some gcc will not build itself when configured with a prefix
 #other than that of binutils
$ gpg --verify gcc-4.2.4.tar.bz2.sig && tar xjf gcc-4.2.4.tar.bz2;cd bui
$ ../gcc-4.2.4/configure --target=arm-unknown-elf --prefix=$armprefix --enable-languages=c --disable-libssp
$ make all install

That's all. we don't need newlib, and stribog main board has no contacts 
to connect with gdb.

--disable-libssp is mandatory for gcc-4.1.2 and later
(currently up to gcc-4.3.0). otherwise the compiler
will not build itself.

You also may want to add --disable-nls both to binutils and gcc
configure invocation. the order of the command line arguments
does not matter.

This sequence was tested on
(1) Fedora Core 4 
 (32-bit, native gcc (GCC) 4.0.0 20050519 (Red Hat 4.0.0-8))
(2) OpenBSD 3.9 (i386, native gcc-3.3.5).
as we mentioned, it is recommended to use gmake instead of make.
(3) On RedHat 7.3 (native gcc-2.96).
you shall need to update gnupg. it comes with 1.0.6 version
and it can't check new signatures; gnupg-1.4.9 is quite buildable there.

The build system of binutils-2.18 and binutils-2.19 is broken;
the process stops in bfd/doc when you have no new enouth makeinfo.
workarounds are:
[19 Jun 2008 Paul Smith <psmith@gnu.org> reported this to bug-binutils@gnu.org
 on Wed, Jun 18, 2008 at 6:39 AM
]
(1) build in the same directory (cd binutils-2.19;./configure ...)
(2) touch info files after the error 
    (make;touch `find ../binutils-2.19 -name "*.info"`;make)
(3) install a recent texinfo

GCC-4.3.0 has a new strong dependency, MPFR. current version of MPFR,
2.3.1, requires gmp-4.1 or later; RedHat 7.3 has gmp-4.0.1.
after you install MPFR at prefix=$PREFIX you'll probably need to add 
$PREFIX/lib to your LD_LIBRARY_PATH shell variable and append
--with-mpfr=$PREFIX to the command line configuring the gcc
(e.g. after --disable-libssp)

Auxiliary targets (such as sw/auxilia/odo and sw/auxilia/coil) are based on
AVR. their target programs are built with avr-binutils, avr-gcc and avr-libc.
instructions on how to build this toolchain can be found in avr-libc 
documentation. for historical reasons we use uisp to load programs into these 
processors. generally avrdude is much better. they all live in 
http://savannah.gnu.org

As of May 2008, the AVR tools development seems to be concentrated
within WinAVR (http://sourceforge.net/projects/winavr). we could build
the toolchain based on gcc-4.2.2 and older; gcc-4.2.[34] and gcc-4.3.0
evidently needs a patched binutils from WinAVR (binutils-2.18 lack
necessary code for some subarchitectures).
[17 Jun 2008 WinAVR-20070525 gcc(-4.1.2) doesn't accept our 
 automake-generated dependencies. we have tried to build the toolchain
 (binutils-2.17, gcc-4.1.2, avr-libc-1.4.5),
 (binutils-2.17, gcc-4.2.2, avr-libc-1.6.2)
 on cygwin (binutils-2.17.50 20060817, gcc-3.4.4) and it worked.
 WinAVR-20080512 (binutils-2.18, gcc-4.3.0), too
 WinAVR-20080609 (binutils-2.18, gcc-4.3.0), too
 WinAVR-20040404 (binutils-2.14 20030612 + coff-avr-patch (20030831), gcc-3.3.2), too
]
[19 Jun 2008 WinAVR gccs produce unusable dependency rules since
 the rules contain paths to system headers containing colons like
 c:/winavr.../avr/io.h

 one can configure --disable-dependency-tracking
 or try to install the toolset from the sources in a POSIX environment
]
[06 Jul 2008 GNU make from CVS can manage these kind of dependencies
 (Thanks to Brian Dessent and Stepan Kasal for ideas on fixing this).
]
[26 Jul 2008 Good news: AVR gcc-4.2.4 builds upon binutils-2.18.20080725]

It is much more problematic to install gEDA and friends. you'll need them if
you want to edit the hardware part of stribog. we currently use PCB 20070208
and gschem-1.3.1 versions.

ARM tools are necessary to program the main board, since the software 
must be configured at compile time (LPC2138 is not so fat to configure
at run time).

AVR tools will be needed only if you use auxiliary devices (currently
odometer pulses counter and sample magnetic field generator). if you
are to use auxiliary programs only, just build them as a separate project.

The gEDA are required to edit the hardware part. the `executable' files
needed to produce the board like GERBERs are included into the distribution.
this is possible because these targets are not configurable.

HOW TO BUILD (as of Feb 2009)

In order to build you will need
1. native C compiler
2. ARM tools
3. AVR crosstools

The executables are not distributed because you will always need to
configure the sources.

GERBERS and schematic PNGs will be distributed, 
because the boards and schematics are not configurable and
we don't want to force you to (figure out and) install a gEDA
version compatible with ours.

Stribog uses GNU-standard configuration procedure described
in INSTALL file. Though general build versus source directory
positions should work, the canonical way is to build the project 
in a separate directory out of the source tree, so
the configure invocation sounds like this:

../stribog/configure

With such an arrangement, the intermediate output files from
the toolchain and the source configuration system will not
lumber your source tree and disturb the revision control system.

Default prefix is $HOME/stribog-install. we suggest not to
install the package in system directories.

For instructions on using host tools read sw/host/README.

You can disable ARM and AVR targets with --disable-arm-targets
and --disable-avr-targets options. then you
can build and install just the host tools, so you don't need
to install the corresponding toolchains on that host.
this can be useful if the program has already been written
into the MCU ROM or the MCU programs have been built
on another host and fetched from there. thus you can
quickly install the host-side programs on a portable computer
without cross-compiler.

HOW TO REGENERATE BUILD SYSTEM

You should need this only to improve the configuring scripts
and to change the structure of the sources (add/remove source files
and so on). you typically shall not want this.

The configuring scripts are updated with 'autoreconf -v';
you may 'rm -rf $(find . -name autom4te.cache)' after that.

As of Jan 2009, the versions used are autoconf-2.62 and automake-1.10.1.

For some subdirectories regeneration some portions of build system
(particularly, Makefile.ams) needs building the project
(the corresponding Makefiles contain a rule to refresh those files).

HOW TO USE GIT

Git is the revision control system used by the project.

To see meta-documentation on the project branches, 
checkout 'master' branch and read the files it contains.

Here is a typical ~/.gitconfig file contents
(please replace the names and email with yours):
<<EOF
[user]
 name = Ineiev (favourite host)
 email = ineiev@users.sourceforge.net
[core]
 editor = vim
EOF

For anonymous access, use these:

$ git clone git://git.savannah.nongnu.org/stribog.git
 to make your local repository

$ git checkout -b feb2008 origin/feb2008
 to make a local branch feb2008 based on fetched origin/feb2008

$ git fetch
 to update copies of remote branches

$ git pull
 to fetch all remote branches and merge
 one of them into your current branch

Common to both anonymous and maintainer access:

$ git checkout master
 to switch to existing branch 'master'

$ git checkout -f master
 the same, through away local changes 
 (and delete files removed from fetched repository since last sync)

$ git add .
 to cache the changes in your files against
 the current branch most recent commit

$ git diff
 to see what will be "git add"ed

$ git diff --cached
 to see what has been "git add"ed but not 
 "git commit"ed

$ git branch
 to list the local repository branches

$ git branch -r
 to list the public repositories branches

$git commit
 to move the changes to your current branch

$git show
 to see the latest commit description

$git status
 to see what files are not in sync with the current branch

If you are a maintainer, your usual spells are
(replace ineiev with your login name)

$ git clone ineiev@git.savannah.nongnu.org:/srv/git/stribog.git
 to get a new local repository

$ git remote add savannah ineiev@git.savannah.nongnu.org:/srv/git/stribog.git
 to add a reference for the public repository

$ git push savannah feb2008
 to push into savannah local branch named 'feb2008' 
 (non-existent will be created)

$ git push savannah
 to push into savannah all local branches

$ git push savannah :refs/heads/feb2008
 to remove branch feb2008 from remote savannah


What will go to Git

[25 Apr 2008 these files are in object form. if someone
 redistributes them, this person must provide gEDA, too.
 this is not very convenient.
 currently we can see two solutions:
 (a) not distribute these files, which is not good because
     it makes gEDA mandatory.
 (b) make an exception like "you need not distribute gEDA suit.."
]
[28 Apr 2008 GPLv3 already contains such exception:
>However, it (the "Corresponding Source") does not include the work's
>System Libraries, or general-purpose tools or generally available free
>programs which are used unmodified in performing those activities but
>which are not part of the work.
 GPLv2 does not.
]
[29 May 2008 gEDA-generated files do go to the repository]

We put all distributed files into the repository. the bottomline
consideration was that Git should be a source of the package.

We think that today state may be correct because
1. gEDA (especially gschem) is not easy to install; it has long dependencies
   on rather new versions of packages.
3. If there are no build scripts, the programs
  can't be developped. this would be wrong because the programs
  can be modified and rebuilt very quickly and at no cost.
  to rebuild the scripts one must have a compatible Autotools version
  [03 Jun 2008 tried to regenerate PCB build system from CVS. it appeared that
   a. I want to install intltools (in Fedora Core 4 an upgrade is needed)
      in $HOME/pcbcvs and this means that aclocal won't find it's m4
      script until we have aclocal installed in $HOME/pcbcvs;
   b. generally we need no gettext upgrade on FC4, but aclocal
      from $HOME/pcbcvs didn't find gettext's script in /usr;
      so let's install gettext in $HOME/pcbcvs.
   c. we already installed autoconf-2.59 and automake-1.9.5 in $HOME/pcbcvs
      and autogen.sh does not work yet:
configure.ac:72: error: possibly undefined macro: AC_MSG_ERROR
	If this token and others are legitimate, please use m4_pattern_allow.
	See the Autoconf documentation.
configure.ac:244: error: possibly undefined macro: AC_CHECK_FUNCS
   d. tried again, autoconf-2.62 & automake-1.10.1: the same result
   e. at last, cp /usr/share/aclocal/pkg.m4 $HOME/pcbcvs/share/aclocal. 
      (the pkgconfig script) now it works

   After all, testers are not developers and builds from CVS should be
   available to them.
  ]
  installed. regenerating the scripts generally requires some knowledge
  of several languages other than C, so it can take a lot of time
  when done by a person new to the package. this can be much harder
  than just fixing a bug or adding even a complicated feature.
4. it is not convenient to have version-controlled and non-controlled files
  mixed in the same directories.

NOTES ON LICENSING TERMS

This project is distributed under the terms of the GNU GPL. in theory, 
the implications of this on the hardware design
can depend on your jurisdiction. three groups of cases are possible.

1. Your government either
(a)does not honour copyright and Bern Convention,
 or
(b) the law practice of your country does not consider technical articles
like software and hardware descriptions as a pieces of art.

Then you are lucky and the GPL is not about you. beware
that this is the most impossible case, in spite of that
it is the most reasonable one.

2. Both programs and hardware are considered as works of art
and printed circuit boards are treated as derived from the design description
works. then the conditions are like following.

All that comes from the project forms a derived work, including the assembled
boards. they should be distributed in a the GPL-compliant way as "Object Code".
essentially this means that if someone ships a stribog-derived board, 
this person or organisation must make available (for those who get
the product) a copy of documentation needed at least to reproduce this board;
this supplier shall not prevent downstream distribution in terms other
than that of the GPL. another thing to note is the Section 11 of the GNU GPL
(on patents). while there should be no software patents, the hardware ones
are ubiquitous.

As a consequence using stribog-derived circuits in a device is permitted 
in either of two ways:
(a) the whole device is distributed under the terms of the GNU GPL 
 (with the stribog's authors' interpretation for the hardware part).
 this is the preferable way.
(b) the device can reasonably be considered as an independent work. for
example, connecting a board to stribog main board via connectors
that provide power, UART signals and angular rate sensors output does not
make the former board stribog-derived, because there is nothing very
specific in those signals and the boards are distinct;
but if some stribog circuits are incorporated into another board, 
there is no more separable independent work, so that board 
must be covered by the GPL. similarly, if you modify stribog so that
it will require/provide complicated signals from/to your board, therefore
making it unimaginable to function one without the other -- in this
case the whole system shall be covered by the GNU GPL.

3. Printed boards are not considered to be a derived work. this is
probably the most frequent case (at least, this applies to the USA).

You may produce the boards and do all you want with them. you are not
obliged (though encouraged) to give the design files when you supply
the board instances (till now, we have not been speaking of software,
just about the hardware design).

Please note that the intention of these provisions is not to prevent you
from using the project, but to create conditions leading to the society
without copyright restrictions on spreading technical ideas.

The software part is released right under the terms
of the GNU GPL v3 or later with
all new statements on 'Installation Information'; there are few ambiguities.

All the files in the distribution are classified according
to their origin and copyright status this way (`object code' and
other non-source files are marked as such explicitly according to
the terms of respective licenses):

(0) The files originally written for the project and are
placed under the aegis of the GPLv3+.

(0a) doc/ directory contains the project documentation, namely
stribog.texinfo and it's opaque form stribog.info. the files are
copyrighted by Ineiev and GNU FDL-covered.

The files in doc/ directory are NOT part of the stribog design,
but are used with stribog. they form an `external library'
as defined by the FSF.

(1) The following non-text source files possibly contain no copyright notices, 
because it was practically hard or absurd to maintain them there,
or they can go unnoticed there, and stribog's author
decided to move/duplicate those notices here, namely:

(1a) hw/main_board.pcb hw/main_board_bis.pcb:
originally written for the project, they embed
some footprints from PCB distribution. PCB README file doesn't mention
precise license; the footprints contain either no copyritght notice or
`GPLv2 or later'. this means that we may distribute them under the GPLv2+.
so we distribute them under the GPLv3+.

(1b) hw/stribog.sch hw/gyro.sch hw/odo.sch
originally written for the project, embed no symbols or other artifacts.

(1c) Footprint files possibly derived from PCB footprint files:
hw/packages/0.125W_resistor
hw/packages/0603 hw/packages/0805 hw/packages/1210
hw/packages/2.5mm_10pin_header hw/packages/qfp64 hw/packages/adxl210
hw/packages/crystal hw/packages/hmc1021z hw/packages/jtag1.27x1
hw/packages/lp2980 hw/packages/pin hw/packages/tanA hw/packages/tanC
hw/packages/tp
we distribute them under the GPLv3+ like (1a).

(1d) Symbols possibly derived from geda-symbols package files:
hw/sym/ATmega8-1.sym hw/sym/JTAG.sym hw/sym/adm202.sym hw/sym/adxl210.sym
hw/sym/adxrs300.sym hw/sym/bat54c.sym hw/sym/dac7612.sym
hw/sym/hmc1021.sym hw/sym/hmc1022.sym hw/sym/ina118.sym
hw/sym/irf7317.sym hw/sym/irf7507.sym hw/sym/irlml.sym hw/sym/lm74.sym
hw/sym/lp2980AIM5-3.sym hw/sym/lp2980AIM5-5.sym hw/sym/lpc2138.sym
hw/sym/ref195.sym hw/sym/tps76316.sym


(1c), (1d) Files in hw/packages and hw/sym directories
are not part of the stribog design, but are used with stribog.
they form an `external library' as defined by the FSF.

(See also README files in the respective directories)

To all these files is applied the copyright and license notice placed earlier
in this file. hw/sym/* and hw/packages/* should also have additional copyrights
from their original and intermediate authors. it is now hard to figure out
exact list of authors, because the earliest history of the derivations
was lost. however, we can tell we are not original authors and the files
are distributed under "the GPLv2" (the symbols) or "GPL v2 or later"
(the footprints). the symbols are distributed under the GNU GPLv2;
an exception was provided in order to use them; the footprints should
be distributed under the terms
of 'the GNU GPL v$(OUR_CURRENT_GPL_VERSION) or later'.

Once more, MOST of the gEDA SYMBOLS (in hw/sym) and PCB FOOTPRINTS 
(in hw/packages) WERE NOT originally DEVELOPPED by STRIBOG'S AUTHOR: 
usually we just slightly corrected files from gEDA and PCB libraries.
the STRIBOG AUTHORS DISCLAIM our EXCLUSIVE COPYRIGHT on ALL those files.

(3) The same is true for the GNU autobuild system files. we let our
copyright notes come into these files like 'configure', and
'Makefile.in', but one should undestand that they are result of
compilation of several sources and such a file can hardly represent
a single copyrighted unit.

[26 Jul 2008 add also relevant doc/* files when they have gone to Git]
These files include:
./Makefile.in AT_permissive => GPLv3+ (object code)
./aclocal.m4 AT_permissive => GPLv3+ (object code)
./configure C_unlimited => GPLv3+ (object code)
./doc/Makefile.in AT_permissive => GPLv3+ (object code)
./doc/aclocal.m4 AT_permissive => GPLv3+ (object code)
./doc/configure C_unlimited => GPLv3+
./hw/Makefile.in AT_permissive => GPLv3+ (object code)
./sw/auxilia/Makefile.in AT_permissive => GPLv3+ (object code)
./sw/auxilia/aclocal.m4 AT_permissive => GPLv3+ (object code)
./sw/auxilia/config.h.in GPLv3+ (object code)
./sw/auxilia/configure C_unlimited => GPLv3+ (object code)
./sw/common/Makefile.in AT_permissive => GPLv3+ (object code)
./sw/host/Makefile.in AT_permissive => GPLv3+ (object code)
./sw/host/aclocal.m4 AT_permissive => GPLv3+ (object code)
./sw/host/config.h.in GPLv3+ (object code)
./sw/host/configure C_unlimited => GPLv3+ (object code)
./sw/host/postproc/Makefile.in AT_permissive => GPLv3+ (object code)
./sw/host/utils/Makefile.in AT_permissive => GPLv3+ (object code)
./sw/target/Makefile.in AT_permissive => GPLv3+ (object code)
./sw/target/aclocal.m4 AT_permissive => GPLv3+ (object code)
./sw/target/configure C_unlimited => GPLv3+ (object code)

AT_permissive means
==(quote begins)
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
2005, 2006, 2007, 2008  Free Software Foundation, Inc.
This file is free software; the Free Software Foundation
gives unlimited permission to copy and/or distribute it,
with or without modifications, as long as this notice is preserved.
==(quote ends)

C_unlimited means
==(quote begins)
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
==(quote ends)

AT_permissive => GPLv3+ means "has AT_unlimited copyright note,
rendered under the GPLv3+ due to being an object form of some code
distributed under the GPLv3+".

(3a) Some of these files copyrighted by the FSF are parts 
of Autotools distributed under respective licenses, namely
./depcomp GPLv2+ -> GPLv3+
./doc/INSTALL I_unlimited -> GPLv3+
./INSTALL I_unlimited -> GPLv3+
./missing GPLv2+ -> GPLv3+
./sw/auxilia/INSTALL I_unlimited -> GPLv3+
./sw/auxilia/config.guess GPLv2+ -> GPLv3+
./sw/host/compile GPLv2+ -> GPLv3+
./sw/host/config.guess GPLv2+ -> GPLv3+
./sw/host/config.sub GPLv2+ -> GPLv3+
./sw/host/depcomp GPLv2+ -> GPLv3+
./sw/host/INSTALL I_unlimited -> GPLv3+
./sw/host/missing GPLv2+ -> GPLv3+
./sw/target/config.guess GPLv2+ -> GPLv3+
./sw/target/depcomp GPLv2+ -> GPLv3+
./sw/target/config.sub GPLv2+ -> GPLv3+
./sw/target/INSTALL I_unlimited -> GPLv3+
./sw/target/missing GPLv2+ -> GPLv3+

I_unlimited means
==(quote begins)
Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
2006, 2007 Free Software Foundation, Inc.

This file is free documentation; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
==(quote ends)

I_unlimited -> GPLv3+ means "come under the I_unlimited terms,
redistributed under the GPLv3+".
this is not necessary and has no practical implications
other than that the project status becomes more simple.
you always may get these files under their original terms from
the copyright holder.

(3b) These files are copyrighted by X Consortium
./install-sh X_permissive -> GPLv3+
./sw/host/install-sh X_permissive -> GPLv3+
./sw/target/install-sh X_permissive -> GPLv3+

The original usage terms are for these files are
==(quote begins)
This originates from X11R5 (mit/util/scripts/install.sh), which was
later released in X11R6 (xc/config/util/install.sh) with the
following copyright and license.

Copyright (C) 1994 X Consortium

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Except as contained in this notice, the name of the X Consortium shall not
be used in advertising or otherwise to promote the sale, use or other deal-
ings in this Software without prior written authorization from the X Consor-
tium.


FSF changes to this file are in the public domain.
==(quote ends)

(3c) ./doc/texinfo.tex is part of texinfo package;
it is copyrighted by the FSF and distributed under the GNU GPLv3+.

(4) ./sw/target/m4/gnu-make.m4 come from gnulib; it is closely integrated into
the build system and subject to conditions similar to other
Autotools-generated files:

./sw/target/m4/gnu-make.m4 GNU_MAKE_permissive -> GPLv3+

The original terms are
==(quote begins)
Copyright (C) 2007 Free Software Foundation, Inc.

This file is free software; the Free Software Foundation
gives unlimited permission to copy and/or distribute it,
with or without modifications, as long as this notice is preserved.
==(quote ends)

(5) The texts of GNU licenses, namely
./COPYING ./doc/COPYING ./doc/fdl.texi ./doc/gpl-3.0.texi
./sw/auxilia/COPYING ./sw/host/COPYING ./sw/target/COPYING 
are copyrighted by the FSF as stated in the files.
(``Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.'')

(6) The file AUTHORS has a special status. it essentially consists of copyright
notices. as such, these notices can't be removed; the project maintainers
are encouraged to keep the notices up-to-date.

(6a) The file THANKS file is also special. it includes acknowledements
for support which does not cause copyright issues. the laws probably don't
require to preserve these notes.

(7) If you get a Git repository, you will find
revision control files located at ./.git/.
they shall not be enumerated here.

(8) ./sw/host/elk.src/prefs.dat is not a source file; it is very small
thus not copyrightable by itself.

As of 06 Feb 2009 the full filelist including symbolic links
extracted with 
(find . -type f;find . -type l)|grep -v "^[.]/[.]git"|sort
with comments on origin added is as follows:

./aclocal.m4 (3) AT_permissive => GPLv3+ (object code)
./AUTHORS (6) copyright notes: open for necessary additions
./branch (0) GPLv3+
./ChangeLog (0) GPLv3+
./configure (3) C_unlimited => GPLv3+ (object code)
./configure.ac (0) GPLv3+
./COPYING (5) license terms: distributable verbatim
./depcomp (3a) GPLv2+ -> GPLv3+
./doc/aclocal.m4      (3) AT_permissive => GPLv3+ (object code)
./doc/AUTHORS         (6) copyright notes: open for necessary additions
./doc/ChangeLog       (0) GPLv3+
./doc/configure       (3) C_unlimited => GPLv3+ (object code)
./doc/configure.ac    (0) GPLv3+
./doc/COPYING         (5) license terms: distributable verbatim
./doc/fdl.texi        (5) license terms: distributable verbatim
./doc/gpl-3.0.texi    (5) license terms: distributable verbatim
./doc/INSTALL         (3a) I_unlimited -> GPLv3+
./doc/Makefile.am     (0) GPLv3+
./doc/Makefile.in     (3) AT_permissive => GPLv3+ (object code)
./doc/NEWS            (0) GPLv3+
./doc/README          (0) GPLv3+
./doc/stribog.info    (0a) FDLv1.2+ (opaque object)
./doc/stribog.texinfo (0a) FDLv1.2+ (transparent object)
./doc/texinfo.tex     (3c) GPLv3+
./hw/gafrc (0) GPLv3+
./hw/gyro.sch (1b) GPLv3+
./hw/image.scm.in (0) GPLv3+
./hw/m4/makefile.m4 (0) GPLv3+
./hw/main_board_bis/main_board_bis.back.gbr (0) GPLv3+ (object code)
./hw/main_board_bis/main_board_bis.backmask.gbr (0) GPLv3+ (object code)
./hw/main_board_bis/main_board_bis.backpaste.gbr (0) GPLv3+ (object code)
./hw/main_board_bis/main_board_bis.backsilk.gbr (0) GPLv3+ (object code)
./hw/main_board_bis/main_board_bis.fab.gbr (0) GPLv3+ (object code)
./hw/main_board_bis/main_board_bis.front.gbr (0) GPLv3+ (object code)
./hw/main_board_bis/main_board_bis.frontmask.gbr (0) GPLv3+ (object code)
./hw/main_board_bis/main_board_bis.frontpaste.gbr (0) GPLv3+ (object code)
./hw/main_board_bis/main_board_bis.frontsilk.gbr (0) GPLv3+ (object code)
./hw/main_board_bis/main_board_bis.pdf (0) GPLv3+ (object code)
./hw/main_board_bis/main_board_bis.plated-drill.cnc (0) GPLv3+ (object code)
./hw/main_board_bis/main_board_bis.ps (0) GPLv3+ (object code)
./hw/main_board_bis.pcb (1a) GPLv3+
./hw/main_board_bis.proj (0) GPLv3+
./hw/main_board/main_board.back.gbr (0) GPLv3+ (object code)
./hw/main_board/main_board.backmask.gbr (0) GPLv3+ (object code)
./hw/main_board/main_board.backpaste.gbr (0) GPLv3+ (object code)
./hw/main_board/main_board.backsilk.gbr (0) GPLv3+ (object code)
./hw/main_board/main_board.fab.gbr (0) GPLv3+ (object code)
./hw/main_board/main_board.front.gbr (0) GPLv3+ (object code)
./hw/main_board/main_board.frontmask.gbr (0) GPLv3+ (object code)
./hw/main_board/main_board.frontpaste.gbr (0) GPLv3+ (object code)
./hw/main_board/main_board.frontsilk.gbr (0) GPLv3+ (object code)
./hw/main_board/main_board.pdf (0) GPLv3+ (object code)
./hw/main_board/main_board.plated-drill.cnc (0) GPLv3+ (object code)
./hw/main_board/main_board.ps (0) GPLv3+ (object code)
./hw/main_board.pcb (1a) GPLv3+
./hw/main_board.proj (0) GPLv3+
./hw/Makefile.am (0) GPLv3+ (object code)
./hw/Makefile.am.m4 (0) GPLv3+
./hw/Makefile.in (3) AT_permissive => GPLv3+ (object code)
./hw/odo.sch (1b) GPLv3+
./hw/packages/0.125W_resistor (1c) GPLv3+
./hw/packages/0603 (1c) GPLv3+
./hw/packages/0805 (1c) GPLv3+
./hw/packages/1210 (1c) GPLv3+
./hw/packages/2.5mm_10pin_header (1c) GPLv3+
./hw/packages/adxl210 (1c) GPLv3+
./hw/packages/crystal (1c) GPLv3+
./hw/packages/hmc1021z (1c) GPLv3+
./hw/packages/jtag1.27x1 (1c) GPLv3+
./hw/packages/led0805 (1c) GPLv3+
./hw/packages/lp2980 (1c) GPLv3+
./hw/packages/msop8 (1c) GPLv3+
./hw/packages/pin (1c) GPLv3+
./hw/packages/qfp64 (1c) GPLv3+
./hw/packages/README (0) GPLv3+
./hw/packages/tanA (1c) GPLv3+
./hw/packages/tanC (1c) GPLv3+
./hw/packages/tp (1c) GPLv3+
./hw/README (0) GPLv3+
./hw/schematics/gyro.png (0) GPLv3+ (object code)
./hw/schematics/odo.png (0) GPLv3+ (object code)
./hw/schematics/stribog.png (0) GPLv3+ (object code)
./hw/stribog.sch (1b) GPLv3+
./hw/sym/adm202.sym (1d) GPLv2
./hw/sym/adxl210.sym (1d) GPLv2
./hw/sym/adxrs300.sym (1d) GPLv2
./hw/sym/ATmega8-1.sym (1d) GPLv2
./hw/sym/bat54c.sym (1d) GPLv2
./hw/sym/dac7612.sym (1d) GPLv2
./hw/sym/hmc1021.sym (1d) GPLv2
./hw/sym/hmc1022.sym (1d) GPLv2
./hw/sym/ina118.sym (1d) GPLv2
./hw/sym/irf7317.sym (1d) GPLv2
./hw/sym/irf7507.sym (1d) GPLv2
./hw/sym/irlml.sym (1d) GPLv2
./hw/sym/JTAG.sym (1d) GPLv2
./hw/sym/led.sym (1d) GPLv2
./hw/sym/lm74.sym (1d) GPLv2
./hw/sym/lp2980AIM5-3.sym (1d) GPLv2
./hw/sym/lp2980AIM5-5.sym (1d) GPLv2
./hw/sym/lpc2138.sym (1d) GPLv2
./hw/sym/README (0) GPLv3+
./hw/sym/ref195.sym (1d) GPLv2
./hw/sym/tps76316.sym (1d) GPLv2
./INSTALL (3a) I_unlimited -> GPLv3+
./install-sh (3b) X_permissive -> GPLv3+
./Makefile.am (0) GPLv3+
./Makefile.in (3) AT_permissive => GPLv3+ (object code)
./missing (3a) GPLv2+ -> GPLv3+
./NEWS (0) GPLv3+
./README (0) GPLv3+
./sw/auxilia/aclocal.m4 (3) AT_permissive => GPLv3+ (object code)
./sw/auxilia/AUTHORS (6) copyright notes: open for necessary additions
./sw/auxilia/ChangeLog (0) GPLv3+
./sw/auxilia/coil/sampler.c (0) GPLv3+
./sw/auxilia/config.guess (3a) GPLv2+ -> GPLv3+
./sw/auxilia/config.h.in (3) GPLv3+ (object code)
./sw/auxilia/configure (3) C_unlimited => GPLv3+ (object code)
./sw/auxilia/configure.ac (0) GPLv3+
./sw/auxilia/COPYING (5) license terms: distributable verbatim
./sw/auxilia/INSTALL (3a) I_unlimited -> GPLv3+
./sw/auxilia/m4/makefile.m4 (0) GPLv3+
./sw/auxilia/Makefile.am (0) GPLv3+ (object code)
./sw/auxilia/Makefile.am.m4 (0) GPLv3+
./sw/auxilia/Makefile.in (3) AT_permissive => GPLv3+ (object code)
./sw/auxilia/NEWS (0) GPLv3+
./sw/auxilia/odo/hodo.c (0) GPLv3+
./sw/auxilia/odo/prog (0) GPLv3+
./sw/auxilia/README (0) GPLv3+
./sw/common/form_fix.h (0) GPLv3+
./sw/common/Makefile.am (0) GPLv3+
./sw/common/Makefile.in (3) AT_permissive => GPLv3+ (object code)
./sw/common/ram_loader_enums.h (0) GPLv3+
./sw/host/aclocal.m4 (3) AT_permissive => GPLv3+ (object code)
./sw/host/AUTHORS (6) copyright notes: open for necessary additions
./sw/host/ChangeLog (0) GPLv3+
./sw/host/compile (3a) GPLv2+ -> GPLv3+
./sw/host/config.guess (3a) GPLv2+ -> GPLv3+
./sw/host/config.h.in (3) GPLv3+ (object code)
./sw/host/config.sub (3a) GPLv2+ -> GPLv3+
./sw/host/configure (3) C_unlimited => GPLv3+ (object code)
./sw/host/configure.ac (0) GPLv3+
./sw/host/conloq.src/caed.c (0) GPLv3+
./sw/host/conloq.src/conloq.c (0) GPLv3+
./sw/host/conloq.src/elig.c (0) GPLv3+
./sw/host/conloq.src/exp-brief.c (0) GPLv3+
./sw/host/conloq.src/exp.c (0) GPLv3+
./sw/host/conloq.src/exp_gps.h (0) GPLv3+
./sw/host/conloq.src/exp.h (0) GPLv3+
./sw/host/conloq.src/expon.c (0) GPLv3+
./sw/host/conloq.src/garmin_bin.c (0) GPLv3+
./sw/host/conloq.src/garmin_nmea.c (0) GPLv3+
./sw/host/conloq.src/get_u.h (0) GPLv3+
./sw/host/conloq.src/hodo.c (0) GPLv3+
./sw/host/conloq.src/hodo.h (0) GPLv3+
./sw/host/conloq.src/lla.c (0) GPLv3+
./sw/host/conloq.src/lla.h (0) GPLv3+
./sw/host/conloq.src/magex-conloq.c (0) GPLv3+
./sw/host/conloq.src/magexp.c (0) GPLv3+
./sw/host/conloq.src/odo.c (0) GPLv3+
./sw/host/conloq.src/parse_tsip.c (0) GPLv3+
./sw/host/conloq.src/parse_tsipex.c (0) GPLv3+
./sw/host/conloq.src/parse_tsip.h (0) GPLv3+
./sw/host/conloq.src/preproc_gps.c (0) GPLv3+
./sw/host/conloq.src/preproc_gps.h (0) GPLv3+
./sw/host/conloq.src/process_keypress.c (0) GPLv3+
./sw/host/conloq.src/process_keypress.h (0) GPLv3+
./sw/host/conloq.src/scripts/expon (0) GPLv3+
./sw/host/conloq.src/serialia.c (0) GPLv3+
./sw/host/conloq.src/serialia.h (0) GPLv3+
./sw/host/conloq.src/usage.h (0) GPLv3+
./sw/host/conloq.src/verbosity_level.c (0) GPLv3+
./sw/host/conloq.src/verbosity_level.h (0) GPLv3+
./sw/host/conloq.src/wser.c (0) GPLv3+
./sw/host/COPYING (5) license terms: distributable verbatim
./sw/host/depcomp (3a) GPLv2+ -> GPLv3+
./sw/host/elk.src/elk.c (0) GPLv3+
./sw/host/elk.src/lpc_loader.c (0) GPLv3+
./sw/host/elk.src/lpc_loader.h (0) GPLv3+
./sw/host/elk.src/prefs.dat (8) not copyrightable
./sw/host/elk.src/ram_loader.c (0) GPLv3+
./sw/host/elk.src/ram_loader.h (0) GPLv3+
./sw/host/elk.src/serial.c (0) GPLv3+
./sw/host/elk.src/serialia.c (0) GPLv3+
./sw/host/elk.src/serialia.h (0) GPLv3+
./sw/host/elk.src/wser.c (0) GPLv3+
./sw/host/INSTALL (3a) I_unlimited -> GPLv3+
./sw/host/install-sh (3b) X_permissive -> GPLv3+
./sw/host/lib/argp/argp.c (0) GPLv3+
./sw/host/lib/argp/argpex.c (0) GPLv3+
./sw/host/lib/argp/argp.h (0) GPLv3+
./sw/host/lib/crc32.c (0) GPLv3+
./sw/host/lib/crc32.h (0) GPLv3+
./sw/host/lib/error.c (0) GPLv3+
./sw/host/lib/save_wd.c (0) GPLv3+
./sw/host/lib/save_wdex.c (0) GPLv3+
./sw/host/lib/save_wd.h (0) GPLv3+
./sw/host/lib/signal.c (0) GPLv3+
./sw/host/lib/signalex.c (0) GPLv3+
./sw/host/lib/snprintf_checked.c (0) GPLv3+
./sw/host/lib/snprintf_checked.h (0) GPLv3+
./sw/host/lib/stribog_error.h (0) GPLv3+
./sw/host/lib/stribog_signal.h (0) GPLv3+
./sw/host/lib/stribog_strings.h (0) GPLv3+
./sw/host/Makefile.am (0) GPLv3+
./sw/host/Makefile.in (3) AT_permissive => GPLv3+ (object code)
./sw/host/missing (3a) GPLv2+ -> GPLv3+
./sw/host/NEWS (0) GPLv3+
./sw/host/postproc/calib.dat (0) GPLv3+
./sw/host/postproc/error.c (0) GPLv3+
./sw/host/postproc/error.h (0) GPLv3+
./sw/host/postproc/exvel.c (0) GPLv3+
./sw/host/postproc/lege_lineam.c (0) GPLv3+
./sw/host/postproc/lege_lineam.h (0) GPLv3+
./sw/host/postproc/Makefile.am (0) GPLv3+
./sw/host/postproc/Makefile.in (3) AT_permissive => GPLv3+ (object code)
./sw/host/postproc/plot.gp (0) GPLv3+
./sw/host/postproc/process (0) GPLv3+
./sw/host/README (0) GPLv3+
./sw/host/tests/serial.c (0) GPLv3+
./sw/host/tests/term.c (0) GPLv3+
./sw/host/TODO (0) GPLv3+
./sw/host/utils/50hz.c (0) GPLv3+
./sw/host/utils/cutdrift (0) GPLv3+
./sw/host/utils/drift.c (0) GPLv3+
./sw/host/utils/driftex.c (0) GPLv3+
./sw/host/utils/fdif.c (0) GPLv3+
./sw/host/utils/lpfilter.c (0) GPLv3+
./sw/host/utils/stat.c (0) GPLv3+
./sw/target/aclocal.m4 (3) AT_permissive => GPLv3+ (object code)
./sw/target/AUTHORS (6) copyright notes: open for necessary additions
./sw/target/ChangeLog (0) GPLv3+
./sw/target/config.guess (3a) GPLv2+ -> GPLv3+
./sw/target/config.h.in (3) GPLv3+ (object code)
./sw/target/config.sub (3a) GPLv2+ -> GPLv3+
./sw/target/configure (3) C_unlimited => GPLv3+ (object code)
./sw/target/configure.ac (0) GPLv3+
./sw/target/COPYING (5) license terms: distributable verbatim
./sw/target/depcomp (3a) GPLv2+ -> GPLv3+
./sw/target/include/lpc2138.h (0) GPLv3+
./sw/target/INSTALL (3a) I_unlimited -> GPLv3+
./sw/target/install-sh (3b) X_permissive -> GPLv3+
./sw/target/lib/atexit.c (0) GPLv3+
./sw/target/m4/gnu-make.m4 (4) GNU_MAKE_permissive -> GPLv3+
./sw/target/m4/makefile.m4 (0) GPLv3+
./sw/target/Makefile.am (0) GPLv3+ (object code)
./sw/target/Makefile.am.m4 (0) GPLv3+
./sw/target/Makefile.in (3) AT_permissive => GPLv3+ (object code)
./sw/target/missing (3a) GPLv2+ -> GPLv3+
./sw/target/NEWS (0) GPLv3+
./sw/target/README (0) GPLv3+
./sw/target/src/2138.ld.in (0) GPLv3+
./sw/target/src/accel.c (0) GPLv3+
./sw/target/src/accelex.c (0) GPLv3+
./sw/target/src/accel.h (0) GPLv3+
./sw/target/src/adc.c (0) GPLv3+
./sw/target/src/adcex.c (0) GPLv3+
./sw/target/src/adc.h (0) GPLv3+
./sw/target/src/boot.s (0) GPLv3+
./sw/target/src/crc32.c (0) GPLv3+
./sw/target/src/crc32.h (0) GPLv3+
./sw/target/src/crcex.c (0) GPLv3+
./sw/target/src/dac.c (0) GPLv3+
./sw/target/src/dacex.c (0) GPLv3+
./sw/target/src/dac.h (0) GPLv3+
./sw/target/src/freq.h (0) GPLv3+
./sw/target/src/host/sqrtex.c (0) GPLv3+
./sw/target/src/init.c (0) GPLv3+
./sw/target/src/init.h (0) GPLv3+
./sw/target/src/inledex.c (0) GPLv3+
./sw/target/src/led.c (0) GPLv3+
./sw/target/src/ledex.c (0) GPLv3+
./sw/target/src/led.h (0) GPLv3+
./sw/target/src/lm74.c (0) GPLv3+
./sw/target/src/lm74ex.c (0) GPLv3+
./sw/target/src/lm74.h (0) GPLv3+
./sw/target/src/loader.boot.s (0) GPLv3+
./sw/target/src/loader.c (0) GPLv3+
./sw/target/src/loader.ld.in (0) GPLv3+
./sw/target/src/mag.c (0) GPLv3+
./sw/target/src/magex.c (0) GPLv3+
./sw/target/src/mag.h (0) GPLv3+
./sw/target/src/mag_response.c (0) GPLv3+
./sw/target/src/multa.c (0) GPLv3+
./sw/target/src/mutex.c (0) GPLv3+
./sw/target/src/mutex.h (0) GPLv3+
./sw/target/src/pll.c (0) GPLv3+
./sw/target/src/pllex.c (0) GPLv3+
./sw/target/src/pll.h (0) GPLv3+
./sw/target/src/power.c (0) GPLv3+
./sw/target/src/powerex.c (0) GPLv3+
./sw/target/src/power.h (0) GPLv3+
./sw/target/src/ram2138.ld.in (0) GPLv3+
./sw/target/src/sizes.c (0) GPLv3+
./sw/target/src/sqrt.c (0) GPLv3+
./sw/target/src/sqrt.h (0) GPLv3+
./sw/target/src/tempus.c (0) GPLv3+
./sw/target/src/tempusex.c (0) GPLv3+
./sw/target/src/tempus.h (0) GPLv3+
./sw/target/src/uart0.c (0) GPLv3+
./sw/target/src/uart0.h (0) GPLv3+
./sw/target/src/uart1.c (0) GPLv3+
./sw/target/src/uart1ex.c (0) GPLv3+
./sw/target/src/uart1.h (0) GPLv3+
./sw/target/src/uart1out.c (0) GPLv3+
./sw/target/src/uart1out.h (0) GPLv3+
./sw/target/src/uart.config.h (0) GPLv3+
./sw/target/subst_ldscript (0) GPLv3+
./THANKS (6a) GPLv3+ informal acknowledgemets
./TODO (0) GPLv3+
