módulos del kernel
DESCRIPTION
Presentación del curso de Introducción a los módulos del kernel de las Jornadas Técnicas de Marzo de 2010 organizadas por el Grupo de Usuarios de Linux de la UC3M http://www.gul.esTRANSCRIPT
![Page 1: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/1.jpg)
www.GUL.es
Modulos del Kernel
Roberto Munoz [email protected]
Grupo de Usuarios de LinuxUniversidad Carlos III de Madrid
2 de marzo de 2010
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 1 / 53
![Page 2: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/2.jpg)
www.GUL.es
Contenido
1 Introduccion
2 Modulo de ejemplo
3 Como funcionan los modulos
4 Drivers de dispositivos
5 Comunicacion espacio kernel ⇔ espacio usuario
6 Sistema de ficheros /proc
7 Como hablar con dispositivos
8 Una TTY
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 2 / 53
![Page 3: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/3.jpg)
www.GUL.es
Introduccion
Contenido
1 Introduccion
2 Modulo de ejemplo
3 Como funcionan los modulos
4 Drivers de dispositivos
5 Comunicacion espacio kernel ⇔ espacio usuario
6 Sistema de ficheros /proc
7 Como hablar con dispositivos
8 Una TTY
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 3 / 53
![Page 4: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/4.jpg)
www.GUL.es
Introduccion Que es
¿Que es un modulo del Kernel?
Trozo de codigo que se carga en el nucleo bajo demanda.Amplian sus capacidades sin necesidad de reiniciar.Un driver es un modulo del kernel, por ejemplo ETTY.
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 4 / 53
![Page 5: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/5.jpg)
www.GUL.es
Introduccion Por que
¿Por que escribir modulos?
Por diversion.Para ganar dineroPara aprender como funcionan los entresijos.Por que puedes.
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 5 / 53
![Page 6: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/6.jpg)
www.GUL.es
Introduccion Por que
¿Vale pero por que de Linux?
Porque es libre y el codigo fuente esta disponiblePor la inmensa comunidad que tiene alrededor¿He dicho ya que es divertido?
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 6 / 53
![Page 7: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/7.jpg)
www.GUL.es
Introduccion Como
¿Como se meten los modulos en el kernel?
¿Que modulos estoy usando ahora mismo? lsmod
¿Como cargo uno? modprobe
¿Y para descargarlo? rmmod
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 7 / 53
![Page 8: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/8.jpg)
www.GUL.es
Modulo de ejemplo
Contenido
1 Introduccion
2 Modulo de ejemplo
3 Como funcionan los modulos
4 Drivers de dispositivos
5 Comunicacion espacio kernel ⇔ espacio usuario
6 Sistema de ficheros /proc
7 Como hablar con dispositivos
8 Una TTY
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 8 / 53
![Page 9: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/9.jpg)
www.GUL.es
Modulo de ejemplo Hola Mundo
Hola Mundo
#include <linux/module.h>#include <linux/kernel.h>int init_module(void){printk(KERN_INFO ’Hola Mundo.\n’);return 0;
}void cleanup_module(void){printk(KERN_INFO ’Adios mundo cruel.\n’);
}
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 9 / 53
![Page 10: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/10.jpg)
www.GUL.es
Modulo de ejemplo Como se compila
Como se compila
obj-m += holamundo.oall:make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modulesclean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 10 / 53
![Page 11: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/11.jpg)
www.GUL.es
Modulo de ejemplo Como se compila
Ver ejemplo 1
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 11 / 53
![Page 12: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/12.jpg)
www.GUL.es
Modulo de ejemplo Como se le pasan argumentos
Como se le pasan argumentos
argc/argv han pasado a mejor vidamodule param(nombre,tipo,permisos)
Nombre de la variableTipo de variablebool/invbool un bit verdadero o falso.
charp cadenaint entero
long entero largoshort entero corto
uint. . . sin signoPermisos sysfs (ver man 2 open)
insmod mimodulo.ko miparametro=5
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 12 / 53
![Page 13: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/13.jpg)
www.GUL.es
Modulo de ejemplo Como se le pasan argumentos
Ver ejemplo 2
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 13 / 53
![Page 14: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/14.jpg)
www.GUL.es
Como funcionan los modulos
Contenido
1 Introduccion
2 Modulo de ejemplo
3 Como funcionan los modulos
4 Drivers de dispositivos
5 Comunicacion espacio kernel ⇔ espacio usuario
6 Sistema de ficheros /proc
7 Como hablar con dispositivos
8 Una TTY
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 14 / 53
![Page 15: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/15.jpg)
www.GUL.es
Como funcionan los modulos
Como se ejecutan los modulos
No hay main()No tienen un flujo determinado.
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 15 / 53
![Page 16: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/16.jpg)
www.GUL.es
Como funcionan los modulos
Funciones disponibles
No hay printf, malloc, strcmp, atoi. . .No hay libc!!!!¿Entonces me tengo que picar toooodo lo que haga?Sı.Bueno,casi todo.Se pueden usar todas las funciones que exporta el kernel./proc/kallsyms
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 16 / 53
![Page 17: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/17.jpg)
www.GUL.es
Como funcionan los modulos
Memoria dinamica en el kernel
kmalloc#include <linux/slab.h>void *kmalloc(size t size, int flags)flags: GFP KERNELflags: GFP ATOMICflags: . . .
kfree(void *ptr)
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 17 / 53
![Page 18: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/18.jpg)
www.GUL.es
Como funcionan los modulos
Espacio de Kernel vs Espacio de Usuario
Objetivo del kernel:gestion de los recursos.Tarjeta de videoDisco duroMemoria. . .
Competicion por los recursosModos de ejecucion
Modo supervisorModo usuario
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 18 / 53
![Page 19: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/19.jpg)
www.GUL.es
Como funcionan los modulos
Espacio de nombres
Variables localesVariables globales
Corrupcion del espacio de nombres (namespace pollution)
El kernel es un unico espacio de nombres/proc/kallsyms
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 19 / 53
![Page 20: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/20.jpg)
www.GUL.es
Como funcionan los modulos
Espacio de codigo
Gestion de memoria uffffViolacion de SegmentoPunteros = Direcciones de memoria fısicas?NOPunteros = Direcciones de memoria logicas.Espacio de codigo del kernel = modulosSegfault del modulo ⇒ Segfault del kernel
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 20 / 53
![Page 21: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/21.jpg)
www.GUL.es
Como funcionan los modulos
Tienes un problema
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 21 / 53
![Page 22: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/22.jpg)
www.GUL.es
Drivers de dispositivos
Contenido
1 Introduccion
2 Modulo de ejemplo
3 Como funcionan los modulos
4 Drivers de dispositivos
5 Comunicacion espacio kernel ⇔ espacio usuario
6 Sistema de ficheros /proc
7 Como hablar con dispositivos
8 Una TTY
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 22 / 53
![Page 23: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/23.jpg)
www.GUL.es
Drivers de dispositivos Los nodos
Nodos de dispositivo
Que son? Ficherosmajor
/proc/devices
minorTipos de dispositivos
CaracteresBloques
Para crear unomknod <nombre> bc<b|c> major minor
/usr/src/linux/Documentation/devices.txt
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 23 / 53
![Page 24: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/24.jpg)
www.GUL.es
Drivers de dispositivos Dispositivos de caracteres
Estructura file operations
struct file_operations {struct module *owner;loff_t (*llseek) (struct file *,loff_t, int);ssize_t (*read) (struct file *,char __user *,size_t,loff_t *);ssize_t (*write) (struct file *,const char __user *,size_t, loff_t *);int (*readdir) (struct file *,void *,filldir_t);unsigned int (*poll) (struct file *,struct poll_table_struct *);int (*ioctl) (struct inode *,struct file *,unsigned int,unsigned long);int (*open) (struct inode *,struct file *);int (*flush) (struct file *,fl_owner_t id);int (*fsync) (struct file *,struct dentry *,int datasync);};
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 24 / 53
![Page 25: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/25.jpg)
www.GUL.es
Drivers de dispositivos Dispositivos de caracteres
Uso de file operations
struct file_operations fops = {.owner = THIS_MODULE,.read = midispositivo_read,.write = midispositivo_write,.open = midispositivo_open,.release = midispositivo_release
};
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 25 / 53
![Page 26: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/26.jpg)
www.GUL.es
Drivers de dispositivos Dispositivos de caracteres
Otras estructuras importantes
Estructura file
Estructura cdev
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 26 / 53
![Page 27: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/27.jpg)
www.GUL.es
Drivers de dispositivos Dispositivos de caracteres
Registrar un dispositivo
cdev alloc
cdev addint cdev add(struct cdev *dev, dev t num, unsignedint count);
cdev del
struct cdev *my_cdev = cdev_alloc( );my_cdev->owner = THIS_MODULE;my_cdev->ops = &my_fops;ret=cdev_add(my_cdev, my_major, my_count);...cdev_del(my_cdev);
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 27 / 53
![Page 28: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/28.jpg)
www.GUL.es
Drivers de dispositivos Dispositivos de caracteres
Ver ejemplo 3
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 28 / 53
![Page 29: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/29.jpg)
www.GUL.es
Comunicacion espacio kernel⇔ espacio usuario
Contenido
1 Introduccion
2 Modulo de ejemplo
3 Como funcionan los modulos
4 Drivers de dispositivos
5 Comunicacion espacio kernel ⇔ espacio usuario
6 Sistema de ficheros /proc
7 Como hablar con dispositivos
8 Una TTY
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 29 / 53
![Page 30: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/30.jpg)
www.GUL.es
Comunicacion espacio kernel⇔ espacio usuario Usuario a Kernel
Pasar datos del usuario al kernel
ssize t (*write) (struct file *,const char user*,size t, loff t
*);
unsigned long copy from user(void *to,const voiduser *from,unsigned long count);
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 30 / 53
![Page 31: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/31.jpg)
www.GUL.es
Comunicacion espacio kernel⇔ espacio usuario Kernel a Usuario
Pasar datos del kernel al usuario
ssize t (*read) (struct file *,char user*,size t,loff t *);
unsigned long copy to user(void user *to,constvoid *from,unsigned long count);
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 31 / 53
![Page 32: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/32.jpg)
www.GUL.es
Comunicacion espacio kernel⇔ espacio usuario Kernel a Usuario
Ver ejemplo 4
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 32 / 53
![Page 33: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/33.jpg)
www.GUL.es
Sistema de ficheros /proc
Contenido
1 Introduccion
2 Modulo de ejemplo
3 Como funcionan los modulos
4 Drivers de dispositivos
5 Comunicacion espacio kernel ⇔ espacio usuario
6 Sistema de ficheros /proc
7 Como hablar con dispositivos
8 Una TTY
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 33 / 53
![Page 34: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/34.jpg)
www.GUL.es
Sistema de ficheros /proc Creacion y uso
Como crear un fichero en /proc
<linux/proc fs.h>
int (*read proc)(char *page, char **start, off t offset, int
count,int *eof, void *data);
struct proc dir entry *create proc read entry(const char *name,
mode t mode, struct proc dir entry *base, read proc t *read proc,
void *data);
remove proc entry
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 34 / 53
![Page 35: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/35.jpg)
www.GUL.es
Sistema de ficheros /proc Creacion y uso
Ver ejemplo 5
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 35 / 53
![Page 36: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/36.jpg)
www.GUL.es
Como hablar con dispositivos
Contenido
1 Introduccion
2 Modulo de ejemplo
3 Como funcionan los modulos
4 Drivers de dispositivos
5 Comunicacion espacio kernel ⇔ espacio usuario
6 Sistema de ficheros /proc
7 Como hablar con dispositivos
8 Una TTY
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 36 / 53
![Page 37: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/37.jpg)
www.GUL.es
Como hablar con dispositivos La forma normal
Read y Write
Dispositivos logicos ⇔ Dispositivos fısicosPara leer: read o midispositivo read
Para escribir: write o midispositivo write
¿Y si solo quiero hablar con el dispositivo logico?Configurar baudios, paridad, bloquear una puerta, autodestruccion,. . .
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 37 / 53
![Page 38: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/38.jpg)
www.GUL.es
Como hablar con dispositivos La forma avanzada
Ioctl
IOCTL:Input Output ConTroLUsuario: int ioctl(int fd, unsigned long cmd,...????);
Cada ioctl es distinta, desestructurado, no documentado, noportable, . . .En resumen: no usarMejor otros metodos; sobre todo sysfs
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 38 / 53
![Page 39: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/39.jpg)
www.GUL.es
Como hablar con dispositivos La forma avanzada
Ver ejemplo 6
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 39 / 53
![Page 40: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/40.jpg)
www.GUL.es
Una TTY
Contenido
1 Introduccion
2 Modulo de ejemplo
3 Como funcionan los modulos
4 Drivers de dispositivos
5 Comunicacion espacio kernel ⇔ espacio usuario
6 Sistema de ficheros /proc
7 Como hablar con dispositivos
8 Una TTY
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 40 / 53
![Page 41: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/41.jpg)
www.GUL.es
Una TTY Que es
¿Que es una TTY?
OriginalmenteTTY: Teletypewriter teletipoConexion fısica o virtual
ActualmenteCualquier puerto serieTerminalesUSB-to-serialModemsBluetooth
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 41 / 53
![Page 42: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/42.jpg)
www.GUL.es
Una TTY Como se crea
Como se hace un driver tty
<linux/tty driver.h>
struct tty driver
alloc tty driver(tty minors)
struct tty operations
tty set operations
tty registrer driver
tty registrer device
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 42 / 53
![Page 43: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/43.jpg)
www.GUL.es
Una TTY Como se crea
Ejemplo de tty operations
static struct tty_operations serial_ops = {.open = tiny_open,.close = tiny_close,.write = tiny_write,.write_room = tiny_write_room,.set_termios = tiny_set_termios,
};
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 43 / 53
![Page 44: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/44.jpg)
www.GUL.es
Una TTY Como se crea
Ejemplo de inicializacion de driver
tiny_tty_driver->owner = THIS_MODULE;tiny_tty_driver->driver_name = "tiny_tty";tiny_tty_driver->name = "ttty";tiny_tty_driver->major = TINY_TTY_MAJOR,tiny_tty_driver->type = TTY_DRIVER_TYPE_SERIAL,tiny_tty_driver->subtype = SERIAL_TYPE_NORMAL,tiny_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_NO_DEVFS,tiny_tty_driver->init_termios = tty_std_termios;tiny_tty_driver->init_termios.c_cflag = B9600 | CS8;tty_set_operations(tiny_tty_driver, &serial_ops);
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 44 / 53
![Page 45: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/45.jpg)
www.GUL.es
Una TTY Como se crea
struct termios
struct termios tty_std_termios = {.c_iflag =ICRNL | IXON,.c_oflag =OPOST | ONLCR,.c_cflag =B38400 | CS8 | CREAD | HUPCL,.c_lflag =ISIG | ICANON | ECHO | ECHOE
| ECHOK |ECHOCTL | ECHOKE | IEXTEN,.c_cc = INIT_C_CC
};
Configuracion inicial de la ttyman termios
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 45 / 53
![Page 46: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/46.jpg)
www.GUL.es
Una TTY ¿Y la funcion read?
¿No hay funcion read?
No es necesariaDrivers tty envıan datos al hardwareDatos recibidos tty flip buffer
tty flip buffer push
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 46 / 53
![Page 47: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/47.jpg)
www.GUL.es
Una TTY ¿Y la funcion read?
Ejemplo
for (i = 0; i < data_size; ++i) {if (tty->flip.count >= TTY_FLIPBUF_SIZE)tty_flip_buffer_push(tty);
tty_insert_flip_char(tty, data[i], TTY_NORMAL);}tty_flip_buffer_push(tty);
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 47 / 53
![Page 48: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/48.jpg)
www.GUL.es
Una TTY Resto de TTY
Mas sobre una tty
Tan compleja como se deseeFunciones tiocmget y tiocmsetioctls propias de una tty.
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 48 / 53
![Page 49: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/49.jpg)
www.GUL.es
Una TTY Resto de TTY
Ver ejemplo etty
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 49 / 53
![Page 50: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/50.jpg)
www.GUL.es
Preguntas ¿Te atreves a preguntar algo?
¿Alguna pregunta?
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 50 / 53
![Page 51: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/51.jpg)
www.GUL.es
Bibliografıa
Bibliografıa
[Peter Jay Salzman, 2005] Linux Kernel Module ProgrammingGuide.The Linux Documentation Project (www.tldp.org).
[O’Reilly, 2005] Linux Device Drivers Third Edition
[Imagenes]Tux: tux.crystalxp.netLogo: www.gul.es
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 51 / 53
![Page 52: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/52.jpg)
www.GUL.es
Agradecimientos ¡Gracias por venir!
Agradecimientos
Gracias al gul por organizar estas jornadasGracias a David por convencerme de dar esta charlaGracias a todos vosotros por venir
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 52 / 53
![Page 53: Módulos del Kernel](https://reader038.vdocuments.pub/reader038/viewer/2022102717/558b0a30d8b42af9758b45ed/html5/thumbnails/53.jpg)
www.GUL.es
Agradecimientos ¡Gracias por venir!
Roberto Munoz (Jornadas Marzo ’10) Modulos del Kernel 2 de marzo de 2010 53 / 53