Temario del curso

Introducción

  • breve historia de GNU/Linux
  • licenciamiento
  • versionado del kernel
  • ciclo de lanzamiento
  • árboles de kernel
  • mainline
  • kernel vs. espacio de usuario
  • mecanismo vs. política
  • alternativas a los controladores del kernel
  • RTOS vs. Linux

Administración de Memoria

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

Parche del Kernel

  • ciclo de vida
  • git
  • código 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
  • EXPORT SYMBOL GPL
  • makefile fuera del árbol
  • module-init-tools
  • módulo en el árbol del kernel
  • Kconfig
  • paso de parámetros
  • sparse

Controladores de Caracteres

  • arquitectura
  • interfaz usuario/kernel
  • subsistema I/O
  • VFS
  • sysfs (dispositivos, bus, controladores, clases),
  • kobject/ktype/kset
  • modelo de controlador del kernel de Linux
  • archivos de dispositivo
  • controlador de caracteres
    • inicialización
    • registro
    • open, release
    • cdev, cdev add, cdev del,...
    • números mayor/menor
    • udev, udevmonitor, udevadm

Operaciones Avanzadas de Controladores de Caracteres

  • ioctl
  • unlocked ioctl
  • compat ioctl
  • API de espacio de usuario
  • API de espacio del kernel
  • ciclo de vida del proceso
  • durmiendo/bloqueando
  • durmiendo/despertando
  • cola de espera
  • manada rugiente
  • poll/select

Depuración del Kernel

  • depuración
  • depuración del kernel
    • búsqueda binaria con git
    • soporte de depuración desde el kernel
    • printk syslogd, klogd, niveles de registro, límite de velocidad, niveles de depuración, subsistemas de depuración selectiva
    • depuración consultando debugfs
    • depuración de oops, afirmar oops
    • Magic SysRq Key
    • kgdb/kdb
    • JTAG

Seguimiento

  • gcov
  • lcov
  • oprofile
  • ftrace
    • trazador nop
    • trazador de funciones
    • trazador de cambio de programación
    • trazador de gráficos de funciones
    • trazador dinámico
  • trace-cmd/kernelshark
  • perf
  • LTTng

Interrupciones

  • interrupciones vs. sondeo
  • interrupción
  • secciones de programa
  • reentrancia
  • eventos
  • manejador de interrupción
  • manejador compartido de interrupciones
  • flujo de interrupción
  • control de interrupción

Trabajo Diferido

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

Concurrency

  • región/sección crítica
  • operaciones atómicas
  • condición de carrera
  • sincronización
  • bloqueo
  • soluciones de bloqueo
  • deadlocks
  • contention
  • ¿Qué bloquear?
  • ¿Qué se puede usar?
    • operaciones atómicas
    • spin locks
    • spin locks de lectura-escritura
    • semáforo
    • semáforo binario
    • mutex
    • semáforo de lectura-escritura
    • variables de completado
    • locks secuenciales
    • deshabilitar la preempción
    • ordenación y barreras

Tiempo

  • HZ
  • Jiffies
  • retrasos grandes/pequeños
  • temporizadores del kernel

Hardware I/O

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

Comunicación Usuario-Kernel

  • put(get)_user()
  • copy to(from)_user()
  • E/S del Kernel
  • mapeo de memoria
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Portabilidad

  • tamaño de palabra
  • tipos opacos
  • char signado/sin signo
  • alineación de datos
  • promoción integral
  • reutilización de código
  • endianness
  • tick del sistema
  • tamaño de página
  • ordenación de instrucciones
  • SMP/preempción/memoria alta

Salvo indicación contraria, 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 línea de comandos shell
  • Conocimientos básicos de desarrollo en espacio de usuario / aplicaciones
  • Conocimientos intermedios de programación en C
  • Debería haber asistido a Arquitectura de Sistemas Embebidos GNU/Linux antes (¡altamente recomendado!) y/o tener un buen entendimiento de los temas allí expuestos
 35 Horas

Número de participantes


Precio por Participante​

Testimonios (5)

Próximos cursos

Categorías Relacionadas