Course Code: ldd
Duration: 35 hours
Prerequisites:
- Conocimiento básico del uso de un sistema GNU/Linux como usuario final
- Conocimiento básico de un shell de línea de comandos
- Conocimientos básicos de desarrollo en espacio de usuario / aplicaciones
- Conocimiento intermedio de programación en C
- Debería haber asistido antes a Arquitectura de Sistemas GNU/Linux Integrados (¡muy recomendado!) y/o tener un buen entendimiento de los temas allí descritos
Overview:
Descripción
Este curso de formación de 5 días utiliza ejercicios prácticos combinados con instrucciones para ilustrar los conceptos de las integridades internas del kernel GNU/Linux y el desarrollo de controladores de dispositivos. Está diseñado para ponerte al día rápidamente. Describe los procesos, conceptos y comandos necesarios para escribir controladores de dispositivos GNU/Linux a través de una combinación de teoría y entrenamiento en el puesto de trabajo.
No reinventes la rueda, pero aprende de un formador con experiencia y lleva contigo el conocimiento funcional y la capacidad de usarlo eficazmente en tu propio proyecto de desarrollo integrado.
¿Quién debería asistir?
Personas interesadas o encargadas del desarrollo o evaluación del desarrollo de controladores de dispositivos GNU/Linux, como ingenieros de software, ingenieros de campo, gerentes (de proyecto) e ingenieros de hardware.
Course Outline:
Introducción
- historia rápida de GNU/Linux
- licenciamiento
- versionado del kernel
- ciclo de lanzamiento
- ramas del kernel
- mainline
- kernel frente a espacio de usuario
- mecanismo frente a política
- alternativas de controladores del kernel
- RTOS frente a Linux
Gestión de Memoria
- memoria virtual frente a memoria física
- asignación de memoria en el kernel
- páginas
- zonas
- API
- slab
Parche del Kernel
- ciclo de vida
- git
- 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
- EXPORTAR SÍMBOLO GPL
- makefile fuera del árbol de fuentes
- herramientas de inicio de módulo (module-init-tools)
- módulo dentro del árbol del kernel
- Kconfig
- paso de parámetros
- sparse
Controladores de Caracteres
- arquitectura
- interfaz usuario/kernel
- subsistema I/O
- VFS (Sistema de Archivos Virtual)
- sysfs (dispositivos, bus, controladores, clases),
- kobject/ktype/kset
- modelo de controlador del kernel de Linux
- archivos de dispositivo
-
controlador de carácter
- inicialización
- registro
- open, release
- cdev, cdev add, cdev del,...
- números mayor/menor
- udev, udevmonitor, udevadm
Operaciones Avanzadas de Controladores de Caracteres
- ioctl
- ioctl sin bloqueo
- ioctl compatible (compat ioctl)
- API en espacio de usuario
- API en espacio de kernel
- ciclo de vida del proceso
- dormir/bloquear
- dormir/despertar
- cola de espera (wait queue)
- problema del rebaño tronador (thundering herd)
- poll/select
Depuración del Kernel
- depuración
-
depuración del kernel
- búsqueda binaria con git
- soporte de depuración del kernel
- printk syslogd, klogd, niveles de registro, límite de tasa, niveles de depuración, sistemas selectivos de depuración
- depuración mediante consulta de debugfs
- depuración de oops, aseguramiento de oops
- Tecla Mágica SysRq
- kgdb/kdb
- JTAG
Rastreo (Tracing)
- gcov
- lcov
- oprofile
-
ftrace
- traza nop
- traza de funciones
- traza de cambios de planificador (sched switch)
- traza de gráfico de funciones
- traza dinámica
- trace-cmd/kernelshark
- perf
- LTTng
Interrupciones
- interrupciones frente a sondeo (polling)
- interrupción
- secciones de programa
- reintroducción (reentrancy)
- eventos
- manejador de interrupciones
- manejador de interrupciones compartido
- flujo de interrupciones
- control de interrupciones
Aplazamiento de Trabajo
- partes superiores/inferiores (top/bottom halves)
- softirqs (interrupciones de software)
- tasklets
- colas de trabajo (work queues)
- interrupciones en hilo (threaded interrupts)
Concurrencia
- región/sección crítica
- atómico (atomic)
- condición de carrera (race condition)
- sincronización
- bloqueo (locking)
- soluciones de bloqueo
- interbloqueo (deadlock)
- contención
- ¿qué bloquear?
-
¿qué se puede usar?
- operaciones atómicas
- bloqueos de giro (spin locks)
- bloqueos de giro lector-escritor
- semáforo
- semáforo binario
- mutex
- semáforo lector-escritor
- variables de finalización (completion variables)
- bloqueos secuenciales
- deshabilitar preemoción
- ordenación y barreras (barriers)
Tiempo
- HZ
- Jiffies
- demoras grandes/pequeñas
- temporizadores del kernel
E/I de Hardware
- Puertos de E/I
- Memoria de E/I
- ¿Cómo lidiar con los efectos secundarios al acceder a registros?
Comunicación Usuario-Kernel
- put(get)_user()
- copiar a(desde)_user()
- E/I del Kernel
- mapeo de memoria
- procfs
- sysfs
- debugfs
- relayfs
- netlink
- ioctl
Portabilidad
- tamaño de palabra
- tipos opacos
- char con/sin signo
- alineación de datos
- promoción entera (integral promotion)
- reutilización de código
- endianidad (endianess)
- tick del sistema
- tamaño de página
- ordenación de instrucciones
- SMP/preemoción/memoria alta
A menos que se indique lo contrario, el contenido y este programa de curso tienen licencia bajo Atribución-NoComercial-CompartirIgual 4.0 Internacional (CC BY-NC-SA 4.0).
United Arab Emirates - Embedded GNU/Linux Kernel Internals and Device Drivers
Qatar - Embedded GNU/Linux Kernel Internals and Device Drivers
Egypt - Embedded GNU/Linux Kernel Internals and Device Drivers
Saudi Arabia - Embedded GNU/Linux Kernel Internals and Device Drivers
South Africa - Embedded GNU/Linux Kernel Internals and Device Drivers
Brasil - Integridade do Kernel GNU/Linux Embarcado e Drivers de Dispositivo
Canada - Embedded GNU/Linux Kernel Internals and Device Drivers
香港 - Embedded GNU/Linux Kernel Internals and Device Drivers
澳門 - Embedded GNU/Linux Kernel Internals and Device Drivers
台灣 - Embedded GNU/Linux Kernel Internals and Device Drivers
USA - Embedded GNU/Linux Kernel Internals and Device Drivers
Österreich - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber
Schweiz - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber
Deutschland - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber
Czech Republic - Interní struktura jádra GNU/Linuxu a ovladače zařízení
Denmark - Embedded GNU/Linux Kernel Internals and Device Drivers
Estonia - Embedded GNU/Linux Kernel Internals and Device Drivers
Finland - Embedded GNU/Linux Kernel Internals and Device Drivers
Greece - Εσώτερο Λειτουργικό των Πυρήνων GNU/Linux και Οδηγοί Συσκευών
Magyarország - Beágyazott GNU/Linux Kernel Belső Működése és Eszközmeghajtók
Ireland - Embedded GNU/Linux Kernel Internals and Device Drivers
Luxembourg - Embedded GNU/Linux Kernel Internals and Device Drivers
Latvia - Embedded GNU/Linux Kernel Internals and Device Drivers
España - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Italia - Interni del kernel GNU/Linux e driver di dispositivo
Lithuania - Embedded GNU/Linux Kernel Internals and Device Drivers
Nederland - Inwendige werking van de GNU/Linux-kernel en apparaatstuurprogramma's
Norway - Inne i Linux-kjernen for innbygde systemer og enhetsdrivere
Portugal - Integridade do Kernel GNU/Linux Embarcado e Drivers de Dispositivo
România - Internele Nucleului GNU/Linux și Driverele de Dispozitive
Sverige - Inbyggd GNU/Linux-kärninterna funktioner och enhetsdrivrutiner
Türkiye - Gömülü GNU/Linux Çekirdek İç Yapıları ve Cihaz Sürücüleri
Malta - Embedded GNU/Linux Kernel Internals and Device Drivers
Belgique - Internalités du noyau GNU/Linux et pilotes de périphériques intégrés
France - Internalités du noyau GNU/Linux et pilotes de périphériques intégrés
日本 - 埋め込み GNU/Linux カーネルの内部構造とデバイスドライバ
Australia - Embedded GNU/Linux Kernel Internals and Device Drivers
Malaysia - Embedded GNU/Linux Kernel Internals and Device Drivers
New Zealand - Embedded GNU/Linux Kernel Internals and Device Drivers
Philippines - Embedded GNU/Linux Kernel Internals and Device Drivers
Singapore - Embedded GNU/Linux Kernel Internals and Device Drivers
Thailand - Embedded GNU/Linux Kernel Internals and Device Drivers
Vietnam - Kiến trúc Nhân GNU/Linux Nhúng và Trình điều khiển Thiết bị
India - Embedded GNU/Linux Kernel Internals and Device Drivers
Argentina - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Chile - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Costa Rica - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Ecuador - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Guatemala - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Colombia - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
México - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Panama - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Peru - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Uruguay - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Venezuela - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Polska - Wewnętrzne mechanizmy jądra GNU/Linux i sterowniki urządzeń
United Kingdom - Embedded GNU/Linux Kernel Internals and Device Drivers
South Korea - 임베디드 GNU/리눅스 커널 내부 구조 및 장치 드라이버
Pakistan - Embedded GNU/Linux Kernel Internals and Device Drivers
Sri Lanka - Embedded GNU/Linux Kernel Internals and Device Drivers
Bulgaria - Вградени вътрешни принципи на ядрото GNU/Linux и драйвери на устройства
Bolivia - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados
Indonesia - Embedded GNU/Linux Kernel Internals and Device Drivers
Kazakhstan - Embedded GNU/Linux Kernel Internals and Device Drivers
Moldova - Internele Nucleului GNU/Linux și Driverele de Dispozitive
Morocco - Embedded GNU/Linux Kernel Internals and Device Drivers
Tunisia - Embedded GNU/Linux Kernel Internals and Device Drivers
Kuwait - Embedded GNU/Linux Kernel Internals and Device Drivers
Oman - Embedded GNU/Linux Kernel Internals and Device Drivers
Slovakia - Embedded GNU/Linux Kernel Internals and Device Drivers
Kenya - Embedded GNU/Linux Kernel Internals and Device Drivers
Nigeria - Embedded GNU/Linux Kernel Internals and Device Drivers
Botswana - Embedded GNU/Linux Kernel Internals and Device Drivers
Slovenia - Embedded GNU/Linux Kernel Internals and Device Drivers
Croatia - Embedded GNU/Linux Kernel Internals and Device Drivers
Serbia - Embedded GNU/Linux Kernel Internals and Device Drivers
Bhutan - Embedded GNU/Linux Kernel Internals and Device Drivers
Nepal - Embedded GNU/Linux Kernel Internals and Device Drivers
Uzbekistan - Embedded GNU/Linux Kernel Internals and Device Drivers
US Government - Embedded GNU/Linux Kernel Internals and Device Drivers