Gracias por enviar su consulta! Uno de los miembros de nuestro equipo se pondrá en contacto con usted en breve.
Gracias por enviar su reserva! Uno de los miembros de nuestro equipo se pondrá en contacto con usted en breve.
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
Testimonios (3)
Todo está bien.
Adrian Rybka - SEOyon
Curso - Flutter Development Bootcamp with Dart
Traducción Automática
Información adicional muy útil
Grzegorz - Comp S.A.
Curso - BLoC Pattern
Traducción Automática
Su conocimiento y paciencia.
Chrisna - Agricatural Research Council
Curso - Ionic 4 and Angular for Developers
Traducción Automática