Compilació MidiShare

De wikijoan
Salta a la navegació Salta a la cerca

Aquest document està realitzat per a Ubuntu Studio 7.10

Compilació MidiShare

d'entrada quan et baixes les fonts de midishare i les instal.les al Ubuntu Studio peta. Hi ha més gent que s'ha trobat aquest problema (buscar al google 'ubuntu midishare' o 'debian midishare') La qüestió és que midishare es va desenvolupar en Linux pensant en Red Hat.

El AGNULA project és un projecte que està abandonat, i que pretenia fer una distribució multimedia tant per a RH com per a Debian (DeMuDi), i que sembla ser que tenien instal.lat midishare en la distro de Debian.

These new packages have been added to this DeMuDi release (the complete packages
list is almost the same of the previous release, see [1] and [2]):
MidiShare : MidiShare is a real-time multi-tasks MIDI operating system specially
        devised for the development of musical applications. It provides a powerful and
        efficient toolbox for developing professional MIDI applications. It is composed
        of a kernel module and a library which allows to rapid development real time
        MIDI-based musical applications. This software is developed by Grame - Centre
        National de creation musicale

solució: he de compilar les fonts i veure on estan els problemes. Com es veu a través d'aquest how-to, la solució ha estat llarga i passa per compilar les fonts de la branca de desenvolupament (CVS)

Anem a fer la compilació de la llibreria midishare

$ cp /home/joan/Desktop/midishare-1.91-linux2.6-src.tar.gz /home/joan
$ tar -xvzf midishare-1.91-linux2.6-src.tar.gz 
$ cd midishare-1.91-linux2.6-src/src/linux/

$ ./configure

dóna una error, canviar la primera línia per:

#!/bin/bash

Ara ja puc fer

$ ./configure

amb l'opció

$ make -n

puc veure les comandes que executa el make, i així seguir la pista

hi ha 5 passos:

make -C ../common 
make -C ../common/Memory
make -C library 
make  -C kernel
make -f appls

opció:

 -C dir, --directory=dir
Change to directory dir before reading the makefiles or doing anything else.  If multiple -C options are specified, each is interpreted relative to the previous one: -C / -C etc is equivalent to -C /etc.  This is typically used with recursive invocations of make.

Pas 1: cd ../common [ha funcionat correctament]

mirem el fitxer makefile:

TARGET = ../linux/msCommon.o

l'objectiu és crear el fitxer objecte msCommon.o

cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o Clients/msAlarms.o Clients/msAlarms.c
cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o Clients/msAppls.o Clients/msAppls.c
cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o Clients/msConnx.o Clients/msConnx.c
cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o Clients/msFilter.o Clients/msFilter.c
cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o Clients/msMail.o Clients/msMail.c
cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o Clients/msTasks.o Clients/msTasks.c
cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o Clients/msXmtRcv.o Clients/msXmtRcv.c
cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o Kernel/msHandler.o Kernel/msHandler.c
cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o Kernel/msInit.o Kernel/msInit.c
cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o Kernel/msSmpte.o Kernel/msSmpte.c
cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o Kernel/msTime.o Kernel/msTime.c
cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o Memory/msEvents.o Memory/msEvents.c
cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o Memory/msFields.o Memory/msFields.c
cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o Memory/msMemory.o Memory/msMemory.c
cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o Memory/msSeq.o Memory/msSeq.c
cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o Sorter/msSorter.o Sorter/msSorter.c
cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o Drivers/msDriver.o Drivers/msDriver.c
cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o atomic/lflifo.o atomic/lflifo.c
cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o atomic/lffifo.o atomic/lffifo.c
ld -m elf_i386 -r -o ../linux/msCommon.o  Clients/msAlarms.o  Clients/msAppls.o  Clients/msConnx.o  Clients/msFilter.o  Clients/msMail.o  Clients/msTasks.o  Clients/msXmtRcv.o  Kernel/msHandler.o  Kernel/msInit.o  Kernel/msSmpte.o  Kernel/msTime.o  Memory/msEvents.o  Memory/msFields.o  Memory/msMemory.o  Memory/msSeq.o  Sorter/msSorter.o  Drivers/msDriver.o  atomic/lflifo.o  atomic/lffifo.o

fixem-nos en la primera línia:

cc  -D_LOOSE_KERNEL_NAMES -DMODVERSIONS -D__Pentium__ -DCONFIG_KERNELD -DMODULE -D__KERNEL__ -DLINUX  -D__NO_VERSION__  -I Headers -I atomic -I /lib/modules/`uname -r`/build/include/    -c -o Clients/msAlarms.o Clients/msAlarms.c

l'objectiu és crear, a partir de Clients/msAlarms.c, que existeix, el fitxer objecte Clients/msAlarms.o. Executem i funciona.

Fem el mateix per als altres. Tots es creen correctament

ld -m elf_i386 -r -o ../linux/msCommon.o  Clients/msAlarms.o  Clients/msAppls.o  Clients/msConnx.o  Clients/msFilter.o  Clients/msMail.o  Clients/msTasks.o  Clients/msXmtRcv.o  Kernel/msHandler.o  Kernel/msInit.o  Kernel/msSmpte.o  Kernel/msTime.o  Memory/msEvents.o  Memory/msFields.o  Memory/msMemory.o  Memory/msSeq.o  Sorter/msSorter.o  Drivers/msDriver.o  atomic/lflifo.o  atomic/lffifo.o

ld: the GNU linker el que fem ara és el procés de linkar tots els fitxers objecte per crear el fitxer ../linux/msCommon.o (opció -o, output), a partir de tots els fitxers objecte que hem creat anteriorment. ha funcionat correctament, s'ha creat el fitxer msCommon.o

Pas 2: cd ../common/Memory [ha funcionat correctament]

