Contacta con nosotros

Temario del curso

Introducción

  • Historia rápida de GNU/Linux
  • Licencias
  • Versionado del núcleo
  • Ciclo de liberación
  • Árboles del núcleo
  • Línea principal (mainline)
  • Núcleo vs. espacio de usuario
  • Mecanismo vs. política
  • Alternativas de controlador del núcleo
  • RTOS vs. Linux

Gestión de Memoria

  • Memoria virtual vs. 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 parche
  • Verificar parche
  • Corregir parche
  • Enviar parche
  • Código auditado

Módulos del Núcleo

  • Obtener código fuente del núcleo
  • Configurar/compilar/instalar
  • Controladores de dispositivos (vinculados estáticamente, cargados en tiempo de ejecución)
  • init/exit
  • Licencias
  • EXPORT_SYMBOL GPL
  • Makefile fuera del árbol del núcleo (out of tree)
  • module-init-tools
  • Módulo en el árbol del núcleo
  • Kconfig
  • Paso de parámetros
  • sparse

Controladores de Caracteres (Char Drivers)

  • Arquitectura
  • Interfaz usuario/núcleo
  • Subsistema I/O
  • VFS
  • sysfs (dispositivos, bus, controladores, clases),
  • kobject/ktype/kset
  • Modelo de controladores del núcleo de Linux
  • Archivos de dispositivo
  • Controlador de caracteres (char driver)

    • 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 sin bloquear (unlocked ioctl)
  • ioctl compatible (compat ioctl)
  • API en espacio de usuario
  • API en espacio de núcleo
  • Ciclo de vida del proceso
  • Dormir/bloquear
  • Dormir/despertar
  • Cola de espera (wait queue)
  • Horda retumbante (thundering herd)
  • poll/select

Depuración del Núcleo

  • Depuración
  • Depurar el núcleo

    • Búsqueda binaria con git
    • Soporte de depuración del núcleo
    • printk syslogd, klogd, niveles de registro, límite de frecuencia, niveles de depuración, subsistemas selectivos de depuración
    • Depuración consultando debugfs
    • Depuración de oops, afirmar oops
    • Tecla Mágica SysRq
    • kgdb/kdb
    • JTAG

Rastreo (Tracing)

  • gcov
  • lcov
  • oprofile
  • ftrace

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

Interrupciones

  • Interrupciones vs. sondeo (polling)
  • Interrupción
  • Secciones de programa
  • Reentrancia
  • Eventos
  • Manejador de interrupciones
  • Manejador de interrupción compartida
  • Flujo de interrupción
  • Control de interrupción

Aplazamiento de Trabajo

  • Partes superior/inferior (top/bottom halves)
  • Softirqs
  • Tasklets
  • Colas de trabajo (work queues)
  • Interrupciones subprocesadas

Concurrencia

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

    • Operaciones atómicas
    • Spinlocks
    • Spinlocks lector-escritor
    • Semáforo
    • Semáforo binario
    • Mutex
    • Semáforo lector-escritor
    • Variables de finalización (completion variables)
    • Bloqueos secuenciales (sequential locks)
    • Deshabilitar preempción
    • Orden y barreras

Tiempo

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

I/O de Hardware

  • Puertos I/O
  • Memoria I/O
  • ¿Cómo manejar los efectos secundarios al acceder a registros?

Comunicación Usuario-Núcleo

  • put(get)_user()
  • copy to(from)_user()
  • I/O 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 (integral promotion)
  • Reutilización de código
  • Endianness
  • Tick del sistema
  • Tamaño de página
  • Orden de instrucciones
  • SMP/preempción/memoria alta (high memory)

Salvo donde se indique lo contrario, el contenido y este esquema del curso están licenciados bajo Atribución-NoComercial-CompartirIgual 4.0 Internacional (CC BY-NC-SA 4.0).

Requerimientos

  • Familiaridad básica con el uso de un sistema GNU/Linux como usuario final
  • Familiaridad básica con una terminal de línea de comandos
  • Conocimientos básicos de desarrollo en espacio de usuario / aplicaciones
  • Conocimientos intermedios de programación en C
  • Debe haber asistido a Arquitectura de Sistemas GNU/Linux Embebidos previamente (¡fuertemente 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