Programa del Curso

Introducción

  • Breve historia de GNU/Linux
  • licenciamiento
  • Control de versiones del kernel
  • Ciclo de lanzamiento
  • Árboles de grano
  • Mainline
  • Kernel vs. espacio de usuario
  • Mecanismo vs. política
  • Alternativas al controlador del kernel
  • RTOS vs. Linux

Memoria Management

  • Memoria virtual vs. memoria física
  • Asignación de memoria en el kernel
  • Páginas
  • Zonas
  • API
  • tabla

Parche del kernel

  • ciclo vital
  • Git
  • Fuente del kernel
  • Crear parche
  • Comprobar parche
  • Parche de corrección
  • parche de barco
  • Código auditado

Módulos del kernel

  • Obtener las fuentes del kernel
  • Configurar/Construir/Instalar
  • controladores de dispositivo (vinculados estáticamente, cargados en tiempo de ejecución)
  • inicio/salida
  • licenciamiento
  • SÍMBOLO DE EXPORTACIÓN GPL
  • Archivo de creación fuera del árbol
  • module-init-tools
  • módulo en el árbol del kernel
  • Kconfig
  • Paso de parámetros
  • escaso

Controladores de carbón

  • arquitectura
  • Interfaz de usuario/kernel
  • Subsistema de E/S
  • VFS
  • sysfs (dispositivos, bus, controladores, clases),
  • kobject/ktype/kset
  • Modelo de controlador del kernel de Linux
  • Archivos de dispositivo
  • Controlador de char
    • inicialización
    • registro
    • abrir, soltar
    • cdev, cdev add, cdev del,...
    • Números mayores/menores
    • udev, udevmonitor, udevadm

Operaciones avanzadas del controlador de charachter

  • IOCTL
  • IOCTL desbloqueado
  • Compatibilidad IOCTL
  • API de espacio de usuario
  • API de espacio del kernel
  • Ciclo de vida del proceso
  • Dormir/Bloquear
  • Dormir/Despertar
  • cola de espera
  • Manada atronadora
  • Sondear/Seleccionar

Depuración del kernel

  • bicho
  • depuración
  • Depurando el kernel
    • Búsqueda binaria con Git
    • Soporte de depuración desde el kernel
    • printk syslogd, klogd, loglevels, límite de velocidad, niveles de depuración, subsistemas selectivos de depuración
    • Depuración mediante la consulta de debugfs
    • depuración de oops, afirmación de oops
    • Llave mágica SysRq
    • kgdb/kdb
    • JTAG

Trazado

  • gcov
  • LCOV
  • Operfil
  • ftrace
    • Trazador NOP
    • Trazador de funciones
    • Trazador de conmutadores Sched
    • Trazador de gráficos de función
    • Trazador dinámico
  • trace-cmd/kernelshark
  • Perf
  • LTTng

Interrumpe

  • Interrupciones vs. sondeo
  • interrumpir
  • Secciones del programa
  • Reentrada
  • Eventos
  • Controlador de interrupciones
  • Controlador de interrupciones compartido
  • Flujo de interrupción
  • Control de interrupciones

Aplazamiento de trabajos

  • mitades superior/inferior
  • softirqs
  • Tasklets
  • Colas de trabajo
  • Interrrupciones roscadas

Concurrencia

  • Región/sección crítica
  • atómico
  • Condición de la carrera
  • sincronización
  • bloqueo
  • Soluciones de cierre
  • estancamiento
  • disputa
  • ¿Qué bloquear?
  • ¿Qué se puede utilizar?
    • Operaciones atómicas
    • Cerraduras giratorias
    • Cerraduras de giro Lector-Escritor
    • semáforo
    • Semáforo binario
    • Mutex
    • Semáforo lector-escritor
    • Variables de finalización
    • Bloqueos secuenciales
    • Deshabilitar la preferencia
    • Ordenamiento y barreras

Hora

  • HZ
  • Jiffies
  • Retrasos grandes/pequeños
  • Temporizadores del kernel

E/S de hardware

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

Kernel de usuario Communication

  • put(obtener)_user()
  • Copiar a(desde)_user()
  • E/S del kernel
  • Mapeo de memoria
  • PROCFS
  • sysfs
  • depuradores
  • Relés
  • Enlace de red
  • IOCTL

Portabilidad

  • Tamaño de la palabra
  • Tipos opacos
  • Carácter firmado/sin firmar
  • Alineación de datos
  • Promoción integral
  • Reutilización de código
  • Endianess
  • Tick del sistema
  • Tamaño de página
  • Ordenamiento de instrucciones
  • SMP/preferencia/memoria alta

Excepto 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 un shell de línea de comandos
  • Conocimientos básicos de espacio de usuario / desarrollo de aplicaciones
  • Conocimientos intermedios de programación en C
  • Haber asistido a Embedded GNU/Linux Systems Architecture antes (¡muy recomendable!) y/o tener una buena comprensión de los temas descritos allí
 35 Horas

Número de participantes


Precio por Participante​

Testimonios (5)

Próximos cursos

Categorías Relacionadas