gcc -O0 -Wall -g -D_REENTRANT -D_LOOSE_KERNEL_NAMES -D__Pentium__  -I../Headers -I../atomic -c msMemory.c  -o lib/msMemory.o
gcc -O0 -Wall -g -D_REENTRANT -D_LOOSE_KERNEL_NAMES -D__Pentium__  -I../Headers -I../atomic -c msEvents.c  -o lib/msEvents.o
gcc -O0 -Wall -g -D_REENTRANT -D_LOOSE_KERNEL_NAMES -D__Pentium__  -I../Headers -I../atomic -c msSeq.c  -o lib/msSeq.o
gcc -O0 -Wall -g -D_REENTRANT -D_LOOSE_KERNEL_NAMES -D__Pentium__  -I../Headers -I../atomic -c ../atomic/lflifo.c  -o lib/lflifo.o
ld  lib/msMemory.o  lib/msEvents.o  lib/msSeq.o lib/lflifo.o -g  -r -o ../../linux/libCommon.o

dins del directori lib no hi ha res. L'objectiu és crear dins el directori lib aquests 4 fitxers objecte (msMemory.o, msEvents.o, msSeq.o, lflifo.o), i després linkar per crear el fitxer libCommon.o en el mateix directori que hem linkat abans.

Pas 3: cd library [ha funcionat correctament]

gcc -O3 -Wall -g -D_REENTRANT -D__Pentium__ -fPIC -I../../common/Headers -I../../common/atomic   -c -o libMidiShare.o libMidiShare.c
gcc libMidiShare.o ../libCommon.o -g -lpthread -shared -fPIC -W1,soname,libMidiShare.so.1 -o libMidiShare.so.1.0
if [ ! -f libMidiShare.so.1 ]; then ln -s libMidiShare.so.1.0 libMidiShare.so.1; fi
if [ ! -f libMidiShare.so ]; then ln -s libMidiShare.so.1 libMidiShare.so; fi

es creen de forma correcta els fitxers libMidiShare.o i libMidiShare.so.1.0

ln: crea un enllaç entre fitxers

es creen els enllaços:

libMidiShare.so.1 -> libMidiShare.so.1.0
libMidiShare.so -> libMidiShare.so.1

per veure com funciona aquesta última part faig un petit script, que anomeno prova:

#!/bin/bash
#
if [ ! -f fitxer_hola ]; then echo no existeix el fitxer; else echo si existeix el fitxer; fi
$ chmod +x prova
$ ./prova
no existeix el fitxer

com podem veure, l'opció f comprova l'existència del fitxer. Per tant, el que fa és, que si no existeix l'enllaç simbòlic, el crea.

Pas 4: cd kernel [ha funcionat correctament?]

ha funcionat correctament? -> de moment no -> al final ho he aconseguit (veure al final del document)


for x in atomic/lffifoIntel.c atomic/lflifoIntel.c Clients/msAlarms.c Clients/msAppls.c Clients/msConnx.c Clients/msFilter.c Clients/msMail.c Clients/msTasks.c Clients/msXmtRcv.c Kernel/msHandler.c Kernel/msInit.c Kernel/msSmpte.c Kernel/msTime.c Memory/msEvents.c Memory/msFields.c Memory/msMemory.c Memory/msSeq.c Sorter/msSorter.c Drivers/msDriver.c; 
do ln -sf ../../common/$x `basename $x`; 
done
make modules -C /lib/modules/2.6.22-15-rt/build SUBDIRS=/home/joan/midishare-1.91-linux2.6-src/src/linux/kernel
make[1]: Entering directory `/lib/modules/2.6.22-15-rt/build'
make[1]: *** No rule to make target `modules'.  Stop.
make[1]: Leaving directory `/lib/modules/2.6.22-15-rt/build'
make: *** [all] Error 2


el primer que fem és crear uns enllaços simbòlics a partir de tots els fitxers que passem en el bucle for:

for x in atomic/lffifoIntel.c atomic/lflifoIntel.c Clients/msAlarms.c Clients/msAppls.c Clients/msConnx.c Clients/msFilter.c Clients/msMail.c Clients/msTasks.c Clients/msXmtRcv.c Kernel/msHandler.c Kernel/msInit.c Kernel/msSmpte.c Kernel/msTime.c Memory/msEvents.c Memory/msFields.c Memory/msMemory.c Memory/msSeq.c Sorter/msSorter.c Drivers/msDriver.c; do ln -sf ../../common/$x `basename $x`; done

aquí he trobat un fallo, perquè des d'on estic no puc accedir als directoris /atomic, /Clients,...

em situo a /src/common$ i faig

for x in atomic/lffifoIntel.c atomic/lflifoIntel.c Clients/msAlarms.c Clients/msAppls.c Clients/msConnx.c Clients/msFilter.c Clients/msMail.c Clients/msTasks.c Clients/msXmtRcv.c Kernel/msHandler.c Kernel/msInit.c Kernel/msSmpte.c Kernel/msTime.c Memory/msEvents.c Memory/msFields.c Memory/msMemory.c Memory/msSeq.c Sorter/msSorter.c Drivers/msDriver.c; do ln -sf $x `basename $x`; done

i ara ja tinc els links ben fets: (estan ben fets els links aquí?)

lrwxrwxrwx  1 joan joan   20 2008-10-06 13:28 lffifoIntel.c -> atomic/lffifoIntel.c
lrwxrwxrwx  1 joan joan   20 2008-10-06 13:28 lflifoIntel.c -> atomic/lflifoIntel.c
lrwxrwxrwx  1 joan joan   18 2008-10-06 13:28 msAlarms.c -> Clients/msAlarms.c
lrwxrwxrwx  1 joan joan   17 2008-10-06 13:28 msAppls.c -> Clients/msAppls.c
lrwxrwxrwx  1 joan joan   17 2008-10-06 13:28 msConnx.c -> Clients/msConnx.c
lrwxrwxrwx  1 joan joan   18 2008-10-06 13:28 msDriver.c -> Drivers/msDriver.c
lrwxrwxrwx  1 joan joan   17 2008-10-06 13:28 msEvents.c -> Memory/msEvents.c
lrwxrwxrwx  1 joan joan   17 2008-10-06 13:28 msFields.c -> Memory/msFields.c
lrwxrwxrwx  1 joan joan   18 2008-10-06 13:28 msFilter.c -> Clients/msFilter.c
lrwxrwxrwx  1 joan joan   18 2008-10-06 13:28 msHandler.c -> Kernel/msHandler.c
lrwxrwxrwx  1 joan joan   15 2008-10-06 13:28 msInit.c -> Kernel/msInit.c
lrwxrwxrwx  1 joan joan   16 2008-10-06 13:28 msMail.c -> Clients/msMail.c
lrwxrwxrwx  1 joan joan   17 2008-10-06 13:28 msMemory.c -> Memory/msMemory.c
lrwxrwxrwx  1 joan joan   14 2008-10-06 13:28 msSeq.c -> Memory/msSeq.c
lrwxrwxrwx  1 joan joan   16 2008-10-06 13:28 msSmpte.c -> Kernel/msSmpte.c
lrwxrwxrwx  1 joan joan   17 2008-10-06 13:28 msSorter.c -> Sorter/msSorter.c
lrwxrwxrwx  1 joan joan   17 2008-10-06 13:28 msTasks.c -> Clients/msTasks.c
lrwxrwxrwx  1 joan joan   15 2008-10-06 13:28 msTime.c -> Kernel/msTime.c
lrwxrwxrwx  1 joan joan   18 2008-10-06 13:28 msXmtRcv.c -> Clients/msXmtRcv.c


KERNEL_DIR := /lib/modules/$(shell uname -r)/build
$ uname -r -> per saber el kernel

em situo a /src/common$ i faig

make modules -C /lib/modules/2.6.22-15-rt/build SUBDIRS=/home/joan/midishare-1.91-linux2.6-src/src/linux/kernel

make: Entering directory `/lib/modules/2.6.22-15-rt/build'
make: *** No rule to make target `modules'.  Stop.
make: Leaving directory `/lib/modules/2.6.22-15-rt/build'

