Jump to content
  • 0

Problema con Joystick arcade, necesario recompilar módulo de drivers del kernel


vintageman
 Share
Followers 0
Go to solution Solved by vintageman,

Question

Saludos.

Me sucede lo siguiente:

Me construí un controlador, un joystick doble de arcade para jugar al mame32, siguiendo este proyecto:

http://vusb.wikidot.com/project:mamepanel

Está terminado y funciona perfecto en una máquina con Windows, pero no lo construí para eso, la idea era hacerlo funcionar bajo Linux en una raspberry pi 2. Y bien, bajo Linux no reconoce los 2 joysticks del controlador, es como si solo tuviera un joystick, como si los 2 furan el mismo.

He probado con diversas compliaciones de raspbian + paquete de emuladores, Retropie, Piplay…pero siempre obtengo el mismo problema, solo reconoce un joystick, y he leído que el problema se va a dar en cualquier Linux.

Encontré una publicación de un tipo que tuvo el mismo problema y consiguió darle solución, aquí:

http://myprojectsweblog.blogspot.com.es/2011/10/mamepanel-with-linux.html#

La operación consiste en bajarse las fuentes del Linux, y hacer una modificación en un archivo que si no he entendido mal pertenece al módulo de drivers, después hay que recompilar el módulo.

Bien yo he conseguido llegar hasta el paso de recompilar con la orden “make”, ahí no soy capaz de seguir, me da un error de directorio incorrecto, o bien el error “no rule to make target”, en cualquier caso soy incapaz. He estado unos cuantos días buscando información sobre como recompilar un módulo del kernel con la orden “make”, pero no he conseguido comprender del todo la orden, y que determina cada ruta, he realizado varias pruebas e intentos sin resultados. Soy muy novato en Linux, y la verdad, estoy un poco perdido, no se que se me está escapando.

He tenido que usar el comando apt-get en vez de aptitude, descargar los Linux-headers-3.2 en vez de los que te indica la web (de la solución) y algunas modificaciones al proceso, (la versión de la compilación de Linux que uso es 4.1.7-v7+) pero básicamente y de momento mis problemas están en la orden make, que no termino de comprenderla del todo, de ahí no paso, y no sé si he podido hacer algo mal en algún paso previo.

Me vendría muy bien una ayudita.

Gracias de antemano.

Link to post
Share on other sites

14 answers to this question

Recommended Posts

  • 0
  • Solution

Bueno gente...yo de linux soy un gran ignorante, de momento al menos, pero cabezón soy tela eh, jejejeje

 

Finalmente he encontrado solución en este hilo:

 

http://blog.petrockblock.com/forums/topic/autofire-on-the-axis/page/4/

 

De todo lo que se habla, lo que me ha funcionado es meter la compilación del kernel parcheado ya que está posteando feederchain.

 

El problema se arregla automáticamente.

 

toma que toma!!!

 

Por supuesto no podía dejar de compartirlo aquí.

 

Shiba, gracias por tu ayuda, aparte de enseñarme a compilar... lo de las tarjetas corruptas, eso era un problema en paralelo que tenía, con el que me podía haber vuelto loco. Las tarjetas me petaban cuando las llenaba de juegos, uff, menos mal!!!! jajajaj

 

Saludos!

Link to post
Share on other sites
  • 0

El tuto ya era viejo en la época en que se publicó, a día de hoy es casi un sinsentido :sweat:.

wget -nc https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.3.tar.xz
tar xvf linux-4.3.tar.xz
mv linux-4.3 /usr/src
cd  /usr/src/linux-4.3

(no te muevas de ese directorio)

 

Editas el archivo que está en drivers/hid/usbhid/hid-quirks.c  con nano, vi o cualquier editor de texto que prefieras.

Por ejemplo:

cat <<EOT >> drivers/hid/usbhid/hid-quirks.c
#define USB_VENDOR_ID_VOTI           0x16c0
#define USB_DEVICE_ID_VOTI_MAMEPANEL32       0x05df
{ USB_VENDOR_ID_VOTI, USB_DEVICE_ID_VOTI_MAMEPANEL32, HID_QUIRK_MULTI_INPUT },
EOT

Ahora no te compliques. No podrás compilar un único módulo de manera sencilla y funcional salvo que estés utilizando la misma versión de Linux que se encuentra en tu sistema, así que... burro grande ande o no ande ¿No? :rolleyes:

 

Compílalo entero

aptitude install bc build-essential 
make oldconfig
make
make modules
make modules_install
make install

