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í
Testimonios (5)
Miguel's knowledge of the subject was extensive. He made the training easy to understand and the flow was balanced; adding on to each section with new features as needed. He covered everything that was asked and answered each and every question thoroughly. It was a very pleasant experience.
Paul Coaton - SEMPCheck Services
Curso - Flutter Development Bootcamp with Dart
That the trainer adapts to our needs
Eduardo Fontecha - ORMAZABAL PROTECTION & AUTOMATION S.L.U.
Curso - The Yocto Project - An Overview - hands-on
The trainer was enthusiastic, kind, and loved the topic
Isaac Murphy - Royal New Zealand Airforce
Curso - Build Native iOS and Android Apps with Flutter
Learning the steps required to implement the MVVM model.
Roy Chia - AFBI
Curso - Xamarin: Build Native Mobile Applications for Android, iOS and Windows from a Single C# Code Base
I really enjoy having a virtual PC online, I can do exercises whenever I want