lògic que falli perquè fer 'make modules' vol dir que hi ha d'haver en el directori destí un fitxer makefile amb una regla 'modules'

el problema és que no he trobat cap makefile amb l'etiqueta modules

Ja tinc la pista. En el Readme queda clar que

Linux kernel source code MUST be installed prior to compile the midishare module

i jo no tinc instal.lat el Linux Kernel Source, és a dir, no tinc les fonts instal.lades del kernel. Si ho faig, és de suposar que al fer el make modules funcionarà perquè trobarà el Makefile en el seu lloc.

a /lib/modules/2.6.22-15-rt s'instal.len els mòduls compilats, però no les fonts

en ppi, les fonts s'instal.laran a /usr/src/linux

per baixar les fonts he de fer:

$ cd /usr/src
$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.1.tar.bz2

però això ho he de fer per al kernel que a mi m'interessa, que és el 2.6.22-15-rt

m'ho baixo com un paquet de debian: linux-image-2.6.22-15-rt_2.6.22-15.58_i386.deb

$ sudo dpkg -i linux-image-2.6.22-15-rt_2.6.22-15.58_i386.deb

em sembla que ha actualitzat el kernel, però no ha instal.lat les fonts

descarrego els headers, que em sembla que són les fonts:

linux-headers-2.6.22-15-rt_2.6.22-15.58_i386.deb

$ sudo dpkg -i linux-headers-2.6.22-15-rt_2.6.22-15.58_i386.deb

abans he de fer:

$ sudo dpkg -i linux-restricted-modules-2.6.22-15-386_2.6.22.4-15.11_i386.deb 
$ sudo dpkg -i linux-headers-2.6.22-15-rt_2.6.22-15.58_i386.deb

-> funciona, fer-ho amb el Synaptic

ara ja tinc en el /usr/src les carpetes

linux-headers-2.6.22-15 i linux-headers-2.6.22-15-rt

que a dins tenen el respectiu Makefile.

el paquet linux-headers-2.6.22-15-rt depèn del linux-headers-2.6.22-15

http://ccrma-mail.stanford.edu/pipermail/cmdist/2005-March/002362.html

$ modprobe Midishare

-> puc comprovar que no hi ha el mòdul Midishare instal.lat. En ppi, si aquest pas funcionés, hauria de tenir el mòdul instal.lat.

If it fails you may have a module installation problem. Review your build and installation steps, and make sure the MidiShare.o module is present in /lib/modules/your-kernel-here/misc (or similar path). If you continue to have problems contact the MidiShare developers.

dins del directori midishare.../src/linux hi ha l'aplicatiu Midishare (és el dimoni):

$ sudo ./MidiShare start
* Unable to load midishare kernel module
intenta carregal el mòdul, però evidentment no pot.

quan tingui instal.lat el mòdul podré fer coses del tipus:

fluidsynth --midi-driver=midishare --audio-driver=alsa -C0 -R0 -g3 /home/dlphilp/soundfonts/8mbgmsfx.sf2

en la carpeta /src/common hi ha un ReadMe.txt sobre el kernel

The MidiShare kernel development documentation is located in the DevGuide folder. Hi ha el fitxer msKernelDevGuide.pdf

http://lists.linuxaudio.org/pipermail/linux-audio-dev/2004-July/009164.html

Albert Graef ha aconseguit compilar Midishare en el Suse 9.1 en un kernel 2.6

http://sourceforge.net/mailarchive/message.php?msg_id=452BEF7D.8080401%40t-online.de
http://sourceforge.net/mailarchive/message.php?msg_id=1198322481.12843.19.camel%40localhost.localdomain
http://sourceforge.net/project/showfiles.php?group_id=96881

Al final la pista de la solució arriba enviant una pregunta al foro de midishare-dev. Veure al final del document...

Pas 5: cd make -f appls [ha funcionat correctament?]

ha funcionat correctament? -> m'ha fallat l'apartat cd applications, per problemes amb la llibreria GTK

make -f appls 
       -f file, --file=file, --makefile=FILE
            Use file as a makefile.

això significa que faig un make en el que no hi ha un fitxer que es diu 'makefile' sinó que n'hi ha un que es diu 'appls'

$ make -f appls -n

fa dues coses