Reinicia con el kernel recién compilado, no sin antes haber puesto unas cuantas velas a San Ignucio y sacrificado un unicornio bizco a los dioses de Gcc, y comprueba si lo que dice el tuto es verdad o no.

 

http://gnulinuxvagos.es/topic/22-configurar-y-compilar-el-kernel-linux-varios-métodos/

Link to post
Share on other sites
  • 0

Pues vuelvo a tener problemas al recompilar

El comando aptitude no me lo reconoce, si uso apt-get install bc build-essential me da varios errores:

 

Reading package lists...Error!

E: Encountered a section with no package: header

E: Problem with MergeList /var/lib/dpkg/status

E: The package lists or status file could not be parsed or opened

 

debería descargar los linux headers quizás para poder compilar?

Link to post
Share on other sites
  • 0

Deberías arreglar primero el desastre que sea que tengas con apt/dpkg, porque de lo contrario da igual lo que hagas.

 

Los headers no nos sirven para nada, lo que queremos es compilar y para ello hace falta el código fuente, que es precisamente lo que estamos descargando.

Luego, una vez tengas tu imagen del kernel y los módulos compilados y en su sitio, se pueden generar las cabeceras que podrás utilizar para compilar modulos adicionales que se integren con tu linux compilado en casa, pero... eso ya es otra historia totalmente distinta.

 

Así que vamos a lo simple

dpkg --configure -a
apt update
apt install aptitude
aptitude -f install

Y a partir de todos los errores se va viendo

Aparte de saber con qué repositorios estamos trabajando

 

 

