Course Code: ldd
Duration: 35 hours
Prerequisites:

  • Grundläggande bekantskap med att använda ett GNU/Linux-system som slutanvändare
  • Grundläggande bekantskap med ett kommandotolk-gränssnitt
  • Grundläggande kunskap om användarutrymme / applikationsutveckling
  • Mellanliggande C-programmeringskunskap
  • Bör ha deltagit i Inbyggd GNU/Linux-systemarkitektur tidigare (starkt rekommenderat!) och/eller ha god förståelse för de ämnen som presenteras där

Overview:

Beskrivning

Denna femdagars utbildningskurs använder praktiska övningar kombinerat med undervisning för att illustrera koncepten kring GNU/Linux-kärnans interna funktioner och utveckling av enhetsdrivrutiner. Kursen är designad för att snabbt sätta dig upptill speed. Vi beskriver processer, begrepp och kommandon som är nödvändiga för att skriva GNU/Linux-enhetsdrivrutiner genom en kombination av teori och praktikbaserad utbildning.

Behöver inte återuppfinna hjulet, men lära sig av en erfaren lärare och ta hem en fungerande kunskap och förmåga att använda det effektivt i eget inbyggd utvecklingsprojekt.

Vem ska delta?

Personer med intresse eller uppgift att utveckla eller evaluera utvecklingen av GNU/Linux-enhetsdrivrutiner som mjukvaruingenjörer, fälttekniker, (projekt)chefer, hårdvaruingenjörer.

Course Outline:

Introduktion

  • snabb historia om GNU/Linux
  • licensiering
  • kärnversionshantering
  • utgivningscykel
  • kärnträd
  • mainline
  • kärna mot användarutrymme
  • mekanism kontra policy
  • alternativ för kärndrivrutin
  • RTOS mot Linux

Minneshantering

  • virtuellt minne mot fysiskt minne
  • minnesallokering i kärna
  • sidor
  • zoner
  • API
  • slab

Kärnpatch

  • livscykel
  • git
  • kärnarkiv
  • skapa patch
  • kontrollera patch
  • korrigera patch
  • leverera patch
  • granskad kod

Kärnmoduler

  • hämta kärnarkiv
  • konfigurera/bygg/installera
  • enhetsdrivrutiner (statiskt länkade, laddade vid körning)
  • init/exit
  • licensiering
  • EXPORT SYMBOL GPL
  • out-of-tree makefil
  • module-init-tools
  • modul i kärnträd
  • Kconfig
  • parameteröverföring
  • sparse

Char-drivrutiner

  • arkitektur
  • användar/kärnagränssnitt
  • I/O-subsystem
  • VFS
  • sysfs (enheter, bussar, drivrutiner, klasser),
  • kobject/ktype/kset
  • linux-kärnans drivrutinsmodell
  • enhetsfiler
  • char-drivrutin

    • initiering
    • registrering
    • öppna, stäng
    • cdev, cdev add, cdev del,...
    • huvud/under-nummer
    • udev, udevmonitor, udevadm

Avancerade char-drivrutinsoperationer

  • ioctl
  • unlocked ioctl
  • compat ioctl
  • användarutrymmes-API
  • kärnutrymmes-API
  • processlivscykel
  • sova/blockera
  • sova/vakna
  • väntekö
  • thundering herd
  • poll/select

Kärnfelsökning

  • felsökning
  • felsöka kärnan

    • binär sökning med git
    • felsökningsstöd från kärna
    • printk syslogd, klogd, loggningsnivåer, hastighetsbegränsning, felsökningsnivåer, valfri felsökning av delsystem
    • felsökning genom att fråga debugfs
    • oops-felsökning, påstå oops
    • Magic SysRq-nyckel
    • kgdb/kdb
    • JTAG

Spårning

  • gcov
  • lcov
  • oprofile
  • ftrace

    • nop-spårare
    • funktionsspårare
    • schemalägningsväxlingsspårare
    • funktionsgraf-spårare
    • dynamisk spårare
  • trace-cmd/kernelshark
  • perf
  • LTTng

Avbrott

  • avbrott kontra polling
  • avbrott
  • programsektioner
  • reentrancy
  • händelser
  • avbrottsbehandlare
  • delad avbrottsbehandlare
  • avbrottsflöde
  • avbrottskontroll

Uppsättning av arbete

  • top/bottom-halvor
  • softirqs
  • tasklets
  • arbetsköer
  • trådad avbrott

Samtidig exekvering

  • kritiskt område/sektion
  • atomärt
  • racetillstånd
  • synkronisering
  • låsning
  • låsningslösningar
  • dödslås
  • konkurrens
  • vad ska låsas?
  • vad kan användas?

    • atomära operationer
    • spin-lås
    • läsare-skrivare spin-lås
    • semafor
    • binär semafor
    • mutex
    • läsare-skrivare semafor
    • fullföljandevärdet
    • sekventiella lås
    • inaktivera preemption
    • ordning och barriärer

Tid

  • HZ
  • Jiffies
  • stora/små förseningar
  • kärntimrar

Hårdvara I/O

  • I/O-portar
  • I/O-minne
  • Hur hantera sidoeffekter vid åtkomst till register?

Användar-Kärn-kommunikation

  • put(get)_user()
  • kopiera till(från)_user()
  • Kärn-I/O
  • minnesspanning
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Portabilitet

  • ordstorlek
  • opak typer
  • signerade/osignerade char
  • datajustering
  • integralpromotion
  • kodåteranvändning
  • endianess
  • systemtick
  • sidstorlek
  • instruktionordning
  • SMP/preemption/högt minne

Med undantag för vad som annars anges är innehållet och denna kursplan licensierade under Namngivning-IckeKommersiell-DelaLika 4.0 Internationell (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