make -C ../lib 
for a in applications tools drivers; do make -C $a; done

primer entro dins de ../lib i faig el make

cc -O3 -Wall  -D__Pentium__ -I../linux/Include   -c -o MidiPrint.o MidiPrint.c
cc -O3 -Wall  -D__Pentium__ -I../linux/Include   -c -o EventToMidiStream.o EventToMidiStream.c
cc -O3 -Wall  -D__Pentium__ -I../linux/Include   -c -o MidiStreamToEvent.o MidiStreamToEvent.c
cc -O3 -Wall  -D__Pentium__ -I../linux/Include   -c -o msDrvUtils.o msDrvUtils.c
ld -m elf_i386 -r -o ../linux/lib/msUtilities.o MidiPrint.o EventToMidiStream.o MidiStreamToEvent.o msDrvUtils.o 
make -f make.module

es linka bé el fitxer msUtilities.o

aleshores faig el make amb la informació del fitxer make.module

$ make -f make.module -n:

cc -O3 -Wall  -D__Pentium__ -DMODULE -D_LOOSE_KERNEL_NAMES -DCONFIG_KERNELD  -I../linux/Include -I../common/Headers -I../common/atomic   -c -o kMidiPrint.o kMidiPrint.c
cc -O3 -Wall  -D__Pentium__ -DMODULE -D_LOOSE_KERNEL_NAMES -DCONFIG_KERNELD  -I../linux/Include -I../common/Headers -I../common/atomic   -c -o kEventToMidiStream.o kEventToMidiStream.c
cc -O3 -Wall  -D__Pentium__ -DMODULE -D_LOOSE_KERNEL_NAMES -DCONFIG_KERNELD  -I../linux/Include -I../common/Headers -I../common/atomic   -c -o kMidiStreamToEvent.o kMidiStreamToEvent.c
cc -O3 -Wall  -D__Pentium__ -DMODULE -D_LOOSE_KERNEL_NAMES -DCONFIG_KERNELD  -I../linux/Include -I../common/Headers -I../common/atomic   -c -o kmsDrvUtils.o kmsDrvUtils.c
ld -m elf_i386 -r -o ../linux/lib/mskUtilities.o kMidiPrint.o kEventToMidiStream.o kMidiStreamToEvent.o kmsDrvUtils.o

es linka de forma correcta el fitxer mskUtilities.o

ara, des de src/linux, em falta fer:

for a in applications tools drivers; do make -C $a; done

que vol dir entrar dins dels directoris /applications, /tools i /driver i fer el corresponent make

1. cd applications

$ make -n
  • 1a. make -C lib
  • 1b. for a in msconnect mscontrol msdisplay msecho mssync msclock samples radio-hd-server; do make -C $a; done

1a.

cd lib
cc  -I../../Include `gtk-config --cflags`   -c -o msApplsTools.o msApplsTools.c
ld -m elf_i386 -r -o msApplsLib.o msApplsTools.o

The program 'gtk-config' is currently not installed. You can install it by typing: sudo apt-get install libgtk1.2-dev no puc instal.lar perquè no el troba en el repositori. (Mirar més avall)

sudo dpkg -i libglib1.2-dev_1.2.10-17_i386.deb

-> res

uh.. gtk-config, glib-config and all that have kicked the bucket in favour of the pkg-config Centralized Master -Configer in 2.0. Where you would use gtk-config-2.0 you are supposed to use 'pkg-config gtk-2.0'.

http://pkg-config.freedesktop.org/wiki/

pkg-config is a helper tool used when compiling applications and libraries. It helps you insert the correct compiler options on the command line so an application can use gcc -o test test.c `pkg-config --libs --cflags glib-2.0` for instance, rather than hard-coding values on where to find glib (or other libraries). It is language-agnostic, so it can be used for defining the location of documentation tools, for instance.

en el makefile original hi ha errors... res de res de gtk-config, és pkg-config

més que un error, en la versió antiga dels GTK (1.2) hi havia la utilitat gtk-config, que en la versió actual (2.0) no hi és.

Per contra, s'ha de posar pkg-config gtk-2.0:

cc  -I../../Include `pkg-config gtk-2.0 --cflags`   -c -o msApplsTools.o msApplsTools.c

el problema està ara en què no troba gtk.h


pkg-config gtk+-2.0 --cflags

