1.-E) Arquitectura del sistema Linux LPIC-1

Repaso sobre temas aclaratorios de Arquitectura del sistema. LPIC-1 Exámen 101.
Sobre lo visto en el apartado «1» de esta unidad.

Los distintos directorios que mencionabamos:

lacemi@debianMich:~$ ls /sys
block bus class dev devices firmware fs kernel module power

lacemi@debianMich:~$ ls /sys/block
fd0 loop0 loop1 loop2 loop3 loop4 loop5 loop6 loop7 sda sdb sr0

lacemi@debianMich:~$ ls /sys/bus
ac97 gameport isa pci_express pnp serio usb
acpi i2c pci platform scsi spi virtio

Para entender esto necesitamos saber lo siguiente:
Los Ficheros de Dispositivos en Todo sistema Unix se basan en ficheros.
Todo dispositivo tiene un fichero asociado mediante el cual podemos hacer operaciones de entrada/salida.

Hay dos tipos de ficheros de dispositivos, atendiendo al hardware que representan:
char: Dispositivos de caracteres.

block: Dispositivos de bloques.

Los ficheros de dispositivos son ficheros especiales que utilizan dos números (major y minor) para identificar un dispositivo. Éstos ficheros especiales normalmente se encuentran en la ruta /dev aunque pueden crearse en cualquier otra ruta.
La llamada a sistema mknod permite crear ficheros de dispositivos especificando ruta, tipo y el identificador de dispositivo (major y minor).
Pueden existir ficheros para dispositivos inexistentes y dispositivos para los que no hay fichero. P.e. la tarjeta de red o la salida o entrada estándar.

Solucion para el manejo de ficheros de dispositivos:
udev: Se crean y destruyen los ficheros a medida que se conectan/desconectan dispositivos. Adicionalmente permite elegir nombres para esos dispositivos y programar acciones al cambiar el estado de los mismos.

Modelo de Drivers de Dispositivos
Para facilitar y organizar la construcción de drivers, Linux ofrece una serie de estructuras y funciones auxiliares que ofrecen una visión unificada de buses, dispositivos y drivers.

Las principales estructuras son:
struct device_driver (drivers o manejadores)
struct bus_type (buses)
struct device (dispositivos)

El Modelo de Drivers de Dispositivos tiene una interfaz unificada accesible a través del sistema de ficheros virtual sysfs.
El sistema de ficheros sysfs es similar a proc pero mucho más organizado y oriendado a los dispositivos y drivers del sistema. Normalmente está montado en /sys y contiene:

/sys/block: Dispositivos de bloques de cualquier bus.
/sys/bus: Buses del sistema, donde están los dispositivos
/sys/devices: Dispositivos del sistema organizados por buses.
/sys/class: Clases de dispositivos (audio, tarjetas gráficas,de red… )
/sys/modules: Drivers registrados en el núcleo
/sys/power: Ficheros para manejar estado de energía de distintos dispositivos.
/sys/firmware: Ficheros para manejar el firmware de algunos dispositivos

Aunque no entre en el exámen, podemos poner un ejemplo de una función, por ejemplo la usada para /sys/bus:
Estructura bus_type
struct bus_type {
const char * name;
struct module * owner;
struct kset subsys; //Subsistema dentro de sysfs al que pertenece
struct kset drivers; //Drivers conocidos para ese bus
struct kset devices; //Dispositivos conectados al bus
struct klist klist_devices;
struct klist klist_drivers;
// Funcion que comprueba si el bus puede manejar un cierto dispositivo o driver
de dispositivo.
int (*match)(struct device * dev, struct device_driver * drv);
int (*probe)(struct device * dev);
int (*remove)(struct device * dev);
void (*shutdown)(struct device * dev);
//Campos omitidos…
unsigned int drivers_autoprobe:1;
};

Cada operación sobre un fichero de dispositivo debe traducirse a una llamada a una rutina de su driver.
El driver debe registrarse creando un device_driver y llamando a driver_register() para registrarlo.
Si el driver esta compilado en el kernel, el registro se produce durante la fase de carga del núcleo. Si el driver está compilado como módulo, se cargará cuando sea necesario.
Cuando se registra un driver, el kernel comprueba para cada dispositivo que quede sin manejar si el driver puede manejarlo mediante la función probe().
Aunque esté registrado, el driver aún no tiene recursos asignados.
Inicialización del Driver
Para controlar la asignación de recursos se sigue el siguiente esquema:
Un contador mantiene el número de procesos que operan o esperan para operar en fichero de dispositivo.
Al abrir el dispositivo, si este contador está a 0, se realiza la asignación de recursos al driver de
dispositivo (IRQ, marcos de página, …)
Cada vez que un proceso cierra el fichero de dispositivo, se comprueba si el contador ha llegado
a 0. Si es así se liberan todos los recursos hasta que se intente acceder de nuevo al dispositivo.
Con esto nos damos una idea de como funciona Linux. Dejamos aquí el tema pues ya no es motivo de la certificación.

Publicado el noviembre 24, 2011 en Linux y etiquetado en , . Guarda el enlace permanente. Deja un comentario.

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: