Contacta con nosotros

Temario del curso

Introducción

  • historia rápida de GNU/Linux
  • licenciamiento
  • versionado del núcleo
  • ciclo de lanzamientos
  • árboles del núcleo
  • versión principal (mainline)
  • núcleo vs. espacio de usuario
  • mecanismo vs. política
  • alternativas de controladores de 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
  • fuentes del núcleo
  • creación de parches
  • revisión de parches (check-patch)
  • corrección de parches
  • envío de parches
  • código revisado

Módulos del Núcleo

  • obtención de las fuentes del núcleo
  • configurar/construir/instalar
  • controladores de dispositivo (vinculados estáticamente, cargados en tiempo de ejecución)
  • inicio/salida (init/exit)
  • licenciamiento
  • EXPORT_SYMBOL GPL
  • makefile fuera del árbol (out of tree)
  • module-init-tools
  • módulo dentro del árbol del núcleo
  • Kconfig
  • paso de parámetros
  • sparse

Controladores de Carácter

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

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

Operaciones Avanzadas de Controladores de Carácter

  • ioctl
  • ioctl desbloqueado (unlocked ioctl)
  • ioctl compatible (compat ioctl)
  • API de espacio de usuario
  • API de espacio de núcleo
  • ciclo de vida del proceso
  • bloqueo/espera activa
  • dormir/despertar
  • cola de espera
  • manada de trueno (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 desde el núcleo
    • printk syslogd, klogd, niveles de registro, límite de velocidad, niveles de depuración, subsistemas selectivos
    • depuración mediante consulta a debugfs
    • depuración de oops, forzar oops
    • Tecla mágica SysRq
    • kgdb/kdb
    • JTAG

Trazado

  • gcov
  • lcov
  • oprofile
  • ftrace

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

Interrupciones

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

Diferimiento de Tareas

  • mitad superior/mitad inferior
  • softirqs
  • tasklets
  • colas de trabajo
  • interrupciones en hilo

Concurrencia

  • región/sección crítica
  • operaciones atómicas
  • condición de carrera
  • sincronización
  • bloqueos (locking)
  • soluciones de bloqueo
  • cuelgue mortal (deadlock)
  • contención
  • ¿qué bloquear?
  • ¿qué se puede utilizar?

    • operaciones atómicas
    • bloqueos spin
    • bloqueos spin lector-escritor
    • semáforo
    • semáforo binario
    • mutex
    • semáforo lector-escritor
    • variables de finalización
    • bloqueos secuenciales
    • desactivar la premptión
    • ordenación 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 tratar con 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 firmado/sin firmar
  • alineación de datos
  • promoción entera
  • reutilización de código
  • endianness
  • ticked de sistema
  • tamaño de página
  • orden de instrucciones
  • SMP/premptión/memoria alta

A menos que se indique lo contrario, el contenido y este programa de 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 shell de línea de comandos
  • Conocimientos básicos de desarrollo en espacio de usuario / aplicaciones
  • Conocimientos intermedios de programación en C
  • Se recomienda haber asistido a Arquitectura de Sistemas GNU/Linux Embebidos previamente (fuertemente recomendado) y/o tener una buena comprensión de los temas allí descritos
 35 Horas

Número de participantes


Precio por participante

Testimonios (3)

Próximos cursos

Categorías Relacionadas