-> el que fa això és una comprovació de si podem accedir al paquet gtk+-w.0 el resultat és: Package gtk+-2.0 was not found in the pkg-config search path. Perhaps you should add the directory containing `gtk+-2.0.pc' to the PKG_CONFIG_PATH environment variable No package 'gtk+-2.0' found

i aleshores no m'he d'estranyar de què trobi a faltar gtk.h


anem a la pàgina oficial de GTK:

http://www.gtk.org/download-linux.html

Older Versions

Some applications still require GTK+ 1.2, an older stable version of GTK+. You can have the run-time and development environments for both GTK+ 2.x and GTK+ 1.2 installed simultaneously on your computer.

instal.lo GTK+1.2 des de les fonts

em descarrego gtk+-1.2.0.tar.gz

$  tar -xvzf gtk+-1.2.0.tar.gz

llegir INSTALL

$ ./configure

problema

checking for GLIB - version >= 1.2.0... no
*** The glib-config script installed by GLIB could not be found

i és que de fet el INSTALL ja deia que era necessari GLIB GTK+ requires the GLIB library, available at the same location as you got this package. -> GLIB s'instal.la correctament (./configure, make i sudo make install)

Tanmateix quan faig ./configure en el gtk+-1.2.0 protesta per culpa del GLIB

checking for GLIB - version >= 1.2.0... no (de fet he instal.lat la versió 2.18)
*** The glib-config script installed by GLIB could not be found
*** If GLIB was installed in PREFIX, make sure PREFIX/bin is in
*** your path, or set the GLIB_CONFIG environment variable to the
*** full path to glib-config.
configure: error: 
*** GLIB 1.2.0 or better is required. The latest version of GLIB
*** is always available from ftp://ftp.gtk.org/.

GLib fa referència al GNOME

GLib Reference Manual

GLib proporciona los bloques básicos para construir aplicaciones y bibliotecas escritas en C. Proporciona el sistema de objetos básico usado en GNOME, la implementación del bucle principal, y un gran conjunto de funciones de utilidad para cadenas y estructuras de datos comunes.

Instal.lo la versió 1.2:

http://lfs.osuosl.org/blfs/view/blfs-book-6.1-html/general/glib.html

glib-1.2.10.tar.gz

./configure --prefix=/usr

$ make -> he aconseguit fer el make amb problemes, doncs hi ha errors de sintaxi (!) en la funció g_warning o alguna cosa així (salt de línia, he posat una coma per afegir un argument)
$ sudo make install
$ chmod -v 755 /usr/lib/libgmodule-1.2.so.0.0.10

compte que aquest fitxer que li vull canviar els permisos està ocult

continuo amb la instal.lació del gtk+-1.2.0

$ ./configure
...
checking for glib-config... /usr/bin/glib-config
checking for GLIB - version >= 1.2.0... yes
...

ara sí que ho troba. Tanmateix...

configure: error: 
*** X libraries or include files not found. Check 'config.log' for 
*** more details.

i els detalls són:

configure:4882: checking for X
configure:4949: gcc -E  conftest.c >/dev/null 2>conftest.out
configure:4945:27: error: X11/Intrinsic.h: No such file or directory
configure: failed program was:
#line 4944 "configure"
#include "confdefs.h"
#include <X11/Intrinsic.h>

Google found the solution: the missing Header was in the not installed package "libxt-dev".

Intrinsic.h is in the libxt-dev package, but to make life easy there is also the xlibs-dev package which installs everything you need to build X apps.

 sudo apt-get install libxt-dev -> no ho troba
 sudo apt-get install xlibs-dev -> no ho troba

Em descarrego el paquet libxt-dev_4.3.0.dfsg.1-14sarge7_i386.deb

$ sudo dpkg -i libxt-dev_4.3.0.dfsg.1-14sarge7_i386.deb -> res

[aquest apartat no he aconseguit compilar-lo]

2. cd tools [l'he compilat bé, amb alguns warnings]

$ make -n

gcc MidiGetVersion.c  -g -I../Include -o MidiGetVersion -Wl,-L../library -lMidiShare 
gcc MidiCountAppls.c  -g -I../Include -o MidiCountAppls -Wl,-L../library -lMidiShare 
gcc MidiGetIndAppl.c  -g -I../Include -o MidiGetIndAppl -Wl,-L../library -lMidiShare 
gcc MidiGetName.c  -g -I../Include -o MidiGetName -Wl,-L../library -lMidiShare 
gcc MidiGetNamedAppl.c  -g -I../Include -o MidiGetNamedAppl -Wl,-L../library -lMidiShare 
gcc MidiConnect.c  -g -I../Include -o MidiConnect -Wl,-L../library -lMidiShare 
gcc MidiIsConnected.c  -g -I../Include -o MidiIsConnected -Wl,-L../library -lMidiShare 
gcc MidiGetTime.c  -g -I../Include -o MidiGetTime -Wl,-L../library -lMidiShare

en ppi funciona bé (hi ha alguns warnings)

3. cd drivers [l'he compilat bé]

$ make -n

make -C ../../lib
for a in raw net alsa; do make -C $a; done

que dóna lloc a:

make: `../linux/lib/msUtilities.o' is up to date.

3a) cd raw

for a in midi serial; do make -C $a; done
	cd midi
		gcc msRawMidi.c  -g -I../../../Include ../../../lib/msUtilities.o -Wl,-L../../../library -lMidiShare  -o msRawMidi

	cd serial
		gcc msRawSerial.c  -g -I../../../Include ../../../lib/msUtilities.o -Wl,-L../../../library -lMidiShare  -o msRawSerial

3b) cd net

g++ -g -I../../Include -I../../../lib/Network/include -I../../../common/Headers  -I../../../common/atomic -O3 -Wall -D__Pentium__   -c -o INetAlert.o INetAlert.cpp
g++ -g -I../../Include -I../../../lib/Network/include -I../../../common/Headers  -I../../../common/atomic -O3 -Wall -D__Pentium__   -c -o LinuxFeedback.o LinuxFeedback.cpp
g++ -g -I../../Include -I../../../lib/Network/include -I../../../common/Headers  -I../../../common/atomic -O3 -Wall -D__Pentium__   -c -o msInetDriver.o msInetDriver.cpp
g++ -g -I../../Include -I../../../lib/Network/include -I../../../common/Headers  -I../../../common/atomic -O3 -Wall -D__Pentium__   -c -o StateManager.o StateManager.cpp
g++ -g -I../../Include -I../../../lib/Network/include -I../../../common/Headers  -I../../../common/atomic -O3 -Wall -D__Pentium__   -c -o sockets/TInetAddress.o sockets/TInetAddress.cpp
g++ -g -I../../Include -I../../../lib/Network/include -I../../../common/Headers  -I../../../common/atomic -O3 -Wall -D__Pentium__   -c -o sockets/TNetInfos.o sockets/TNetInfos.cpp
g++ -g -I../../Include -I../../../lib/Network/include -I../../../common/Headers  -I../../../common/atomic -O3 -Wall -D__Pentium__   -c -o sockets/TTCPSocket.o sockets/TTCPSocket.cpp
g++ -g -I../../Include -I../../../lib/Network/include -I../../../common/Headers  -I../../../common/atomic -O3 -Wall -D__Pentium__   -c -o sockets/TUDPSocket.o sockets/TUDPSocket.cpp
cc -g -I../../Include -I../../../lib/Network/include -I../../../common/Headers  -I../../../common/atomic -O3 -Wall -D__Pentium__   -c -o Handle.o Handle.c
cc -g -I../../Include -I../../../lib/Network/include -I../../../common/Headers  -I../../../common/atomic -O3 -Wall -D__Pentium__   -c -o ../../../common/atomic/lffifoIntel.o ../../../common/atomic/lffifoIntel.c
cc -g -I../../Include -I../../../lib/Network/include -I../../../common/Headers  -I../../../common/atomic -O3 -Wall -D__Pentium__   -c -o ../../../common/atomic/lflifoIntel.o ../../../common/atomic/lflifoIntel.c
(*&) make -C ../../../lib/Network
g++  INetAlert.o  LinuxFeedback.o  msInetDriver.o  StateManager.o  sockets/TInetAddress.o  sockets/TNetInfos.o  sockets/TTCPSocket.o  sockets/TUDPSocket.o  Handle.o  ../../../common/atomic/lffifoIntel.o  ../../../common/atomic/lflifoIntel.o ../../../lib/Network/msNetDriverLib.o -Wl,-L../../library -lMidiShare -lpthread -o msInetDriver

