Drivers fuera del kernel con CUSE en Linux

En el kernel de Linux se están haciendo varios cambios para reducir la complejidad de escribir drivers y al mismo tiempo abrir la puerta para que se puedan desarrollar extensiones importantes sin que se tengan que incorporar al kernel.

Un par de ejemplos visibles de estos cambios son:

  • Kernel Mode Setting: En donde parte de la funcionalidad del sistema gráfico se sacó de X.org y se integró en el kernel.  Específicamente se trata de la configuración del modo de video, lo que permite reutilizar un modo gráfico ya configurado para no tener que reinicializar el video al cambiar de sistema de despliegue gráfico, evitando los molestos pestañeos.  También permite que otros sistemas gráficos como Wayland sean más simples de programar.
  • FUSE: Se trata de sistemas de archivos que se pueden implementar fuera del kernel, lo que se conoce como User Space (en vez de Kernel Space).   Con FUSE se pueden agregar nuevos sistemas de archivo a Linux sin tener que integrarlos en el kernel, esto permitió implementar tranquilamente el soporte para sistemas de archivo NTFS.

En la próxima versión del kernel se incluirá una nueva extensión llamada CUSE o Character Devices in User Space.  La idea es similar a FUSE, pero en vez de que sean sistemas de archivos externos al kernel, ahora se trata de drivers o controladores de dispositivos externos al kernel.

En Linux y Unix en general se utilizan algunos archivos especiales para comunicar a las aplicaciones con los drivers, se trata de esos archivos que se encuentran en el directorio /dev.  Un problema que surge, especialmente con aplicaciones antiguas, es que las aplicaciones al usar directamente los archivos que están ahí, necesitan que exista el driver relacionado con cada archivo.  Un ejemplo clásico son los archivos /dev/dsp y /dev/mixer que se usaban en el antiguo sistema de sonido Open Sound System.

Con CUSE ahora son aplicaciones las que podrán tomar el control de esos dispositivos especiales y como es de esperar, la primera aplicación práctica es un proxy de OSS que permitirá que las aplicaciones crean que están usando OSS, pero serán direccionadas a PulseAudio/ALSA para aprovechar toda la potencialidad de estos sistemas de audio.

Otro uso propuesto es atender las solicitudes a /dev/pilot que realizan aplicaciones antiguas que se conectan a Palm Pilot.  Con CUSE no será necesario tener un driver especial, sino que se podrá escribir un proxy que tome las solicitudes a /dev/pilot y las convierta en lo necesario para comunicarse con el dispositivo bajo estándares actuales.

Con CUSE, nuevos desarrolladores podrán dar soporte a sus dispositivos de una forma sencilla, y aplicaciones antiguas podrán seguir funcionando, adaptándose automáticamente a las nuevas funcionalidades que se vayan incorporando al sistema.

Links:
- Kernel Log – Coming in 2.6.31: CUSE… (The H Open)
- Character devices in user space (LWN.net)

Compartir Compartir
Publicado por Franco Catrin el 7 de September 2009 en la categoría Destacados, Software con los tags , , , , , . Tiene 59 comentarios.

59 Comentarios

Drivers fuera del kernel con CUSE en Linux

Deja tu Comentario ↓
Anónimo

DesaprobarAprobar20Anónimo dijo el 7-9-2009 a las 15:37:

1

Existe algo así en mac o windows?

Ver Comentario... boti dijo el 7-9-2009 a las 15:37 ...

beleg

DesaprobarAprobar53beleg dijo el 7-9-2009 a las 15:38:

3

@Franco:

Felicitaciones por el articulo (seras el unico que trabaja realmente en Fw?)

desenfoque

DesaprobarAprobar9desenfoque dijo el 7-9-2009 a las 15:43:

4

Buena idea, pero… ¿Esto no fomentará que las compañías de hardware desarrollen drivers de código CERRADO?…

kotak

DesaprobarAprobar4kotak dijo el 7-9-2009 a las 15:44:

5

Es decir, antes el primero que llegaba, bloqueada a los demás el uso del archivo (léase /dev/algo) y ahora va a existir una instancia que maneja la interacción con el archivo.. ¿me equivoco? si así fuese, ¿sería un mero semaforo?

kotak

DesaprobarAprobar-7kotak dijo el 7-9-2009 a las 15:46:

6

o sería

necesitan que exista el driver relacionado con cada archivo.

kotak

DesaprobarAprobar6kotak dijo el 7-9-2009 a las 15:48:

7

perdon, sería, en vez de:

necesitan que exista el driver relacionado con cada archivo.

debería ser:

necesita que exista un archivo relacionado con cada driver.

ando medio perdido.

iperich

DesaprobarAprobar8iperich dijo el 7-9-2009 a las 15:48:

8

LinuxWayer!!! como se les ocurre poner noticias de Linux!!! Twitterwayer!! como se les ocurre poner noticias de Twitter!!! Applewayer!!! como se les ocurre poner noticias de Apple!!!

No se dan cuenta que tecnología=Microsoft y nada más???
[ironic mode=off]
xDD

Realmente linux (el kernel) siempre ha sido “demasiado” monolítico a mi parecer. Me parece una buena noticia que se esté pensando en sacar cosas del kernel para hacerlo más modular. Interesante noticia.

Ver Comentario... Ἀχιλλεύς dijo el 7-9-2009 a las 15:52 ...

elBarto

DesaprobarAprobar5elBarto dijo el 7-9-2009 a las 16:02:

10

excelente nota franco.

no se si has publicado alguna sobre gallium3D, pero si no lo has hecho podrias hacerlo proximamente ya que he leido muchas cosas sobre el y se ve muy prometedor, aunque igualmente muy verde ¬¬

Omeg@

DesaprobarAprobar-4Omeg@ dijo el 7-9-2009 a las 16:13:

11

Esto me parece como la respuesta de un articulo que debatia sobre los dispositivos a conectar en W7 y Linux, del cual ganaba W7.

Cuando crearan las cosas mas fáciles para los usuarios “comunes” o “humanos” D:

(fue un cacho conectar mi ZUNE a Ubuntu)

Se agradece el articulo D:, aunque esperaría un poco mas de info, quede con gusto a poco.

Saludos

subzero79

DesaprobarAprobar2subzero79 dijo el 7-9-2009 a las 16:22:

12

@Franco: Excelente articulo,

off topic: lei hoy que Debian pasaria a implementar upstart de Ubuntu, remplazando al clasico init.d, viene un articulo con las reacciones de los desarrolladores en Debian?

sl2

Guatón Campero

DesaprobarAprobar10Guatón Campero dijo el 7-9-2009 a las 16:24:

13

@Omeg@:

El nivel de información proporcionado por Franco es perfecto: suficiente como para que un mortal cualquiera sepa algo y vea que se avanza en Linux, y también suficiente como para que alguien más ñoñoavanzado pueda investigar por sí mismo.

Tezeract

DesaprobarAprobar14Tezeract dijo el 7-9-2009 a las 16:24:

14

Omeg@:
Si el Zune no funciona bajo multiples plataformas es porque esta intencionalmente diseñado de esa forma. Es accesible para cualquier fabricante sacar drivers para Linux, basta con liberar especificaciones básicas que sirvan como base para hacer los drivers.

PaYaZo

DesaprobarAprobar2PaYaZo dijo el 7-9-2009 a las 16:28:

15

interesante
muy interesante :D
saludos

Ver Comentario... Omeg@ dijo el 7-9-2009 a las 16:45 ...

Hugo

DesaprobarAprobar0Hugo dijo el 7-9-2009 a las 16:50:

17

Esta bueno que se vote por hacer mas modular la cosa…

Monokernel is so last year ~

supreme

DesaprobarAprobar2supreme dijo el 7-9-2009 a las 17:02:

18

Yo estoy usando el kernel 2.6.31, iré actualizando y veré si puedo hacer algo haciéndole creer a alguna aplicación que está sobre OSS cuando en realidad uso PulseAudio. El tremendo avance CUSE :) , cuántos dolores de cabeza no me/nos hubiera ahorrado a lo largo de la vida.

Carlos Le Mare

DesaprobarAprobar4Carlos Le Mare dijo el 7-9-2009 a las 17:03:

19

La razón de por qué es tan monolítico es: Nadie pensó que llegaría a tanto :-)

@Anónimo: En Windows y Mac los Kernels son del tipo microkernel, es decir, que nacieron con los drivers (y otras cosas) afuera del Kernel. Este diseño es más moderno y eventualmente mejor (aunque los monolíticos tienen otras ventajas), pero como dije en la primera línea, nadie pensó que llegaría a tanto.

clemare

Juan

DesaprobarAprobar0Juan dijo el 7-9-2009 a las 17:21:

20

