[eside-ghost] Emular dispositivo

yUnwEb yunweb en yunweb.homeunix.org
Lun Feb 6 00:06:44 CET 2006


On Sun, 5 Feb 2006 18:16:54 +0100
Saladino <arkato en gmail.com> wrote:

> Ieup!!

 Ieepai!

> Pos ando mirando una app que me hace unas cosas con la palm utilizando
> un dispositivo del sistema, uno de esos de /dev, el caso es que esta
> app no sabe usar bluetooth, pero creo que el protocolo es igual sobre
> bt que sobre cable.
> Asi que he conseguido hacerme una especie de puerto serial por
> bluetooth, y seria la ostia si alguien supiera como funcionan estos
> temas de /dev, osea como puedo crear un fichero que lo maneje mi
> programa y tambien el otro como si fuera un device? me imagino que eso
> sera todo leer y escribir.

 No se mucho del asunto, pero esto suena la hostia de freaky, así que
a ver si te espolvoreo algún fotón :S

 Igual hay alguna solución más fácil, pero no se me ocurre nada mejor.
Así que haya vamos...

 La función que buscas para crear los devices es mknod, "man 2 mknod".

 Nodes o Nodos hay de dos tipos principalmente, los de caracteres y los
de bloques. Puedes verlos haciendo "ls -l /dev", en GNU/Linux los nodes
de bloques empiezan por "b" y los de chars por "c". Los de bloques y
así, suelen ser en plan discos duros. Tú supongo que necesitarás uno de
carácteres. Aun así, para las escrituras y lecturas del node tendrías
que crear un módulo para el núcleo (LKM) sino me equivoco.

 Luego también están "man 3 mkfifo" o incluso "man 1 mkfifo" para crear
ficheros fifo. Que son como las míticas pipes, pero que salen en /dev/.
Lo malo es que aquí uno lee y el otro escribe, así que supongo que no
te valdría.

 Centrándonos en lo de los módulos las funciones que te podrían
interesar son:
 - alloc_chrdev_region: registrar un número mayor para tu dispositivo o
driver, necesario.
 - MAJOR: macro para obtener el número mayor que te ha asignado el
núcleo.
 - cdev_alloc, cdev_add, cdev_*: para trabajar con las estructuras
cdev, los dispositivos de caracteres
 - copy_from_user, copy_to_user: copiar datos entre el núcleo y el
espacio de usuario

 Luego también tendrías que crear las funciones míticas open, write,
read etc. en la estructura file_operations que luego se la pasarías al
cdev con un cdev_init. Todo esto en el módulo o driver que tenga el
control de los /dev/ que necesites. Así, cada vez que alguien lea o
escriba ahí el núcleo pasaría el control a tu módulo y entraría en la
función correspondiente que haría lo que tu quieras. Supongo que alguna
vez ya habrás creado algún módulo, en plan experimentando, sino, es muy
sencillo, busca por module_init, module_exit y cia.

 Te recomiendo que le eches una ojeada a
 http://lwn.net/Kernel/LDD3/
 Chapters 2 y 3, y si te gusta lo compres xD

> Lo estoy haciendo con python, pero para lo del device me imagino que
> me podria meter con C.

 Mis experiencias en paizon, por desgracia, son muy escasas. Así que de
esto ni idea. Pero lo de hacer módulos del núcleo en python suena a
ciencia-ficción.

> A ver si alguien sabe algo.
> Saludillos
> Saladino

 Venga aio.

-- 
yUnwEb

--------------------------------------------------------------------
wget -O - http://yunweb.homeunix.org/yunweb.asc | gpg --import
Key fingerprint = ADAE EEFC BD78 6CBB B76B  1662 2195 FF19 5324 14AB
--------------------------------------------------------------------


Más información sobre la lista de distribución eside-ghost