[funciona bé]

(*&)
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o FTMA.o FTMA.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o HostTools.o HostTools.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o SkewControler.o SkewControler.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o TInetControler.o TInetControler.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o TInetTasks.o TInetTasks.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o TMidiInStream.o TMidiInStream.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o TMidiOutStream.o TMidiOutStream.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o TMidiRemote.o TMidiRemote.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o TPacket.o TPacket.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o TRemoteAppl.o TRemoteAppl.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o TRemoteMgr.o TRemoteMgr.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o TRemoteSlot.o TRemoteSlot.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o Midi/MidiShareAppl.o Midi/MidiShareAppl.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o Midi/MidiShareDriver.o Midi/MidiShareDriver.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o Midi/MidiShareFilter.o Midi/MidiShareFilter.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o Midi/MidiShareTasks.o Midi/MidiShareTasks.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o Midi/MidiTools.o Midi/MidiTools.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o Midi/TMidiSlot.o Midi/TMidiSlot.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o state/ApplState.o state/ApplState.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o state/SlotState.o state/SlotState.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o TCP/TMidiClient.o TCP/TMidiClient.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o TCP/TMidiServer.o TCP/TMidiServer.cpp
g++  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o TCP/TWANControler.o TCP/TWANControler.cpp
cc  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o Midi/EventToUDPStream.o Midi/EventToUDPStream.c
cc  -I../../linux/Include/ -I./include -I../../common/Headers  -I../../common/atomic -D__Pentium__ -O3 -Wall   -c -o Midi/UDPStreamToEvent.o Midi/UDPStreamToEvent.c
ld -m elf_i386 -Ur -o msNetDriverLib.o  FTMA.o  HostTools.o  SkewControler.o  TInetControler.o  TInetTasks.o  TMidiInStream.o  TMidiOutStream.o  TMidiRemote.o  TPacket.o  TRemoteAppl.o  TRemoteMgr.o  TRemoteSlot.o  Midi/MidiShareAppl.o  Midi/MidiShareDriver.o  Midi/MidiShareFilter.o  Midi/MidiShareTasks.o  Midi/MidiTools.o  Midi/TMidiSlot.o  state/ApplState.o  state/SlotState.o  TCP/TMidiClient.o  TCP/TMidiServer.o  TCP/TWANControler.o  Midi/EventToUDPStream.o  Midi/UDPStreamToEvent.o

[funciona bé]

3c) cd alsa [funciona bé]

gcc msAlsaSeq.c  -g -I../../Include ../../lib/msUtilities.o -Wl,-L../../library -lMidiShare -lasound -o msAlsaSeq

Canviar el repositori a Ubuntu

el problema de no instal.lar el libgtk1.2 no crec que vingui de què no troba les fonts

$ sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup
$ sudo joe /etc/apt/sources.list

per posar altres repositoris de Ubuntu per tal que els canvis es vegin, primer s'ha de fer:

$ sudo aptitude update

el paquet libgtk1.2 té a veure amb el GNOME, tanmateix, no trobo libgtk1.2-dev tot lo de libgtk ja està instal.lat, però no trobo libgtk1.2-dev

Recapitulació i solució dels problemes

no hi ha manera d'instal.lar midishare a partir de les fonts a partir del fitxer midishare-1.91-linux2.6-src.tar.gz que es pot descarregar des de SourceForge. I és que aquest fitxer ja té algun temps, i veig que utilitza llibreries com la gtk1.2 quan ara van per la 2.0. Així que em decideixo a enviar un mail a la llista midishare-dev:

Joan Quintana a écrit :
> I want to port my project (Midishare with Java & Windows) to Linux.
> I'm working with Ubuntu Studio because the kernel is ready to work
> with real-time (I need real-time performance).
> All my essays for installing midishare in Ubuntu Studio crashed.
> Basically installing the kernel module, but also with GTK libraries
> (installing applications).
> It seems that the 1.91 Linux version has not been updated for years.
> Has someone installed midishare in Ubuntu Studio (or Ubuntu, or also
> Fedora-CCRMA).
>
> Thanks in advance,
> Joan Q

I la resposta que obtinc és: Hi Joan,

You should try the 'dev' branch of MidiShare. It compiles and installs
without problems on my Ubuntu (kernel 2.6.22-15). Make sure you have the
linux-headers installed...

Cheers

Yann

Anem per parts. El fitxer midishare-1.91-linux2.6-src.tar.gz és una foto feta en un determinat moment quan es va considerar que hi havia una feina feta i estable que es podia publicar. D'altra banda, la comunitat de desenvolupadors (encara que són pocs i no massa actius en aquest moment) continua treballant amb el seu repositori CVS. La manera d'accedir al repositori està explicat a

http://sourceforge.net/cvs/?group_id=120273

i és:

$ cvs -z3 -d:pserver:anonymous@midishare.cvs.sourceforge.net:/cvsroot/midishare co -P midishare

(accés anònim, quan demana pwd: enter) previ s'ha d'instal.lar cvs:

$ sudo apt-get install cvs

Això ja ho havia provat i funciona el descarregar les fonts des d'aquí (que efectivament en les fonts hi ha canvis respecte l'arxiu midishare-1.91-linux2.6-src.tar.gz).