@Tezeract buen punto, lo mismo pasa con iPhone, iPod Touch.

Franco Catrin

Franco Catrin dijo el 7-9-2009 a las 17:21:

21

@Carlos Le Mare

Segun entiendo, aun es discutible si es mejor o no un microkernel. Recordar el histórico debate entre Torvalds y Tanenbaum al respecto

http://oreilly.com/catalog/opensources/book/appa.html

otros mas

DesaprobarAprobar-1otros mas dijo el 7-9-2009 a las 17:39:

22

zune a la mierda

Franco Catrin

Franco Catrin dijo el 7-9-2009 a las 17:43:

23

@kotak

El archivo que está en /dev es sólo un nombre que se usa para llegar desde la aplicación a un driver en particular, pero no es el driver en si mismo.

No sacas nada con tener el archivo si no hay un driver que sepa atender las solicitudes a ese archivo.

En el modelo tradicional, los modulos del kernel se registran indicando qué tipo de dispositivo atienden : block/character, major number, minor number. Y cuando se abre un archivo en /dev se ve qué driver se debe usar.

Por ejemplo:

fcatrin@shaman:/dev$ ls -la dsp
crw-rw—-+ 1 root audio 14, 3 2009-09-07 09:44 dsp

Indica que el archivo /dev/dsp está asociado a un character device (c), con major=14 y minor=13. Entonces al abrirlo, el kernel le entregará el trabajo al módulo que se haya registrado para atender c-14-13. Si no hay un driver asociado, indicará “no device found”.

Lo que hace CUSE es tomar el control de esa llamada.

Franco Catrin

Franco Catrin dijo el 7-9-2009 a las 17:47:

24

@desenfoque

Buena idea, pero… ¿Esto no fomentará que las compañías de hardware desarrollen drivers de código CERRADO?…

Ese es el vaso medio vacío.

Al mirar el vaso medio lleno se entiende que aquellas compañías de hardware que no pueden poner a disposición su driver en el kernel por problemas de licencia, ahora lo podrían hacer mediante CUSE. No siempre se pueden desarrollar drivers de código abierto, lamentablemente.

En todo caso, tampoco es la panacea, ya que existen otras limitaciones al quedar fuera del kernel.

Franco Catrin

Franco Catrin dijo el 7-9-2009 a las 17:51:

25

@Omeg@

Esto me parece como la respuesta de un articulo que debatia sobre los dispositivos a conectar en W7 y Linux, del cual ganaba W7.

Te refieres al entrenamiento para vendedores de Microsoft en base a FUD?

No está relacionado con este artículo.

Cuando crearan las cosas mas fáciles para los usuarios “comunes” o “humanos” D:
(fue un cacho conectar mi ZUNE a Ubuntu)

Cuando los fabricantes hagan bien su trabajo. Habría que preguntarle al fabricante del Zune en este caso, que es… oh wait!

Se agradece el articulo D:, aunque esperaría un poco mas de info, quede con gusto a poco.

No quise extenderme demasiado, incluso no pensé que este artículo tuviera tanta acogida.
Manda un comentario con tus inquietudes.

ByJC

DesaprobarAprobar7ByJC dijo el 7-9-2009 a las 17:52:

26

Franco tiene Razón.

RAcl

DesaprobarAprobar6RAcl dijo el 7-9-2009 a las 18:22:

27

@Franco No quise extenderme demasiado, incluso no pensé que este artículo tuviera tanta acogida.

La verdad con el impacto que puede causar CUSE creo que valdría la pena extenderse un poco más ;)

Soulwave

DesaprobarAprobar4Soulwave dijo el 7-9-2009 a las 18:24:

28

@desenfoque

Prefiero un driver closed-source que funciona a nada, al final de cuentas, si hay que ser mainstream, hay que hacer algunos sacrificios.

Nicolas

DesaprobarAprobar3Nicolas dijo el 7-9-2009 a las 18:29:

29

Por lo general escribo para ptar/trollear.
Pero debo felicitarte, tus articulos son los mejores del sitio. Claros, de una complejidad tecnica superior… pero no se nota!.

Sigue asi, porque no te vienes a CHW? estos articulos deberian estar allá.

superfremo

DesaprobarAprobar-2superfremo dijo el 7-9-2009 a las 18:32:

30

iba a escribir algo, pero me incomoda tanto escribir desde windows… me siento como de visita en mi propio pc :(

Deja tu Comentario

XHTML: Puedes usar: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

Previsualizar comentario?