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).

Sites Published:

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

中国 - 嵌入式GNU/Linux内核与设备驱动

香港 - 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