Contacta con nosotros

Temario del curso

Introducción

  • Breve historia de GNU/Linux
  • Licenciamiento
  • Versionado del núcleo
  • Ciclo de lanzamiento
  • Árboles del núcleo
  • Línea principal (mainline)
  • Núcleo frente a espacio de usuario
  • Mecanismo frente a política
  • Alternativas de controladores del núcleo
  • RTOS frente a Linux

Gestión de Memoria

  • Memoria virtual frente a memoria física
  • Asignación de memoria en el núcleo
  • Páginas
  • Zonas
  • API
  • Slab

Parche del Núcleo

  • Ciclo de vida
  • git
  • Código fuente del núcleo
  • Crear un parche
  • Revisar un parche
  • Corregir un parche
  • Envío de un parche
  • Código auditado

Módulos del Núcleo

  • Obtener las fuentes del núcleo
  • Configurar/compilar/instalar
  • Controladores de dispositivos (enlazados estáticamente, cargados en tiempo de ejecución)
  • inicialización/salida
  • Licenciamiento
  • EXPORT SYMBOL GPL
  • Makefile fuera del árbol del núcleo
  • herramientas de inicialización de módulos
  • Módulo dentro del árbol del núcleo
  • Kconfig
  • Paso de parámetros
  • sparse

Controladores de Caracteres

  • Arquitectura
  • Interfaz usuario/núcleo
  • Subsistema de E/S
  • VFS (Sistema de Archivos Virtual)
  • sysfs (dispositivos, bus, controladores, clases),
  • kobject/ktype/kset
  • Modelo de controladores del núcleo de Linux
  • Archivos de dispositivo
  • Controlador de caracteres

    • inicialización
    • registro
    • abrir, cerrar
    • cdev, cdev_add, cdev_del,...
    • números mayor/menor
    • udev, udevmonitor, udevadm

Operaciones Avanzadas de Controladores de Caracteres

  • ioctl
  • ioctl desbloqueado
  • ioctl compatible
  • API en espacio de usuario
  • API en espacio de núcleo
  • Ciclo de vida de procesos
  • Dormir/bloquear
  • Dormir/activar
  • Cola de espera
  • Manada retumbante (thundering herd)
  • poll/select

Depuración del Núcleo

  • Depuración
  • Depuración del núcleo

    • Búsqueda binaria con git
    • Soporte de depuración del núcleo
    • printk syslogd, klogd, niveles de registro, límite de tasa, niveles de depuración, sub-sistemas selectivos de depuración
    • Depuración mediante consulta de debugfs
    • Depuración de fallos (oops), simulación de fallos
    • Tecla Mágica SysRq
    • kgdb/kdb
    • JTAG

Trazabilidad

  • gcov
  • lcov
  • oprofile
  • ftrace

    • trazador nop
    • trazador de funciones
    • trazador de cambios de planificación (sched switch)
    • trazador de gráficos de funciones
    • trazador dinámico
  • trace-cmd/kernelshark
  • perf
  • LTTng

Interrupciones

  • Interrupciones frente a sondeo (polling)
  • Interrupción
  • Secciones de programa
  • Reentrancia
  • Eventos
  • Controlador de interrupción
  • Controlador de interrupción compartido
  • Flujo de interrupción
  • Control de interrupciones

Aplazamiento de Trabajo

  • Mitad superior/inferior
  • Softirqs
  • Tasklets
  • Colas de trabajo
  • Interrupciones subprocesadas

Concurrencia

  • Región/Sección crítica
  • Atómico
  • Condición de carrera
  • Sincronización
  • Bloqueo
  • Soluciones de bloqueo
  • Punto muerto (deadlock)
  • Contención
  • ¿Qué bloquear?
  • ¿Qué se puede usar?

    • Operaciones atómicas
    • Bloqueos de giro (spin locks)
    • Bloqueos de giro lector-escritor
    • Semáforo
    • Semáforo binario
    • Mutex
    • Semáforo lector-escritor
    • Variables de finalización (completion variables)
    • Bloqueos secuenciales
    • Deshabilitar interrupciones previas (preemption)
    • Ordenación y barreras

Tiempo

  • HZ
  • Jiffies
  • Retrasos grandes/pequeños
  • Temporizadores del núcleo

E/S de Hardware

  • Puertos de E/S
  • Memoria de E/S
  • ¿Cómo manejar los efectos secundarios al acceder a registros?

Comunicación Usuario-Núcleo

  • put(get)_user()
  • copiar a(desde)_user()
  • E/S del Núcleo
  • Mapeo de memoria
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Portabilidad

  • Tamaño de palabra
  • Tipos opacos
  • char con signo/sin signo
  • Alineación de datos
  • Promoción entera
  • Reutilización de código
  • Endianness
  • Tick del sistema
  • Tamaño de página
  • Orden de instrucciones
  • SMP/interrupciones previas/alta memoria

Excepto donde se indique lo contrario, el contenido y este plan de estudios están licenciados bajo Atribución-NoComercial-CompartirIgual 4.0 Internacional (CC BY-NC-SA 4.0).

Requerimientos

  • Conocimiento básico del uso de un sistema GNU/Linux como usuario final
  • Conocimiento básico de un shell de línea de comandos
  • Conocimiento básico del desarrollo de aplicaciones en espacio de usuario
  • Conocimiento intermedio de programación en C
  • Haber asistido previamente a Arquitectura de Sistemas Embebidos GNU/Linux (muy recomendado) y/o tener una buena comprensión de los temas allí expuestos
 35 Horas

Número de participantes


Precio por participante

Testimonios (3)

Próximos cursos

Categorías Relacionadas