Compilació MidiShare
Aquest document està realitzat per a Ubuntu Studio 7.10
Contingut
- 1 Compilació MidiShare
- 2 Canviar el repositori a Ubuntu
- 3 Recapitulació i solució dels problemes
- 4 Compilació dels drivers
- 5 Compilation of tools and applications
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