Contacta con nosotros

Temario del curso

Introducción

  • historia rápida de GNU/Linux
  • licenciamiento
  • versionado del kernel
  • ciclo de lanzamiento
  • ramas del kernel
  • mainline
  • kernel frente a espacio de usuario
  • mecanismo frente a política
  • alternativas de controladores del kernel
  • RTOS frente a Linux

Gestión de Memoria

  • memoria virtual frente a memoria física
  • asignación de memoria en el kernel
  • páginas
  • zonas
  • API
  • slab

Parche del Kernel

  • ciclo de vida
  • git
  • fuente del kernel
  • crear parche
  • verificar parche
  • corregir parche
  • enviar parche
  • código auditado

Módulos del Kernel

  • obtener fuentes del kernel
  • configurar/compilar/instalar
  • controladores de dispositivos (enlazados estáticamente, cargados en tiempo de ejecución)
  • init/exit
  • licenciamiento
  • EXPORTAR SÍMBOLO GPL
  • makefile fuera del árbol de fuentes
  • herramientas de inicio de módulo (module-init-tools)
  • módulo dentro del árbol del kernel
  • Kconfig
  • paso de parámetros
  • sparse

Controladores de Caracteres

  • arquitectura
  • interfaz usuario/kernel
  • subsistema I/O
  • VFS (Sistema de Archivos Virtual)
  • sysfs (dispositivos, bus, controladores, clases),
  • kobject/ktype/kset
  • modelo de controlador del kernel de Linux
  • archivos de dispositivo
  • controlador de carácter

    • inicialización
    • registro
    • open, release
    • cdev, cdev add, cdev del,...
    • números mayor/menor
    • udev, udevmonitor, udevadm

Operaciones Avanzadas de Controladores de Caracteres

  • ioctl
  • ioctl sin bloqueo
  • ioctl compatible (compat ioctl)
  • API en espacio de usuario
  • API en espacio de kernel
  • ciclo de vida del proceso
  • dormir/bloquear
  • dormir/despertar
  • cola de espera (wait queue)
  • problema del rebaño tronador (thundering herd)
  • poll/select

Depuración del Kernel

  • depuración
  • depuración del kernel

    • búsqueda binaria con git
    • soporte de depuración del kernel
    • printk syslogd, klogd, niveles de registro, límite de tasa, niveles de depuración, sistemas selectivos de depuración
    • depuración mediante consulta de debugfs
    • depuración de oops, aseguramiento de oops
    • Tecla Mágica SysRq
    • kgdb/kdb
    • JTAG

Rastreo (Tracing)

  • gcov
  • lcov
  • oprofile
  • ftrace

    • traza nop
    • traza de funciones
    • traza de cambios de planificador (sched switch)
    • traza de gráfico de funciones
    • traza dinámica
  • trace-cmd/kernelshark
  • perf
  • LTTng

Interrupciones

  • interrupciones frente a sondeo (polling)
  • interrupción
  • secciones de programa
  • reintroducción (reentrancy)
  • eventos
  • manejador de interrupciones
  • manejador de interrupciones compartido
  • flujo de interrupciones
  • control de interrupciones

Aplazamiento de Trabajo

  • partes superiores/inferiores (top/bottom halves)
  • softirqs (interrupciones de software)
  • tasklets
  • colas de trabajo (work queues)
  • interrupciones en hilo (threaded interrupts)

Concurrencia

  • región/sección crítica
  • atómico (atomic)
  • condición de carrera (race condition)
  • sincronización
  • bloqueo (locking)
  • soluciones de bloqueo
  • interbloqueo (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 preemoción
    • ordenación y barreras (barriers)

Tiempo

  • HZ
  • Jiffies
  • demoras grandes/pequeñas
  • temporizadores del kernel

E/I de Hardware

  • Puertos de E/I
  • Memoria de E/I
  • ¿Cómo lidiar con los efectos secundarios al acceder a registros?

Comunicación Usuario-Kernel

  • put(get)_user()
  • copiar a(desde)_user()
  • E/I del Kernel
  • mapeo de memoria
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Portabilidad

  • tamaño de palabra
  • tipos opacos
  • char con/sin signo
  • alineación de datos
  • promoción entera (integral promotion)
  • reutilización de código
  • endianidad (endianess)
  • tick del sistema
  • tamaño de página
  • ordenación de instrucciones
  • SMP/preemoción/memoria alta

A menos que se indique lo contrario, el contenido y este programa de curso tienen licencia 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
  • Conocimientos básicos de desarrollo en espacio de usuario / aplicaciones
  • Conocimiento intermedio de programación en C
  • Debería haber asistido antes a Arquitectura de Sistemas GNU/Linux Integrados (¡muy recomendado!) y/o tener un buen entendimiento de los temas allí descritos
 35 Horas

Número de participantes


Precio por participante

Testimonios (3)

Próximos cursos

Categorías Relacionadas