Difference between revisions of "User:Roirodriguez"

From PaparazziUAV
Jump to navigation Jump to search
Line 22: Line 22:


I'm writting 'QUESTION:' at the begining of the lines that represent questions i've got, patches i'm not sure to be accurate, etc. This way everybody can find them easily...
I'm writting 'QUESTION:' at the begining of the lines that represent questions i've got, patches i'm not sure to be accurate, etc. This way everybody can find them easily...
You can find all the deb packages and modified source files (.tar.gz) at [http://imasdtrade.x10hosting.com/paparazzi/ http://imasdtrade.x10hosting.com/paparazzi/].


=== Paparazzi-dev packages ===
=== Paparazzi-dev packages ===

Revision as of 14:07, 4 February 2010

About me

  • Location: Santiago de Compostela (Spain).
  • Skills: 4 years working as a software developer over free software, and linux user and developer for the last 13 years. Now i'm back to the university to finish my physics studies.
  • Paparazzi status: Newbie. Just starting. I'm trying to get money to buy a plane and learn how to fly it (good start :-); after that i'll go into paparazzi. For now i'm just running some simulations and compiling it for my amd64 system.
  • Paparazzi goals:
    • Compile the sources for my ubuntu karmic amd64 platform. If possible generate deb packages to make installation on other amd64 systems easier.
    • Learn to fly a plane.
    • Learn to program AMD7 devices.
    • Study paparazzi source code, run lots of simulations... Until i've got a good overall idea of what's going on.
    • Build a paparazzi board, and install it into my plane.
    • Develope some ideas i've got, around paparazzi.

Ubuntu Karmic AMD64 Compilation log

Intro

The following explains my experience compiling all paparazzi-dev, paparazzi-arm7 and paparazzi-bin software for my amd64 machine, running an Ubuntu Karmic linux distribution.

It must be taken into account that i'm a complete newbie to paparazzi, arm7 and so. So my goal was primarly making it all compile, and patch where necessary for that, but testing on those patches was not done.

The final goal of this document is to clarify about which version of each piece of software has to be compiled, where to find that software, patches needed to make it compile on amd64... I'm making it public because i saw people tried to compile it for 64bit systems with no success, and because i need a few answers to some questions in order to make really tested and accurate deb packages.

I'm writting 'QUESTION:' at the begining of the lines that represent questions i've got, patches i'm not sure to be accurate, etc. This way everybody can find them easily...

You can find all the deb packages and modified source files (.tar.gz) at http://imasdtrade.x10hosting.com/paparazzi/.

Paparazzi-dev packages

About ivy-c, ivy-c-dev, ivy-ocaml and ivy-python packages. The rest of the software on which paparazzi-dev depends can be found in the ubuntu repositories for karmic. If you have a distribution different from ubuntu karmic which doesn't satisfy any other dependency and have instructions about compiling it, packaging it, etc, please feel free to add any reference on how here...

Ivy-python: The ivy-python package is architecture independant, so it can be downloaded from the ubuntu or debian paparazzi repository, at [1]. There you can find also the .tar.gz source package for it...

About Ivy versions

You can find the Ivy software bus homepage at http://www2.tls.cena.fr/products/ivy/. There you can find documentation, svn repository location, etc.

If you take a look to the files at http://paparazzi.enac.fr/ubuntu/dists/karmic/main/binary-i386/ you'll see two different version numbers for ivy-c packages, and 3 for ivy-ocaml packages:

If you take a look to the control files of each of those ivy-ocaml packages (you can do it downloading the package and then dpkg --info PACKAGE_DOWNLOADED from the command line. See the line starting with 'Depends:') you'll see all of them tell to be compatible with ivy-c versions >= 3.8.

However my experience with ivy-ocaml_1.1-7 (the only one for which source code is provided) is that it is not compatible with ivy-c 3.11.4. The civyloop.c source file in the ivy-ocaml_1.1-7 package makes use of the IvyMainLoop function (defined in the ivy-c package) in the following way:

value ivy_mainLoop(value unit)
{
  IvyMainLoop (NULL, NULL);
  return Val_unit;
}

Definitions for the IvyMainLoop function in the ivy-c package are as follows. For 3.8:

extern void IvyMainLoop(void(*BeforeSelect)(void),void(*AfterSelect)(void) );

And for 3.11:

extern void IvyMainLoop(void);

So 3.8 version of that function has 2 arguments and 3.11 has no arguments at all. So we've to use 3.8 version. We'll get an error about 'too much arguments for IvyMainLoop' if we try to compile ivy-ocaml_1.1-7 with ivy-c_3.11.4-1.

But there's no source for ivy-c_3.8.1-1 in the paparazzi repository, where did i get it from? From the ivy-c svn repository, the svn command is the following:

svn co http://svn.tls.cena.fr/svn/ivy/ivy-c/tags/debian_version_3_8_1-1 ivy-c_3.8.1

NOTE: Don't try to get ivy-ocaml too from the main ivy svn repository at http://svn.tls.cena.fr/svn/ivy/ivy-ocaml. It's main developer Pascal Brisset told me to use that ivy-ocaml_1.1-7.tar.gz file in the paparazzi repository instead. Svn repository for ivy-ocaml seems unused.

So we'll compile ivy-c_3.8.1 coming from the main ivy-c svn repository, and ivy-ocaml_1.1-7.tar.gz in the paparazzi repository (link above).

QUESTION: Where do i find sources (tar.gz) for ivy-ocaml_1.1 revisions 8 and 9??

QUESTION: Wouldn't it be better to change ivy-ocaml_1.1-7 control file to depend strictly on ivy-c 3.8 version?

Ivy-c (3.8.1)

As told above, source packages for this version of ivy-c can be downloaded with the following command (command line):

svn co http://svn.tls.cena.fr/svn/ivy/ivy-c/tags/debian_version_3_8_1-1 ivy-c_3.8.1
Compilation

To compile it you've just enter the src directory and type make, then make install as usual:

cd ivy-c_3.8.1/src
make
sudo make install

This will compile the sources and install header files, libraries and the ivyprobe program under /usr/local on your system.

Debian packages

The source we downloaded above is debianized. For 32bit systems you just need to:

cd ivy-c_3.8.1
dpkg-buildpackage -rfakeroot -uc -us

And done. You'll get your .deb packages in the directory containing ivy-c_3.8.1 (up one level).

For 64bit systems there's a problem: The Makefile at src/Makefile sets the relative path for the target libraries in the variable LIB. This is set to 'lib' or 'lib64', this last for 64bit systems. However, if you take a look at those debian/ivy-c.dirs and debian/ivy-c.install files there's no files being installed for usr/lib64 or usr/X11R6/lib64 (just usr/lib and usr/X11R6/lib libraries are installed in the debian package).

We'll modify debian/rules to override the LIB environment variable when calling make to equal 'lib' always (even if your system is a 64bit one, /usr/lib64 will be just a symbolic link to /usr/lib). Just change the line (debian/rules, remember):

cd src && $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp PREFIX=/usr

By:

cd src && $(MAKE) install DESTDIR=$(CURDIR)/debian/tmp PREFIX=/usr LIB=/lib

And done, now you can run dpkg-buildpackage as usual.

You can find the sources for 3.8 already properly debianized for 64bit systems by me at http://imasdtrade.x10hosting.com/paparazzi/ivy-c_3.8.1-2.tar.gz. There you can find the .deb packages for ivy-c and ivy-dev (amd64) too. I've changed the debian/changelog file too...

Ivy-ocaml (1.1-7)

Compilation

That doesn't work on 64bit systems, if you just run 'make':

/usr/bin/ld: civyloop.o: relocation R_X86_64_32 against `timer_cb' can not be used when making a shared object; recompile with -fPIC

That's solved by just editing the Makefile. Change the line:

.c.o :
        $(CC) -Wall -c $(OCAMLINC) $(GLIBINC) $<

By:

.c.o :
       $(CC) -Wall -c -fPIC $(OCAMLINC) $(GLIBINC) $<

And done.

The following section (debian packaging) does the same but distributing the change as a dpatch to the sources instead editing the Makefile. This way we don't modify the sources, but just distribute a patch which can be integrated in debian/rules or used by its own (read dpatch manual page, man dpatch).

Debian packages

As told above, all we are going to do here is to distribute that change in the Makefile as a dpatch, and integrate the dpatch system into debian/rules. I'll not explain in depth how dpatch works, you can read http://www.debian.org/doc/maint-guide/ch-build.en.html for an introduction and then read the dpatch manual page (man dpatch).

Open debian/rules for editing and add, at the first line of the file (after the comments at the beginning), the following:

# Include dpatch stuff.
include /usr/share/dpatch/dpatch.make

That will include default dpatch rules for Makefiles, like 'patch', 'unpatch' and so.

Then edit the 'build' and 'clean' rules in debian/rules to depend on 'patch' and 'unpatch'. That means, replace the line:

build: build-stamp

By:

build: patch build-stamp

And the line:

clean:

By:

clean: unpatch

And done. This will make dpkg-buildpackage to apply the patches listed in debian/patches/00list before building, and deapply it on cleaning.

Now we've got to add our patch to debian/patches and list it in debian/patches/00list.amd64 (which lists patches being applied only for amd64 targets). For this run from the command line (you must be in the ivy-ocaml sources root dir!):

dpatch-edit-patch 01_ccfpic.dpatch

That will put you on a shell where you can edit all files you need. Just edit the Makefile as told above in Compiling and then type exit in that shell. After exiting a dpatch file will appear under debian/patches directory, named 01_ccfpic.dpatch.

Finally we've got to list that patch in a file called debian/patches/00list.amd64. Open that file for editing and add one single line saying:

01_ccfpic.dpatch

And now you can run dpkg-buildpackage to generate your deb packages. You can find mine (amd64), and modified sources (dpatch modifications described here, changelog file) in http://imasdtrade.x10hosting.com/paparazzi/.

Paparazzi-arm7 packages

Toolchain (binutils, gcc, newlib)

About gcc versions
Toolchain compilation
Debian packages

lpcisp

Compilation
Debian packages

Paparazzi-bin package

Compilation

Debian packages