Ara bé, el que em diu la resposta és que ho he d'instal.lar amb la branca 'dev' de midishare, corresponent a la branca de desenvolupament. I és que en un projecte com aquest hi ha branques que es poden separar per tornar-se a ajuntar (també se'n diu un tree, però no és un fork que representa una branca que ja no s'ajunta).

Faig una cerca al google sobre 'midishare dev branch':

1. A la pàgina de RTP Midi: MidiShare, a realtime operating system for musical applications, includes an RTP MIDI library in its development branch. (senyal de què aquesta branca és activa i s'està treballant)

Arribo a la conclusió que per accedir a una branca del repositori s'utilitza l'opció -r (veure man cvs). Per accedir a la branca dev és -r dev, i el total de la comanda queda:

$ cvs -z3 -d:pserver:anonymous@midishare.cvs.sourceforge.net:/cvsroot/midishare co -r dev -P midishare

i se'm crea la carpeta midishare amb el contingut del repositori i la branca de desenvolupament (dev)

Abans d'intentar compilar, anem a assegurar-nos de què tinc els linux-headers instal.lats. Això ja ho vaig fer, torno a copiar el que vaig fer més amunt:

descarrego els headers, que em sembla que són les fonts:

linux-headers-2.6.22-15-rt_2.6.22-15.58_i386.deb

$ sudo dpkg -i linux-headers-2.6.22-15-rt_2.6.22-15.58_i386.deb

abans he de fer:

$ sudo dpkg -i linux-restricted-modules-2.6.22-15-386_2.6.22.4-15.11_i386.deb 
$ sudo dpkg -i linux-headers-2.6.22-15-rt_2.6.22-15.58_i386.deb

-> funciona fer-ho amb el Synaptic

ara ja tinc en el /usr/src les carpetes

linux-headers-2.6.22-15 i linux-headers-2.6.22-15-rt

que a dins tenen el respectiu Makefile. el paquet linux-headers-2.6.22-15-rt depèn del linux-headers-2.6.22-15

altra informació:

Kernel headers are the header files used to compile the kernel - and other applications which depend on the symbols / structures defined in these header files, like kernel modules. An example can be graphic card drivers; if the driver does not have a binary matching the running kernel and needs to be compiled.

això és cert, per exemple, fixem-nos amb la carpeta

:/usr/src/linux-headers-2.6.22-15-rt/drivers/video/nvidia

It sounds to me like you've installed multiple kernels. It's possible to have multiple kernels -- ones tweaked for different applications installed at the same time. Since the kernel is really the core of the operating system -- you can use only one of these at a time. At boot time you choose which kernel to start. It's even possible to build your own custom kernel.

Kernels typically are different in what modules that were built into them (what features are supported) in terms of hardware, file systems, etc -- and perhaps things like target system too for example -- meaning is it a 32 bit or 64 bit machines.

As far as I know -- only the one that you choose at boot time matters.

Another way to look at this is how the Linux system is built. When you start linux a sequence of events happen to layer software into the running systems -- your bios/firmware is loaded , that starts grub, grub then loads the kernel, the kernel loads and init's and starts process zero which loads basic software listed in the /etc/inittab file, one of which runs the system startup procedure which does various inits including starting system servicies, between inittab and the system startup procedure you load a variety of serivices two of these servicies is gdm or kdm and another is an Xserver which in the end is what you see when you login -- and is the base software that will load user desktop system software when the time comes. I say all this to give you an idea of where the kernel fit's into the scheme of things. The kernel is the the lowest level of the OS -- and it's really the only thing that's Linux -- this is why the Free Software Foundation likes to call the system GNU as they really developed the whole concept of an open source GNU os and did a lot of the work and since in fact the GNU system can run a variety of kernels -- Linux, Hurd, various versions of BSD etc. Linux in terms of volume of code is actually a small but very critical part of the whole GNU system -- and it's also come a good trademark to refer to the whole combination.

recordem que amb uname-r puc veure el kernel que estic utilitzant, i si en tinc varios d'instal.lats puc escollir entre ells en l'arranc del sistema

En el meu Ubuntu Server 7.10: 2.6.22-15-rt

Així ho feia amb el Fedora CCRMA que podia escollir entre el kernel normal i el kernel rt.

Fem el ./configure (funciona) i el make (per parts) La part del kernel dóna el mateix problema que tenia

La part de appls (make -f appls) tenim una bona notícia: ara ja busca la llibreria 2.0 en comptes de la 1.2, i sembla ser que falta instal.lar un paquet.

Package gtk+-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtk+-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gtk+-2.0' found

així doncs:

$ sudo apt-get install gtk+-2.0

paquet que no es pot trobar.

el primer que faig és:

$ sudo apt-get install libgtk2.0-dev

i ara ja compila sense errors. (ja tinc les aplicacions instal.lades!)


les aplicacions estan a :/usr/local/bin

$ ./MidiConnect

i s'obre l'aplicació donant un missatge d'error:

usage : ./MidiConnect <src> <dest> <state>

ara fico tres paràmetres: $ ./MidiConnect a b c MidiShare is not installed -> la resposta és correcta, doncs fins que no instal.li el kernel no s'instal.larà el mòdul MidiShare

Anem doncs a solucionar la part del kernel.

Compilació del kernel

$ make  -C kernel

la instrucció que falla és

make -C /lib/modules/2.6.22-15-rt/build M=`pwd` modules

que dóna l'errada:

make -C /lib/modules/2.6.22-15-rt/build M=`pwd` modules
make[2]: Entering directory `/lib/modules/2.6.22-15-rt/build'
make[2]: *** No rule to make target `modules'.  Stop.

el problema és doncs que el directori /lib/modules/2.6.22-15-rt/build està buit, no hi ha cap makefile que a més a més haurà de contenir una etiqueta modules, que és la que crida aquest make

Informació interessant a http://ubuntuforums.org/showthread.php?t=167896

Sembla ser que la relació entre el directori build i els linux-headers està en un enllaç simbòlic:

/lib/modules/2.6.12-9-386/build -> /usr/src/linux-headers-2.6.12-9-386 (en l'exemple del link)

i precisament el /usr/src/linux-headers ja inclou el makefile, amb la qual cosa ja funcionaria (!)

una possibilitat és que no m'hagi descarregat els linux-headers correctes.

una altra possibilitat és crear l'enllaç manualment

Solved !

I just untared the linux-headers-2.6.12.9-386 and made a softlink in /lib/modules/2.6.12-10-386/build ...

Sometimes it is that easy.

-> el del link ho ha solucionat fent el soft link manualment

To create a link, first cd to directory where you want the link. Then use ln -s to create a link

cd <dir>
ln -s <relative path to target> <linkname>
man ln:
ln [OPTION]... TARGET                  (2nd form)
	In the 2nd form, create a link to TARGET in the current directory. 
ln [OPTION]... TARGET... DIRECTORY     (3rd form)
	In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.
per desfer un soft-link:
unlink /absolute-path

Ho fem:

$ cd /lib/modules/2.6.22-15-rt
$ sudo rm build -> primer he d'eliminar-lo, si no no es crea bé el link
$ sudo ln -s /usr/src/linux-headers-2.6.22-15-rt build -> així no és

i ara compilem el mòdul:

$ cd ~/midishare/src/linux
$ make

I FUNCIONA!!!!

Compilació exitosa

ho compilem de dalt a baix: deixem el Makefile en el seu estat original

$ ./configure
$ make clean
$ make
$ sudo make install

i acaba dient:

install MidiShare /etc/init.d
update-rc.d MidiShare defaults 2> /dev/null || chkconfig --add MidiShare 
 Adding system startup for /etc/init.d/MidiShare ...
   /etc/rc0.d/K20MidiShare -> ../init.d/MidiShare
   /etc/rc1.d/K20MidiShare -> ../init.d/MidiShare
   /etc/rc6.d/K20MidiShare -> ../init.d/MidiShare
   /etc/rc2.d/S20MidiShare -> ../init.d/MidiShare
   /etc/rc3.d/S20MidiShare -> ../init.d/MidiShare
   /etc/rc4.d/S20MidiShare -> ../init.d/MidiShare
   /etc/rc5.d/S20MidiShare -> ../init.d/MidiShare
./MidiShare start
 * midishare kernel module loaded

sembla ser que tot ha anat bé!!

Comprovació de què la cosa ha anat bé:

1. aplicació MidiConnect

/usr/local/bin/MidiConnect a b c
/usr/local/bin/MidiConnect : a is not a valid MidiShare client application name or reference number

2. $ modprobe MidiShare -> això no ho he de provar. Això és per afegir o treure mòduls del Linux Kernel

lsmod — program to show the status of modules in the Linux Kernel si faig lsmod es veu midishare, però suposo que és perque m'he equivocat fent $ modprobe MidiShare

3.dins del directori midishare.../src/linux hi ha l'aplicatiu Midishare (és el dimoni):

$ sudo ./MidiShare reload
 * midishare kernel module unloaded
 * midishare kernel module loaded

4. quan tingui instal.lat el mòdul podré fer coses del tipus:

$ fluidsynth --midi-driver=midishare --audio-driver=alsa -C0 -R0 -g3 /home/dlphilp/soundfonts/8mbgmsfx.sf2

-> no funciona, hauria de funcionar?

La primera aplicació gràfica que puc provar és

/usr/local/bin/msclock
/usr/local/bin/mscontrol
/usr/local/bin/msdisplay
/usr/local/bin/msecho -> no se sent res
/usr/local/bin/mssync -> no se sent res
/usr/local/bin/msconnect -> hauria de funcionar, no sé si quan vaig fer això estava l'executable (veure l'apartat Compilation of tools and applications)

a /home/joan/midishare/src/linux/applications/samples tinc el msTutorial (que posa de manifest diferents mètodes de MidiShare i que fa pitar una nota-de moment no se sent res) i altres exemples cada fitxer té l'equivalent en C, per tant són exemples de com accedim a midishare des de C.

Començant a treballar amb Java

Per començar a fer coses en Java: ~/midishare/lang/java/samples/tutorial$

Recordem:

Midishare is composed of a kernel module and a library which allows to rapid development real time MIDI-based musical applications. This software is developed by Grame - Centre National de creation musicale

Compilació dels drivers

La part que he fet ara és la compilació de MidiShare (/home/joan/midishare/src/linux/README.txt). Ara falta fer la compilació dels drivers

Drivers are currently defined as regular MidiShare applications that other applications can use to access Midi input/output. To compile drivers:

$ make driver

(or the global "make clients" command that compile applications, tools and drivers)

The "msRawMidi" driver access the standard /dev/midi device. To use it:

$ msRawMidi /dev/midi

This will open a MidiShare application named "dev/midi". Other applications must connect to this application to send and receive Midi events.

el que obtinc:

$ cd ~/midishare/src/linux
$ msRawMidi /dev/midi
can't open device "/dev/midi" (errno=2)
$ msRawMidi /dev/MidiShare
input thread read errorMidi driver anchored on "/dev/MidiShare" is running

el dispositiu midi no existeix, existeix el dispositiu MidiShare

cat /proc/modules (or lsmod)

-> mostra midishare en comptes de MidiShare (?)

Compilation of tools and applications

To compile the tools, applications and drivers:

$ make clients

To install tools,applications,drivers and scripts in /usr/local/bin (with SU privilege):

$ sudo make clientsinstall

per ex, MidiGetVersion -> 192 (però això ja funcionava abans de fer make clientsinstall)

Ara funciona l'aplicatiu msconnect (no sé si ahir funcionava). Tenim dues aplicacions, i connecta cada aplicació amb un origen i un destí. Les aplicacions són MidiShare (0) i msconnect (1), i la font i el destí també. Aleshores puc fer qualsevol combinació: una aplicació es pot connecar amb un (o varis) origens, i a un (o varis) destins. comprovar. Per fer els enllaços és molt intuïtiu: s'ha d'anar fent click (un sol click). Ara bé, no totes les combinacions semblen vàlides.



creat per Joan Quintana Compte, setembre 2008