cat /etc/apt/sources.list
cat /etc/apt/sources.list.d/*.list
Link to post
Share on other sites
  • 0

Tienes mucha razón, con todo lo que trasteé, es mejor empezar desde el principio, he vuelto a meter la imagen del sistema que estaba usando en la sd (la compilación de retropie).

 

Y he vuelto a hacer todos los pasos desde el principio hasta editar el archivo hid-quirks.c, hasta ahí parece que todo va bien.

 

Después (y antes de intentar compilar) hago:

dpkg --configure -a

apt update

 

pero no reconoce el comando apt, me devuelve un

bash: apt: command not found

Link to post
Share on other sites
  • 0

mas cositas...

 

cat /etc/apt/sources.list

deb http://mirrordirector.raspbian.org/raspbian/wheezy main contrib non-free rpi

cat /etc/apt/sources.list.d/*.list

deb http://raspberrypi.collabora.comwheezy rpi

deb http://archive.raspberrypi.org/debian/wheezy main

 

y ya estaba metiendo apt-get en vez de apt por probar jeje

 

parece que instala bien... tras hacer

 

aptitude -f install

 

intento compilar de nuevo, pero me ha dado ciertos errores (debería haberlos copiado)

 

he intentado de nuevo:

 

aptitude install bc build-essential

 

y me devuelve:

no packages will be installed, upgraded or removed.

0 packages upgraded, 0 newly installed 0 to remove and 18 not upgraded

need to get 0 B of archives. After unpacking 0 B will be used.

[ 1407.392422] EXT4-fs error (device mmcblk0p2): ext4_lookup:1588: inode ·39708: comm dpkg-preconfigu: deleted inode referenced: 637560

..

..

...

y 9 errores casi iguales (cambiando valores numéricos)

Link to post
Share on other sites
  • 0

Que te diga que no se instalarán o catualizarán significa que ya están instalados y actualizados, así que perfecto.

 

Los errores al compilar... ¡Vete a saber! :lol:

 

Ahora, el último mensaje es un error del sistema de archivos y la propia SD. No creo que explote, pero hay que tenerlo vigilado.

 

La forma de compilar el kernel, a priori, es correcta. Las modificaciones del módulo HID, eso ya no lo sé, así que el problema podría venir de ahí. Insisto en que hablamos de algo muy antiguo aplicado un una versión de Linux muy actual, las cosas podrían haber cambiado bastante :sweat:

Link to post
Share on other sites
  • 0

Hey, gracias de nuevo por tu ayuda Shiba!!

 

Vale, primero voy a ver si puedo comprobar la integridad de las cuatro microSDs que tengo, una debe estar mal, porque aunque el programa que uso para cargar la imagen (win32 disk imager) no me da ningún error, después con ella la raspi no me arranca.

 

Otra SD me hace extraños también, se me bloquea en el inicio.

 

Y ahora a la vista de los resultados, las otras 2 no me extrañaría nada que también tuvieran "cosillas".

 

A ver si encuentro el modo de hacerles una buena comprobación.

 

Y después, tengo una duda...entonces...tocar el código de un archivo, (hid-quirks.c en este caso), puede dar lugar a errores de compilación?

 

Debería probar entonces a recompilar sin tocar nada, para asegurarme de que es de eso, y si es, puedo intentar meter esas líneas en distinto lugar o revisar un poco a ver si he cometido algún error con la sintaxis o con otra cosa.

 

Saludos!!!

Link to post
Share on other sites
  • 0

Saludos

 

Bueno pues ya tengo una sd que parece que está en condiciones, he vuelto a seguir el proceso y ya no me da esos fallos.

 

He llegado, creo que hasta la orden "make oldconfig", y entonces me empieza a hacer un montón de preguntas

 

y la verdad es que no se como contestar, si tocar algo o no...

Link to post
Share on other sites
  • 0

Saludos!!

 

Vale, parece que he conseguido recompilar!!!

 

Las preguntas que te lanza tras el "make oldconfig" me las he saltado todas pulsando intro, menos las relativas a los módulos, que he contestado "y", (si no, me daba después erroes en las siguientes instrucciones, no se activa el poder trabajar con módulos)

 

Muchas gracias Shiba!! No habría sido capaz de hacer todo esto sólo, ni buscando por internet, habría tardado años!!!!

 

Por desgracia no ha servido para que reconozca el controlador como multi input, sigue detectando las pulsaciones de las 2 palancas de joystick como si fueran la misma.

 

QUE CORAJEEEEEE!!!! GRRRRRRRRR

 

No se me ocurre que más podría probar...no se si cambiar de lugar los "#define USB_VENDOR_ID_VOTI..." dentro del archivo, los he colocado justo al principio, tras unas instrucciones "#include..."

Después, los códigos  0x16c0 y 0x05df, los he escrito igual, tal y como vienen, en la misma línea, imagino que estarán bien, no hay que omitirlos ni nada de eso ¿no?

y la línea "{ USB_VENDOR_ID_VOTI, USB_DEVICE_ID_VOTI_MAMEPANEL32, HID_QUIRK_MULTI_INPUT }," la he metido en la blacklist, una parte del archivo que parece que lista dispositivos y sus características especiales (sus rarezas, o quirks), imagino que eso debe estar bien.

 

Que corajeeeeeee!!! Llevo un tiempo con este proyecto de la máquina recreativa en raspberry, es el segundo tipo de interface que construyo ya, y tampoco me va a servir.

Anteriormente tenía el controlador cableado a 2 interfaces independientes (caseros también, de aquí http://denki.world3.net/arcade.html) y funcionaba perfecto, en windows y linux, La pega era que técnicamente eran 2 controladores en el mismo mueble, con 2 salidas USB y 2 cables USB a la raspberry o al PC o a lo que fuera. Me parecía algo muy poco elegante lo de los 2 cables y me puse a buscar un interface para joystick dual para construir, que soportara las 2 palancas y más botones a poder ser. Pero bueno, la verdad es que ahora mismo está peor que antes, no se puede jugar a 2 players bajo linux, y eso es peor que tener 2 cables...

 

Pero bueno, no me rindo...poco cabezón que soy yo jejeje, habrá que replantearse la estrategia, a ver si encuentro otro interface para construir...o alguna solución distinta.

La idea que va ganando ahora mismo es la de despiezar algún teclado (teclado qwerty normal), sacarle el interface y recablearlo para el controlador, lo que estoy haciendo es un joystick arcade, todos son switches on/off, no es como un joystick normal, la idea me parece muy factible. Me podría buscar incluso un teclado bluetooth y pasar de 2 cables a inalámbrico, eso estaría bien la verdad...

 

Una pena de todos modos no haber podido hacerlo con código...no me esperaba eso de que fuera a funcionar solo en windows el interface, el anterior que me construí era universal!!!

 

Saludos!!!

Link to post
Share on other sites
  • 0

Bueno pues el asunto de recompilar ya lo hago con soltura, gracias a tu ayuda Shiba, gracias!

Estoy buscando y probando cosas a ver si consigo que linux me reconozca el joystick como dual (multi.input), pero de momento nada...

 

Sospecho que debe poderse hacer, el joystick bajo windows va bien, y bajo linux el fallo realmente no parece tan grave. Reconoce los 2 joysticks como si fueran el mismo y funcionan los 2 como uno solo, y los botones va bien todos.

 

Voy a seguir investigando, si se os ocurre algo...cualquier consejo, o cualquier idea seguro que me serían de gran ayuda.

Gracias, saludos!

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share
×
×
  • Create New...